diff options
318 files changed, 65625 insertions, 6953 deletions
diff --git a/Plugins/listeningto/Docs/listeningto_changelog.txt b/Plugins/listeningto/Docs/listeningto_changelog.txt index 8a3a578..c5078b9 100644 --- a/Plugins/listeningto/Docs/listeningto_changelog.txt +++ b/Plugins/listeningto/Docs/listeningto_changelog.txt @@ -1,6 +1,35 @@ ListeningTo
-
+TODO:
+ * remove watrack (not needet since watrack support jabber-tune) ?
+ * dynamic disable mRadio player on optionspage 'IDD_PLAYERS'
+ if user disable radio stream on optionspage 'IDD_OPTIONS'
+ + add processing multi-media-keys (to fix some problems with wmp player)
+
Changelog:
+. 0.3.1.1 (in work)
+ * update copyright
+ + support Awkward's great mRadio Mod plugin (new player)
+ support mRadio +0.0.1.7 and new beta 0.0.2.1 event system
+ * port latest m_music.inc to m_music.h
+ + add new core langpack support (support new langpack design)
+ * change HookEvent to HookEventObj in watrack class
+ * change min core version from 0x0600 to 0x0800
+
+. 0.3.1.0
+ + use precompile header (patch by Merlin_de)
+ * change iTunes to new class member and rework COM connection - not testet (patch by Merlin_de)
+ + rework WMP player, COM full "remoting" the Windows Media Player Control
+ real anable / disable the player, event and status support - no need for LiveMessanger (patch by Merlin_de)
+ + rework foobar player, add foo_comserver2 support
+ and true event handling, no polling need (COM conection - patch by Merlin_de)
+ * change CALL macro to prevent mem leaks (patch by Merlin_de)
+ * change hTimer to support active player (faster - patch by Merlin_de)
+ + foo_mlt check for foo_comserver2 (stop work if present, no need for foo_mlt - patch by Merlin_de)
+ + foo_mlt add "on_init" and "on_quit" to prevent show wrong info (patch by Merlin_de)
+ * FIX foo_mlt and update to foobar2000 SDK 2010-10-02 (patch by Merlin_de)
+ + x64 unicode release (patch by Merlin_de)
+ + native clist_nicer icon-slot support (patch by Merlin_de)
+ + native clist_mw icon-slot support (patch by Merlin_de)
. 0.3.0.0
+ A lot of changes for the internal logic for handling players
diff --git a/Plugins/listeningto/commons.h b/Plugins/listeningto/commons.h index 6c52073..b052ca6 100644 --- a/Plugins/listeningto/commons.h +++ b/Plugins/listeningto/commons.h @@ -1,26 +1,47 @@ /*
-Copyright (C) 2006 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
-
-
#ifndef __COMMONS_H__
# define __COMMONS_H__
+/***********************************************************************************************************
+ * standard windows includes
+ ***********************************************************************************************************/
#include <windows.h>
#include <tchar.h>
@@ -30,10 +51,16 @@ Boston, MA 02111-1307, USA. #include <algorithm>
#include <functional>
+// Help out windows:
+#if defined(_DEBUG) && !defined(DEBUG)
+#define DEBUG
+#endif
+/***********************************************************************************************************
+ * Miranda IM SDK includes and macros
+ ***********************************************************************************************************/
-// Miranda headers
-#define MIRANDA_VER 0x0600
+#define MIRANDA_VER 0x0A00
#include <newpluginapi.h>
#include <win2k.h>
@@ -52,6 +79,7 @@ Boston, MA 02111-1307, USA. #include <m_history.h>
#include <m_proto_listeningto.h>
#include <m_music.h>
+#include <m_radio.h>
#include <m_toptoolbar.h>
#include <m_icolib.h>
#include <m_icq.h>
@@ -62,6 +90,9 @@ Boston, MA 02111-1307, USA. #include <m_hotkeys.h>
#include <m_extraicons.h>
+/***********************************************************************************************************
+ * utils includes and macros
+ ***********************************************************************************************************/
#include "../utils/mir_memory.h"
#include "../utils/mir_options.h"
@@ -69,33 +100,72 @@ Boston, MA 02111-1307, USA. #include "../utils/mir_buffer.h"
#include "../utils/utf8_helpers.h"
+/***********************************************************************************************************
+ * Used Plugins SDK includes and macros
+ ***********************************************************************************************************/
+
#include "m_listeningto.h"
#include "music.h"
+#include "players\player.h"
+#include "players\watrack.h"
+#include "players\generic.h"
+#include "players\winamp.h"
+#include "players\foobar.h"
+#include "players\itunes.h"
+#include "players\mswmp.h"
+#include "players\mswlm.h"
+#include "players\mRadio.h"
+//#include "players\vlc.h"
+
+#include "version.h"
#include "resource.h"
#include "options.h"
+/***********************************************************************************************************
+ * macros
+ ***********************************************************************************************************/
+static bool IsEmpty(const char *str)
+{
+ return str == NULL || str[0] == 0;
+}
+static bool IsEmpty(const WCHAR *str)
+{
+ return str == NULL || str[0] == 0;
+}
+
+#define DUP(_X_) ( IsEmpty(_X_) ? NULL : mir_tstrdup(_X_) )
+#define DUPD(_X_, _DEF_) ( IsEmpty(_X_) ? mir_tstrdup(_DEF_) : mir_tstrdup(_X_) )
+#define U2T(_X_) ( IsEmpty(_X_) ? NULL : mir_u2t(_X_) )
+#define U2TD(_X_, _DEF_) ( IsEmpty(_X_) ? mir_u2t(_DEF_) : mir_u2t(_X_) )
+#define MIR_FREE(_X_) { mir_free(_X_); _X_ = NULL; }
+#define MAX_REGS(_A_) ( sizeof(_A_) / sizeof(_A_[0]) )
+#define KILLTIMER(_X_) { if (_X_ != NULL) {KillTimer(NULL, _X_); _X_ = NULL; }}
+#define PtrIsValid(p) (((p)!=0)&&(((HANDLE)(p))!=INVALID_HANDLE_VALUE))
+
+#ifdef DEBUG
+#define DEBUGOUT(_x_,_y_) { OutputDebugStringA(_x_); OutputDebugStringA(_y_); OutputDebugStringA("\n");}
+#else
+ #define DEBUGOUT(_x_,_y_)
+#endif
+
+/***********************************************************************************************************
+ * listeningto.cpp
+ ***********************************************************************************************************/
#define MODULE_NAME "ListeningTo"
-
+//#define MIN_TIME_BEETWEEN_SETS 10000 // ms
+#define MIN_TIME_BEETWEEN_SETS 1000 // ms
// Global Variables
extern HINSTANCE hInst;
extern PLUGINLINK *pluginLink;
extern BOOL loaded;
-
-#define MIR_FREE(_X_) { mir_free(_X_); _X_ = NULL; }
-#define MAX_REGS(_A_) ( sizeof(_A_) / sizeof(_A_[0]) )
-
-
-#define MIN_TIME_BEETWEEN_SETS 10000 // ms
-
+extern Player *players[NUM_PLAYERS];
void RebuildMenu();
void StartTimer();
-int ProtoServiceExists(const char *szModule, const char *szService);
-
-
+int ProtoServiceExists(const char *szModule, const char *szService);
struct ProtocolInfo
{
char proto[128];
@@ -106,23 +176,8 @@ struct ProtocolInfo TCHAR old_xstatus_message[1024];
};
-ProtocolInfo *GetProtoInfo(char *proto);
-int m_log(const TCHAR *function, const TCHAR *fmt, ...);
-
-
-static bool IsEmpty(const char *str)
-{
- return str == NULL || str[0] == 0;
-}
-static bool IsEmpty(const WCHAR *str)
-{
- return str == NULL || str[0] == 0;
-}
-#define DUP(_X_) ( IsEmpty(_X_) ? NULL : mir_tstrdup(_X_) )
-#define DUPD(_X_, _DEF_) ( IsEmpty(_X_) ? mir_tstrdup(_DEF_) : mir_tstrdup(_X_) )
-#define U2T(_X_) ( IsEmpty(_X_) ? NULL : mir_u2t(_X_) )
-#define U2TD(_X_, _DEF_) ( IsEmpty(_X_) ? mir_u2t(_DEF_) : mir_u2t(_X_) )
+ProtocolInfo *GetProtoInfo(char *proto);
#endif // __COMMONS_H__
diff --git a/Plugins/listeningto/listeningto.cpp b/Plugins/listeningto/listeningto.cpp index 7ca9647..d0ced8c 100644 --- a/Plugins/listeningto/listeningto.cpp +++ b/Plugins/listeningto/listeningto.cpp @@ -1,20 +1,40 @@ /*
-Copyright (C) 2006-2009 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
@@ -36,34 +56,26 @@ Boston, MA 02111-1307, USA. #define ICON_NAME "LISTENING_TO_ICON"
-
PLUGININFOEX pluginInfo={
sizeof(PLUGININFOEX),
-#ifdef UNICODE
- "ListeningTo (Unicode)",
-#else
- "ListeningTo",
-#endif
- PLUGIN_MAKE_VERSION(0,3,0,0),
- "Handle listening information to/for contacts",
- "Ricardo Pescuma Domenecci",
- "",
- "© 2006-2009 Ricardo Pescuma Domenecci",
- "http://pescuma.org/miranda/listeningto",
+ __PLUGIN_DISPLAY_NAME,
+ __VERSION_DWORD,
+ __SHORT_DESC,
+ __AUTHOR,
+ __AUTHOREMAIL,
+ __COPYRIGHT,
+ __AUTHORWEB,
UNICODE_AWARE,
- 0, //doesn't replace anything built-in
-#ifdef UNICODE
- { 0xf981f3f5, 0x35a, 0x444f, { 0x98, 0x92, 0xca, 0x72, 0x2c, 0x19, 0x5a, 0xda } } // {F981F3F5-035A-444f-9892-CA722C195ADA}
-#else
- { 0xa4a8ff7a, 0xc48a, 0x4d2a, { 0xb5, 0xa9, 0x46, 0x46, 0x84, 0x43, 0x26, 0x3d } } // {A4A8FF7A-C48A-4d2a-B5A9-46468443263D}
-#endif
+ 0, //doesn't replace anything built-in
+ MIID_LISTENINGTO //change to __UPDATER_UID if updater plugin support it
};
-HINSTANCE hInst;
-PLUGINLINK *pluginLink;
-struct MM_INTERFACE mmi;
-struct UTF8_INTERFACE utfi;
+HINSTANCE hInst;
+PLUGINLINK* pluginLink;
+struct MM_INTERFACE mmi;
+struct UTF8_INTERFACE utfi;
+int hLangpack = 0; //register for new langpack support
static std::vector<HANDLE> hHooks;
static std::vector<HANDLE> hServices;
@@ -74,9 +86,10 @@ static HANDLE hMainMenuGroup = NULL; static HANDLE hTTB = NULL;
static char *metacontacts_proto = NULL;
BOOL loaded = FALSE;
-static UINT hTimer = 0;
+UINT_PTR hTimer = 0;
static HANDLE hExtraImage = NULL;
static DWORD lastInfoSetTime = 0;
+int activePlayer = -1;
std::vector<ProtocolInfo> proto_itens;
@@ -88,20 +101,20 @@ int TopToolBarLoaded(WPARAM wParam, LPARAM lParam); int ClistExtraListRebuild(WPARAM wParam, LPARAM lParam);
int SettingChanged(WPARAM wParam,LPARAM lParam);
-int MainMenuClicked(WPARAM wParam, LPARAM lParam);
-BOOL ListeningToEnabled(char *proto, BOOL ignoreGlobal = FALSE);
-int ListeningToEnabled(WPARAM wParam, LPARAM lParam);
-int EnableListeningTo(WPARAM wParam,LPARAM lParam);
-int GetTextFormat(WPARAM wParam,LPARAM lParam);
-int GetParsedFormat(WPARAM wParam,LPARAM lParam);
-int GetOverrideContactOption(WPARAM wParam,LPARAM lParam);
-int GetUnknownText(WPARAM wParam,LPARAM lParam);
-int SetNewSong(WPARAM wParam,LPARAM lParam);
+INT_PTR MainMenuClicked(WPARAM wParam, LPARAM lParam);
+INT_PTR ListeningToEnabled(char *proto, BOOL ignoreGlobal = FALSE);
+INT_PTR ListeningToEnabled(WPARAM wParam, LPARAM lParam);
+INT_PTR EnableListeningTo(WPARAM wParam,LPARAM lParam);
+INT_PTR GetTextFormat(WPARAM wParam,LPARAM lParam);
+INT_PTR GetParsedFormat(WPARAM wParam,LPARAM lParam);
+INT_PTR GetOverrideContactOption(WPARAM wParam,LPARAM lParam);
+INT_PTR GetUnknownText(WPARAM wParam,LPARAM lParam);
+INT_PTR SetNewSong(WPARAM wParam,LPARAM lParam);
void SetExtraIcon(HANDLE hContact, BOOL set);
void SetListeningInfos(LISTENINGTOINFO *lti);
-int HotkeysEnable(WPARAM wParam,LPARAM lParam);
-int HotkeysDisable(WPARAM wParam,LPARAM lParam);
-int HotkeysToggle(WPARAM wParam,LPARAM lParam);
+INT_PTR HotkeysEnable(WPARAM wParam,LPARAM lParam);
+INT_PTR HotkeysDisable(WPARAM wParam,LPARAM lParam);
+INT_PTR HotkeysToggle(WPARAM wParam,LPARAM lParam);
TCHAR* VariablesParseInfo(ARGUMENTSINFO *ai);
TCHAR* VariablesParseType(ARGUMENTSINFO *ai);
@@ -150,33 +163,14 @@ extern "C" __declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) return interfaces;
}
-/*
-BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam)
-{
- // Find the windows
- char class_name[1024];
- if (GetClassNameA(hwnd, class_name, sizeof(class_name)))
- {
- class_name[sizeof(class_name)-1] = '\0';
-OutputDebugStringA(class_name);
-OutputDebugStringA(" -> ");
- GetWindowTextA(hwnd, class_name, 1024);
-OutputDebugStringA(class_name);
-OutputDebugStringA("\n");
- }
-
- return TRUE;
-}
-*/
-
extern "C" int __declspec(dllexport) Load(PLUGINLINK *link)
{
-// EnumWindows(EnumWindowsProc, 0);
-
pluginLink = link;
mir_getMMI(&mmi);
mir_getUTFI(&utfi);
+ mir_getLP(&pluginInfo);
+
CHECK_VERSION("Listening To")
@@ -283,7 +277,7 @@ void RegisterProtocol(char *proto, TCHAR *account) !ProtoServiceExists(proto, PS_ICQ_SETCUSTOMSTATUSEX))
return;
- int id = proto_itens.size();
+ size_t id = proto_itens.size();
proto_itens.resize(id+1);
strncpy(proto_itens[id].proto, proto, MAX_REGS(proto_itens[id].proto));
@@ -399,25 +393,23 @@ int ModulesLoaded(WPARAM wParam, LPARAM lParam) Update upd = {0};
char szCurrentVersion[30];
- upd.cbSize = sizeof(upd);
- upd.szComponentName = pluginInfo.shortName;
+ upd.cbSize = sizeof(upd);
+ upd.szComponentName = pluginInfo.shortName;
- upd.szUpdateURL = UPDATER_AUTOREGISTER;
+ upd.szUpdateURL = UPDATER_AUTOREGISTER;
- upd.szBetaVersionURL = "http://pescuma.org/miranda/listeningto_version.txt";
- upd.szBetaChangelogURL = "http://pescuma.org/miranda/listeningto#Changelog";
- upd.pbBetaVersionPrefix = (BYTE *)"ListeningTo ";
- upd.cpbBetaVersionPrefix = strlen((char *)upd.pbBetaVersionPrefix);
-#ifdef UNICODE
- upd.szBetaUpdateURL = "http://pescuma.org/miranda/listeningtoW.zip";
-#else
- upd.szBetaUpdateURL = "http://pescuma.org/miranda/listeningto.zip";
-#endif
+ upd.pbVersion = (BYTE *)CreateVersionString(pluginInfo.version, szCurrentVersion);
+ upd.cpbVersion = (int)strlen((char *)upd.pbVersion);
- upd.pbVersion = (BYTE *)CreateVersionStringPlugin((PLUGININFO*) &pluginInfo, szCurrentVersion);
- upd.cpbVersion = strlen((char *)upd.pbVersion);
+ upd.szBetaVersionURL = __UPDATER_BETA_VERURL;
+ // bytes occuring in VersionURL before the version, used to locate the version information within the URL data
+ upd.pbBetaVersionPrefix = (BYTE *)__UPDATER_BETA_VERPRE;
+ upd.cpbBetaVersionPrefix = (int)strlen((char *)upd.pbBetaVersionPrefix);
+ upd.szBetaUpdateURL = __UPDATER_BETA_URL;
+ // url for displaying changelog for beta versions
+ upd.szBetaChangelogURL = __UPDATER_BETA_CHLOG;
- CallService(MS_UPDATE_REGISTER, 0, (LPARAM)&upd);
+ CallService(MS_UPDATE_REGISTER, 0, (LPARAM)&upd);
}
{
@@ -442,8 +434,8 @@ int ModulesLoaded(WPARAM wParam, LPARAM lParam) mi.hIcon = NULL;
// Add all protos
- mi.pszName = Translate("Send to all protocols");
- mi.flags = CMIF_CHILDPOPUP
+ mi.ptszName = LPGENT("Send to all protocols");
+ mi.flags = CMIF_CHILDPOPUP | CMIF_TCHAR
| (ListeningToEnabled(NULL, TRUE) ? CMIF_CHECKED : 0)
| (opts.enable_sending ? 0 : CMIF_GRAYED);
proto_itens.resize(1);
@@ -460,8 +452,8 @@ int ModulesLoaded(WPARAM wParam, LPARAM lParam) if (ServiceExists(MS_PROTO_ENUMACCOUNTS))
{
PROTOACCOUNT **protos;
- int count;
- CallService(MS_PROTO_ENUMACCOUNTS, (WPARAM)&count, (LPARAM)&protos);
+ int count = 0;
+ ProtoEnumAccounts(&count,&protos);
for (int i = 0; i < count; i++)
{
@@ -475,25 +467,6 @@ int ModulesLoaded(WPARAM wParam, LPARAM lParam) hHooks.push_back( HookEvent(ME_PROTO_ACCLISTCHANGED, AccListChanged) );
}
- else
- {
- PROTOCOLDESCRIPTOR **protos;
- int count;
- CallService(MS_PROTO_ENUMPROTOCOLS, (WPARAM)&count, (LPARAM)&protos);
-
- for (int i = 0; i < count; i++)
- {
- if (protos[i]->type != PROTOTYPE_PROTOCOL)
- continue;
-
- char name[128];
- CallProtoService(protos[i]->szName, PS_GETNAME, sizeof(name), (LPARAM)name);
-
- TCHAR *acc = mir_a2t(name);
- RegisterProtocol(protos[i]->szName, acc);
- mir_free(acc);
- }
- }
RebuildMenu();
@@ -563,28 +536,30 @@ int ModulesLoaded(WPARAM wParam, LPARAM lParam) {
HOTKEYDESC hkd = {0};
hkd.cbSize = sizeof(hkd);
- hkd.pszSection = Translate("Listening to");
+ hkd.ptszSection = LPGENT("Listening to");
+ hkd.dwFlags = HKD_TCHAR;
hkd.pszService = MS_LISTENINGTO_HOTKEYS_ENABLE;
hkd.pszName = "ListeningTo/EnableAll";
- hkd.pszDescription = Translate("Send to all protocols");
+ hkd.ptszDescription = LPGENT("Send to all protocols");
CallService(MS_HOTKEY_REGISTER, 0, (LPARAM)&hkd);
hkd.pszService = MS_LISTENINGTO_HOTKEYS_DISABLE;
hkd.pszName = "ListeningTo/DisableAll";
- hkd.pszDescription = Translate("Don't send to any protocols");
+ hkd.ptszDescription = LPGENT("Don't send to any protocols");
CallService(MS_HOTKEY_REGISTER, 0, (LPARAM)&hkd);
hkd.pszService = MS_LISTENINGTO_HOTKEYS_TOGGLE;
hkd.pszName = "ListeningTo/ToggleAll";
- hkd.pszDescription = Translate("Toggle send to all protocols");
+ hkd.ptszDescription = LPGENT("Toggle send to all protocols");
CallService(MS_HOTKEY_REGISTER, 0, (LPARAM)&hkd);
}
SetListeningInfos(NULL);
- StartTimer();
loaded = TRUE;
+ if (!hTimer) //check if timer running (maybe start by HasNewListeningInfo)
+ StartTimer();
return 0;
}
@@ -594,17 +569,13 @@ int PreShutdown(WPARAM wParam, LPARAM lParam) {
loaded = FALSE;
- if (hTimer != NULL)
- {
- KillTimer(NULL, hTimer);
- hTimer = NULL;
- }
+ KILLTIMER(hTimer);
DeInitOptions();
DestroyHookableEvent(hEnableStateChangedEvent);
- int i;
+ unsigned int i;
for(i = 0; i < hHooks.size(); i++)
UnhookEvent(hHooks[i]);
@@ -612,12 +583,14 @@ int PreShutdown(WPARAM wParam, LPARAM lParam) DestroyServiceFunction(hServices[i]);
FreeMusic();
+ // To be sure that no one was left behind
+ SetListeningInfos(NULL);
return 0;
}
-int TopToolBarClick(WPARAM wParam, LPARAM lParam)
+INT_PTR TopToolBarClick(WPARAM wParam, LPARAM lParam)
{
BOOL enabled = !ListeningToEnabled(NULL, TRUE);
@@ -649,14 +622,14 @@ int TopToolBarLoaded(WPARAM wParam, LPARAM lParam) }
-int MainMenuClicked(WPARAM wParam, LPARAM lParam)
+INT_PTR MainMenuClicked(WPARAM wParam, LPARAM lParam)
{
if (!loaded)
return -1;
int pos = wParam == 0 ? 0 : wParam - 500080000;
- if (pos >= proto_itens.size() || pos < 0)
+ if (pos >= (signed) proto_itens.size() || pos < 0)
return 0;
EnableListeningTo((WPARAM) proto_itens[pos].proto, (LPARAM) !ListeningToEnabled(proto_itens[pos].proto, TRUE));
@@ -664,7 +637,7 @@ int MainMenuClicked(WPARAM wParam, LPARAM lParam) }
-BOOL ListeningToEnabled(char *proto, BOOL ignoreGlobal)
+INT_PTR ListeningToEnabled(char *proto, BOOL ignoreGlobal)
{
if (!ignoreGlobal && !opts.enable_sending)
return FALSE;
@@ -672,7 +645,7 @@ BOOL ListeningToEnabled(char *proto, BOOL ignoreGlobal) if (proto == NULL || proto[0] == 0)
{
// Check all protocols
- BOOL enabled = TRUE;
+ INT_PTR enabled = TRUE;
for (unsigned int i = 1; i < proto_itens.size(); ++i)
{
@@ -689,12 +662,12 @@ BOOL ListeningToEnabled(char *proto, BOOL ignoreGlobal) {
char setting[256];
mir_snprintf(setting, sizeof(setting), "%sEnabled", proto);
- return (BOOL) DBGetContactSettingByte(NULL, MODULE_NAME, setting, FALSE);
+ return (INT_PTR) DBGetContactSettingByte(NULL, MODULE_NAME, setting, FALSE);
}
}
-int ListeningToEnabled(WPARAM wParam, LPARAM lParam)
+INT_PTR ListeningToEnabled(WPARAM wParam, LPARAM lParam)
{
if (!loaded)
return -1;
@@ -923,7 +896,7 @@ void SetListeningInfo(char *proto, LISTENINGTOINFO *lti) }
-int EnableListeningTo(WPARAM wParam,LPARAM lParam)
+INT_PTR EnableListeningTo(WPARAM wParam,LPARAM lParam)
{
if (!loaded)
return -1;
@@ -969,7 +942,8 @@ int EnableListeningTo(WPARAM wParam,LPARAM lParam) UpdateGlobalStatusMenus();
}
- StartTimer();
+ if(!hTimer) //check always if timer exist !!
+ StartTimer();
NotifyEventHooks(hEnableStateChangedEvent, wParam, lParam);
@@ -977,34 +951,34 @@ int EnableListeningTo(WPARAM wParam,LPARAM lParam) }
-int HotkeysEnable(WPARAM wParam,LPARAM lParam)
+INT_PTR HotkeysEnable(WPARAM wParam,LPARAM lParam)
{
return EnableListeningTo(lParam, TRUE);
}
-int HotkeysDisable(WPARAM wParam,LPARAM lParam)
+INT_PTR HotkeysDisable(WPARAM wParam,LPARAM lParam)
{
return EnableListeningTo(lParam, FALSE);
}
-int HotkeysToggle(WPARAM wParam,LPARAM lParam)
+INT_PTR HotkeysToggle(WPARAM wParam,LPARAM lParam)
{
return EnableListeningTo(lParam, !ListeningToEnabled((char *)lParam, TRUE));
}
-int GetTextFormat(WPARAM wParam,LPARAM lParam)
+INT_PTR GetTextFormat(WPARAM wParam,LPARAM lParam)
{
if (!loaded)
return NULL;
- return (int) mir_tstrdup(opts.templ);
+ return (INT_PTR) mir_tstrdup(opts.templ);
}
-int GetParsedFormat(WPARAM wParam,LPARAM lParam)
+INT_PTR GetParsedFormat(WPARAM wParam,LPARAM lParam)
{
if (!loaded)
return NULL;
@@ -1028,19 +1002,19 @@ int GetParsedFormat(WPARAM wParam,LPARAM lParam) Buffer<TCHAR> ret;
ReplaceTemplate(&ret, NULL, opts.templ, fr, MAX_REGS(fr));
- return (int) ret.detach();
+ return (INT_PTR) ret.detach();
}
-int GetOverrideContactOption(WPARAM wParam,LPARAM lParam)
+INT_PTR GetOverrideContactOption(WPARAM wParam,LPARAM lParam)
{
- return (int) opts.override_contact_template;
+ return (INT_PTR) opts.override_contact_template;
}
-int GetUnknownText(WPARAM wParam,LPARAM lParam)
+INT_PTR GetUnknownText(WPARAM wParam,LPARAM lParam)
{
- return (int) opts.unknown;
+ return (INT_PTR) opts.unknown;
}
@@ -1050,24 +1024,28 @@ void SetListeningInfos(LISTENINGTOINFO *lti) {
SetListeningInfo(proto_itens[i].proto, lti);
}
+
+ lastInfoSetTime = GetTickCount();
+
+ if (!lti)
+ FreeListeningInfo(NULL);
}
+//--------------------------------------------------------------------------------
static void CALLBACK GetInfoTimer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime)
{
- if (hTimer != NULL)
- {
- KillTimer(NULL, hTimer);
- hTimer = NULL;
- }
+ if (!loaded)
+ return;
+
+ KILLTIMER(hTimer);
// Check if we can set it now...
DWORD now = GetTickCount();
if (now < lastInfoSetTime + MIN_TIME_BEETWEEN_SETS)
{
- hTimer = SetTimer(NULL, NULL, lastInfoSetTime + MIN_TIME_BEETWEEN_SETS - now, GetInfoTimer);
+ hTimer = SetTimer(NULL, NULL, lastInfoSetTime + MIN_TIME_BEETWEEN_SETS - now, (TIMERPROC)GetInfoTimer);
return;
}
- lastInfoSetTime = GetTickCount(); // TODO Move this to inside the if that really sets
if (!opts.enable_sending)
{
@@ -1077,40 +1055,55 @@ static void CALLBACK GetInfoTimer(HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTi }
// Set it
- int changed = ChangedListeningInfo();
- if (changed < 0)
- {
-// m_log(_T("GetInfoTimer"), _T("changed < 0"));
- SetListeningInfos(NULL);
- }
- else if (changed > 0)
- {
-// m_log(_T("GetInfoTimer"), _T("changed > 0"));
- SetListeningInfos(GetListeningInfo());
+ // ... ChangedListeningInfo reset also activePlayer depend on status !!
+ switch (ChangedListeningInfo()) {
+ case -1:
+ {
+ // m_log(_T("GetInfoTimer"), _T("changed < 0"));
+ SetListeningInfos(NULL);
+ } break;
+ case 1:
+ {
+ // m_log(_T("GetInfoTimer"), _T("changed > 0"));
+ SetListeningInfos(GetListeningInfo());
+ } break;
+ default:
+ break;
}
-
StartTimer();
}
void StartTimer()
{
- // See if any protocol want Listening info
- BOOL want = FALSE;
+ if (!loaded) return;
+
+ // See if any player and protocol want Listening info
+ BOOL want = FALSE;
+ BOOL needPoll = FALSE;
if (opts.enable_sending)
{
- if (!players[WATRACK]->enabled)
+ if (!players[WATRACK]->m_enabled)
{
// See if any player needs it
- BOOL needPoll = FALSE;
- int i;
- for (i = FIRST_PLAYER; i < NUM_PLAYERS; i++)
- {
- if (players[i]->needPoll)
+ if(activePlayer > -1) {
+ needPoll = players[activePlayer]->m_needPoll;
+ }
+ // See if any player needs it
+ else {
+ int i;
+ for (i = FIRST_PLAYER; i < NUM_PLAYERS; i++)
{
- needPoll = TRUE;
- break;
- }
+ if(!players[i]->m_enabled) //player is disabled
+ continue;
+ if(players[i]->GetStatus()) { //player is online
+ needPoll = players[i]->m_needPoll;
+ break;
+ }
+ else if (players[i]->m_needPoll) { //any player needs needPoll
+ needPoll = TRUE;
+ }
+ } //end for
}
if (needPoll)
@@ -1128,12 +1121,12 @@ void StartTimer() }
}
- if (want)
+ if (want) //set polling Timer
{
if (hTimer == NULL)
- hTimer = SetTimer(NULL, NULL, opts.time_to_pool * 1000, GetInfoTimer);
+ hTimer = SetTimer(NULL, NULL, opts.time_to_pool * 1000, (TIMERPROC)GetInfoTimer);
}
- else
+ else //disable polling Timer
{
if (hTimer != NULL)
{
@@ -1147,18 +1140,43 @@ void StartTimer() }
}
-void HasNewListeningInfo()
+void HasNewListeningInfo(int ID) //set timer for NotifyInfoChanged
{
- if (hTimer != NULL)
- {
- KillTimer(NULL, hTimer);
- hTimer = NULL;
- }
+ if( (activePlayer == -1 || players[activePlayer]->GetStatus() == PL_OFFLINE) &&
+ (players[ID]->GetStatus() > PL_OFFLINE) )
+ activePlayer = ID;
- hTimer = SetTimer(NULL, NULL, 100, GetInfoTimer);
+ else if(activePlayer != ID)
+ return;
+ KILLTIMER(hTimer);
+ //200ms for better handle COM double events inside NotifyInfoChanged (e.g. start event + track changed event)
+ hTimer = SetTimer(NULL, NULL, 200, (TIMERPROC)GetInfoTimer);
}
+BOOL SetActivePlayer(int ID, int newVal)
+{
+ if(activePlayer != -1 && activePlayer != ID)
+ return FALSE; //other player is active
+
+ activePlayer = (newVal > -1 && newVal < NUM_PLAYERS) ? newVal : -1;
+
+ if( (hTimer) &&
+ (activePlayer > 0) &&
+ (players[activePlayer]->m_needPoll == FALSE) )
+ {
+ KILLTIMER(hTimer);
+ }
+ else
+ if( (!hTimer) &&
+ (activePlayer < 0 || players[activePlayer]->m_needPoll == TRUE) )
+ {
+ StartTimer();
+ }
+
+ return TRUE;
+}
+//--------------------------------------------------------------------------------
int ClistExtraListRebuild(WPARAM wParam, LPARAM lParam)
{
HICON hIcon = IcoLib_LoadIcon(ICON_NAME);
@@ -1178,19 +1196,12 @@ void SetExtraIcon(HANDLE hContact, BOOL set) }
else if (opts.show_adv_icon && hExtraImage != NULL)
{
+ if (! ServiceExists("CListFrame/SetSkinnedFrame") && opts.adv_icon_slot == 0)
+ return;
IconExtraColumn iec;
iec.cbSize = sizeof(iec);
iec.hImage = set ? hExtraImage : (HANDLE)-1;
- if (opts.adv_icon_slot < 2)
- {
- iec.ColumnType = opts.adv_icon_slot + EXTRA_ICON_ADV1;
- }
- else
- {
- int first = CallService(MS_CLUI_GETCAPS, 0, CLUIF2_USEREXTRASTART);
- iec.ColumnType = opts.adv_icon_slot - 2 + first;
- }
-
+ iec.ColumnType = opts.adv_icon_slot;
CallService(MS_CLIST_EXTRA_SET_ICON, (WPARAM)hContact, (LPARAM)&iec);
}
}
@@ -1205,7 +1216,7 @@ int SettingChanged(WPARAM wParam,LPARAM lParam) if (strcmp(cws->szSetting, "ListeningTo") != 0)
return 0;
- char *proto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM) hContact, 0);
+ char *proto = (char *) CallService(MS_PROTO_GETCONTACTBASEPROTO, wParam, 0);
if (proto == NULL)
return 0;
@@ -1221,7 +1232,7 @@ int SettingChanged(WPARAM wParam,LPARAM lParam) }
-int SetNewSong(WPARAM wParam,LPARAM lParam)
+INT_PTR SetNewSong(WPARAM wParam,LPARAM lParam)
{
if (lParam == NULL)
return -1;
@@ -1241,7 +1252,7 @@ int SetNewSong(WPARAM wParam,LPARAM lParam) return 0;
}
-
+//--------------------------------------------------------------------------------
TCHAR* VariablesParseInfo(ARGUMENTSINFO *ai)
{
if (ai->cbSize < sizeof(ARGUMENTSINFO))
diff --git a/Plugins/listeningto/listeningto_10.sln b/Plugins/listeningto/listeningto_10.sln new file mode 100644 index 0000000..d6a9e25 --- /dev/null +++ b/Plugins/listeningto/listeningto_10.sln @@ -0,0 +1,66 @@ +
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual Studio 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listeningto", "listeningto_10.vcxproj", "{149F4AAD-43A8-484E-B734-E16CD79A2D6D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listeningto_foo_mlt", "players\foo_mlt\foo_mlt_10.vcxproj", "{94734E61-D980-4A5F-AAAA-65105755CE24}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listeningto_winamp_mlt", "players\winamp_mlt\mlt_winamp_10.vcxproj", "{8BBB15B7-D08B-475A-A58C-0C71D39FADB8}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Unicode|Win32 = Debug Unicode|Win32
+ Debug Unicode|x64 = Debug Unicode|x64
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release Unicode|Win32 = Release Unicode|Win32
+ Release Unicode|x64 = Release Unicode|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Debug Unicode|x64.ActiveCfg = Debug Unicode|x64
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Debug Unicode|x64.Build.0 = Debug Unicode|x64
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Debug|Win32.Build.0 = Debug|Win32
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Debug|x64.ActiveCfg = Debug|x64
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Debug|x64.Build.0 = Debug|x64
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Release Unicode|x64.ActiveCfg = Release Unicode|x64
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Release Unicode|x64.Build.0 = Release Unicode|x64
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Release|Win32.ActiveCfg = Release|Win32
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Release|Win32.Build.0 = Release|Win32
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Release|x64.ActiveCfg = Release|x64
+ {149F4AAD-43A8-484E-B734-E16CD79A2D6D}.Release|x64.Build.0 = Release|x64
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Debug Unicode|x64.ActiveCfg = Debug Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Debug|Win32.ActiveCfg = Debug Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Debug|Win32.Build.0 = Debug Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Debug|x64.ActiveCfg = Debug Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Release Unicode|x64.ActiveCfg = Release Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Release|Win32.ActiveCfg = Release Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Release|Win32.Build.0 = Release Unicode|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Release|x64.ActiveCfg = Release Unicode|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Debug Unicode|Win32.ActiveCfg = Debug|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Debug Unicode|Win32.Build.0 = Debug|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Debug Unicode|x64.ActiveCfg = Debug|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Debug|Win32.ActiveCfg = Debug|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Debug|Win32.Build.0 = Debug|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Debug|x64.ActiveCfg = Debug|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Release Unicode|Win32.ActiveCfg = Release|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Release Unicode|Win32.Build.0 = Release|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Release Unicode|x64.ActiveCfg = Release|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Release|Win32.ActiveCfg = Release|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Release|Win32.Build.0 = Release|Win32
+ {8BBB15B7-D08B-475A-A58C-0C71D39FADB8}.Release|x64.ActiveCfg = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Plugins/listeningto/listeningto_10.vcxproj b/Plugins/listeningto/listeningto_10.vcxproj new file mode 100644 index 0000000..c17a0fe --- /dev/null +++ b/Plugins/listeningto/listeningto_10.vcxproj @@ -0,0 +1,944 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>listeningto</ProjectName>
+ <ProjectGuid>{149F4AAD-43A8-484E-B734-E16CD79A2D6D}</ProjectGuid>
+ <RootNamespace>listeningto</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release|x64'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/$(ProjectName)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/$(ProjectName)\</IntDir>
+ <ExtensionsToDeleteOnClean Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">*.obj%3b*.ilk%3b*.tlb%3b*.tli%3b*.tlh%3b*.tmp%3b*.rsp%3b*.pch%3b*.pgc%3b*.pgd%3b*.meta%3b$(TargetPath)%3b$(TargetDir)$(ProjectName).*%3b$(TargetDir)$(RootNamespace).*</ExtensionsToDeleteOnClean>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">true</IgnoreImportLibrary>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">false</LinkIncremental>
+ <TargetName Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(ProjectName)W</TargetName>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/listeningto_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>../../include;../../include_API;sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commons.h</PrecompiledHeaderFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <BrowseInformationFile>
+ </BrowseInformationFile>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
+ <BaseAddress>0x3EC20000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\Release/listeningto_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>../../include;../../include_API;sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commons.h</PrecompiledHeaderFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <BrowseInformationFile>
+ </BrowseInformationFile>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
+ <BaseAddress>0x3EC20000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Unicode_Debug/listeningto_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;../../include_API;sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commons.h</PrecompiledHeaderFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName)W.dll</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
+ <BaseAddress>0x3EC20000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\Unicode_Debug/listeningto_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;../../include_API;sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commons.h</PrecompiledHeaderFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName)W.dll</OutputFile>
+ <UACExecutionLevel>RequireAdministrator</UACExecutionLevel>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
+ <BaseAddress>0x3EC20000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/listeningto_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;../../include_API;sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commons.h</PrecompiledHeaderFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
+ <BaseAddress>0x3EC20000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\Debug/listeningto_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;../../include_API;sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commons.h</PrecompiledHeaderFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
+ <BaseAddress>0x3EC20000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Unicode_Release/listeningto_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>../../include;../../include_API;sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commons.h</PrecompiledHeaderFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <OutputFile>$(OutDir)$(ProjectName)W.dll</OutputFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
+ <BaseAddress>0x3EC20000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\Unicode_Release/listeningto_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>Default</InlineFunctionExpansion>
+ <AdditionalIncludeDirectories>../../include;../../include_API;sdk;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>commons.h</PrecompiledHeaderFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;_UNICODE;UNICODE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Link>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <ProgramDatabaseFile>$(TargetDir)$(TargetName).pdb</ProgramDatabaseFile>
+ <MapFileName>$(TargetDir)$(TargetName).map</MapFileName>
+ <BaseAddress>0x3EC20000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="commons.h" />
+ <ClInclude Include="m_listeningto.h" />
+ <ClInclude Include="..\utils\mir_buffer.h" />
+ <ClInclude Include="..\utils\mir_icons.h" />
+ <ClInclude Include="..\utils\mir_memory.h" />
+ <ClInclude Include="..\utils\mir_options.h" />
+ <ClInclude Include="music.h" />
+ <ClInclude Include="options.h" />
+ <ClInclude Include="resource.h" />
+ <ClInclude Include="players\TEventHandler.h" />
+ <ClInclude Include="players\foobar.h" />
+ <ClInclude Include="players\generic.h" />
+ <ClInclude Include="players\itunes.h" />
+ <ClInclude Include="players\mRadio.h" />
+ <ClInclude Include="players\mswlm.h" />
+ <ClInclude Include="players\mswmp.h" />
+ <ClInclude Include="players\player.h" />
+ <ClInclude Include="players\watrack.h" />
+ <ClInclude Include="players\winamp.h" />
+ <ClInclude Include="version.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="res\listening_to.ico" />
+ <None Include="res\ttb_disabled.bmp" />
+ <None Include="res\ttb_enabled.bmp" />
+ <None Include="Docs\langpack_listeningto.txt" />
+ <None Include="Docs\listeningto_changelog.txt" />
+ <None Include="Docs\listeningto_readme.txt" />
+ <None Include="Docs\listeningto_version.txt" />
+ <None Include="Docs\readme_players.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc">
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ <ResourceCompile Include="version.rc" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="listeningto.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="..\utils\mir_icons.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ </PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="..\utils\mir_options.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ </PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ </PrecompiledHeader>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ </PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="music.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="players\foobar.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="players\generic.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="players\itunes.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="players\mRadio.cpp">
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="players\mswlm.cpp">
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="players\mswmp.cpp">
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="players\player.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="players\watrack.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ <ClCompile Include="players\winamp.cpp">
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">..\commons.h</PrecompiledHeaderFile>
+ <AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeaderFile Condition="'$(Configuration)|$(Platform)'=='Release|x64'">..\commons.h</PrecompiledHeaderFile>
+ </ClCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/listeningto_10.vcxproj.filters b/Plugins/listeningto/listeningto_10.vcxproj.filters new file mode 100644 index 0000000..3e780fe --- /dev/null +++ b/Plugins/listeningto/listeningto_10.vcxproj.filters @@ -0,0 +1,163 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{0ad7cc78-08a7-4aa0-950e-676c23b914b5}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{e6bed9de-b427-4af6-8405-c355d67cf52e}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{fe2d9a01-3e3d-44f6-8603-43ca81cb6462}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Players">
+ <UniqueIdentifier>{079d1bef-829b-41ff-9ead-366c4a694cbb}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="Docs">
+ <UniqueIdentifier>{1431f497-ed44-4a01-8d75-2cf2abc506a7}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="commons.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="m_listeningto.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\utils\mir_buffer.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\utils\mir_icons.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\utils\mir_memory.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="..\utils\mir_options.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="music.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="options.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="players\TEventHandler.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="players\foobar.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="players\generic.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="players\itunes.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="players\mRadio.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="players\mswlm.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="players\mswmp.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="players\player.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="players\watrack.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="players\winamp.h">
+ <Filter>Players</Filter>
+ </ClInclude>
+ <ClInclude Include="version.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="res\listening_to.ico">
+ <Filter>Resource Files</Filter>
+ </None>
+ <None Include="res\ttb_disabled.bmp">
+ <Filter>Resource Files</Filter>
+ </None>
+ <None Include="res\ttb_enabled.bmp">
+ <Filter>Resource Files</Filter>
+ </None>
+ <None Include="Docs\langpack_listeningto.txt">
+ <Filter>Docs</Filter>
+ </None>
+ <None Include="Docs\listeningto_changelog.txt">
+ <Filter>Docs</Filter>
+ </None>
+ <None Include="Docs\listeningto_readme.txt">
+ <Filter>Docs</Filter>
+ </None>
+ <None Include="Docs\listeningto_version.txt">
+ <Filter>Docs</Filter>
+ </None>
+ <None Include="Docs\readme_players.txt">
+ <Filter>Docs</Filter>
+ </None>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ <ResourceCompile Include="version.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="listeningto.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\utils\mir_icons.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="..\utils\mir_options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="music.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="options.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="players\foobar.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ <ClCompile Include="players\generic.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ <ClCompile Include="players\itunes.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ <ClCompile Include="players\mRadio.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ <ClCompile Include="players\mswlm.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ <ClCompile Include="players\mswmp.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ <ClCompile Include="players\player.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ <ClCompile Include="players\watrack.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ <ClCompile Include="players\winamp.cpp">
+ <Filter>Players</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/listeningto_10.vcxproj.user b/Plugins/listeningto/listeningto_10.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/Plugins/listeningto/listeningto_10.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/m_listeningto.h b/Plugins/listeningto/m_listeningto.h index e529a31..c1d8d63 100644 --- a/Plugins/listeningto/m_listeningto.h +++ b/Plugins/listeningto/m_listeningto.h @@ -1,29 +1,32 @@ /*
-Copyright (C) 2006 Ricardo Pescuma Domenecci
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
#ifndef __M_LISTENINGTO_H__
# define __M_LISTENINGTO_H__
-
+#ifndef MIID_LISTENINGTO
#define MIID_LISTENINGTO { 0x1fc1efa, 0xaa9f, 0x461b, { 0x92, 0x69, 0xaf, 0x66, 0x6b, 0x89, 0x31, 0xee } }
-
+#endif
// To be used by other plugins to send listening info to miranda
#define MIRANDA_WINDOWCLASS _T("Miranda.ListeningTo")
diff --git a/Plugins/listeningto/music.cpp b/Plugins/listeningto/music.cpp index 4d93ac2..126df33 100644 --- a/Plugins/listeningto/music.cpp +++ b/Plugins/listeningto/music.cpp @@ -1,38 +1,61 @@ /*
-Copyright (C) 2006 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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 "commons.h"
+extern int activePlayer;
Player *players[NUM_PLAYERS];
static LISTENINGTOINFO current = {0};
-
void InitMusic()
{
- players[WATRACK] = new WATrack();
- players[GENERIC] = new GenericPlayer();
- players[WMP] = new WindowsMediaPlayer();
- players[WINAMP] = new Winamp();
- players[ITUNES] = new ITunes();
- players[FOOBAR] = new Foobar();
+ players[WATRACK] = new WATrack(WATRACK);
+ players[GENERIC] = new GenericPlayer(GENERIC);
+ players[WMP] = new WindowsMediaPlayer(WMP);
+ players[WLM] = new WindowsLiveMessanger(WLM);
+ players[WINAMP] = new Winamp(WINAMP);
+ players[ITUNES] = new ITunes(ITUNES);
+ players[FOOBAR] = new Foobar(FOOBAR);
+ players[MRADIO] = new mRadio(MRADIO);
+// players[VIDEOLAN] = new VideoLAN(VIDEOLAN);
}
@@ -52,9 +75,10 @@ void EnableDisablePlayers() players[i]->EnableDisable();
}
-
void FreeListeningInfo(LISTENINGTOINFO *lti)
{
+ if(!lti)
+ lti = ¤t;
lti->cbSize = 0;
lti->dwFlags = 0;
MIR_FREE(lti->ptszArtist);
@@ -106,27 +130,40 @@ int ChangedListeningInfo() {
// m_log(_T("ChangedListeningInfo"), _T("Start"));
+ int first, last;
BOOL changed = FALSE;
BOOL playing = FALSE;
- int first = (players[WATRACK]->enabled ? WATRACK : GENERIC);
- int last = (players[WATRACK]->enabled ? WATRACK + 1 : NUM_PLAYERS);
+ if(activePlayer > -1 && players[activePlayer]->GetStatus() > PL_OFFLINE) {
+ first = activePlayer;
+ last = activePlayer +1;
+ }
+ else {
+ activePlayer = -1;
+ first = (players[WATRACK]->m_enabled ? WATRACK : GENERIC);
+ last = (players[WATRACK]->m_enabled ? WATRACK + 1 : NUM_PLAYERS);
+ }
+
for (int i = first; i < last; i++)
{
- if (!players[i]->enabled)
+ if (!players[i]->m_enabled)
+ continue;
+
+ if (activePlayer == -1 && !players[i]->GetStatus()) //player is offline
continue;
LISTENINGTOINFO lti = {0};
if (!players[i]->GetListeningInfo(<i))
continue;
- if (!IsTypeEnabled(<i))
+ if (!IsTypeEnabled(<i)) //Music, Radio, Video ?
{
FreeListeningInfo(<i);
continue;
}
playing = TRUE;
+ activePlayer = i;
// m_log(_T("ChangedListeningInfo"), _T("Has : %s : %d"), players[i]->name, lti.cbSize);
@@ -147,7 +184,7 @@ int ChangedListeningInfo() }
break;
- }
+ } //end for
if (!playing && current.cbSize != 0)
{
diff --git a/Plugins/listeningto/music.h b/Plugins/listeningto/music.h index 76efd41..b148a09 100644 --- a/Plugins/listeningto/music.h +++ b/Plugins/listeningto/music.h @@ -1,68 +1,72 @@ /*
-Copyright (C) 2006 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
#ifndef __MUSIC_H__
# define __MUSIC_H__
-
-#include "commons.h"
-
-
-// Players
-#include "players\\player.h"
-#include "players\\watrack.h"
-#include "players\\generic.h"
-#include "players\\winamp.h"
-#include "players\\foobar.h"
-#include "players\\itunes.h"
-#include "players\\wmp.h"
-
-
// First non polling ones
-#define WATRACK 0
-#define GENERIC 1
+#define WATRACK 0
+#define GENERIC 1
-#define FIRST_PLAYER 2
-#define WMP 2
-#define WINAMP 3
-#define ITUNES 4
-#define FOOBAR 5
-#define NUM_PLAYERS 6
+#define FIRST_PLAYER 2
-extern Player *players[NUM_PLAYERS];
+#define WLM 2
+#define WMP 3
+#define WINAMP 4
+#define ITUNES 5
+#define FOOBAR 6
+#define MRADIO 7
+//#define VIDEOLAN 8
+#define NUM_PLAYERS 8
void InitMusic();
void FreeMusic();
void EnableDisablePlayers();
-
int ChangedListeningInfo();
LISTENINGTOINFO * GetListeningInfo();
-
// Helper functions to players
void FreeListeningInfo(LISTENINGTOINFO *lti);
void CopyListeningInfo(LISTENINGTOINFO *dest, const LISTENINGTOINFO * const src);
-
-
#endif // __MUSIC_H__
diff --git a/Plugins/listeningto/options.cpp b/Plugins/listeningto/options.cpp index fa10efb..b52d903 100644 --- a/Plugins/listeningto/options.cpp +++ b/Plugins/listeningto/options.cpp @@ -1,20 +1,40 @@ /*
-Copyright (C) 2006 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
@@ -35,9 +55,9 @@ BOOL ListeningToEnabled(char *proto, BOOL ignoreGlobal = FALSE); -static BOOL CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
-static BOOL CALLBACK PlayersDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
-static BOOL CALLBACK FormatDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+static INT_PTR CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+static INT_PTR CALLBACK PlayersDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
+static INT_PTR CALLBACK FormatDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam);
static OptPageControl optionsControls[] = {
@@ -61,20 +81,25 @@ static UINT optionsExpertControls[] = { };
static OptPageControl formatControls[] = {
- { &opts.templ, CONTROL_TEXT, IDC_TEMPLATE, "Template", (DWORD) _T("%title% - %artist%") },
- { &opts.unknown, CONTROL_TEXT, IDC_UNKNOWN, "Unknown", (DWORD) _T("<Unknown>"), 0, 0, 128 },
- { &opts.xstatus_name, CONTROL_TEXT, IDC_XSTATUS_NAME, "XStatusName", (DWORD) _T("Listening to") },
- { &opts.xstatus_message, CONTROL_TEXT, IDC_XSTATUS_MESSAGE, "XStatusMessage", (DWORD) _T("%listening%") },
- { &opts.nothing, CONTROL_TEXT, IDC_NOTHING, "Nothing", (DWORD) _T("<Nothing>"), 0, 0, 128 }
+ { &opts.templ, CONTROL_TEXT, IDC_TEMPLATE, "Template", (ULONG_PTR) _T("%title% - %artist%") },
+ { &opts.unknown, CONTROL_TEXT, IDC_UNKNOWN, "Unknown", (ULONG_PTR) _T("<Unknown>"), 0, 0, 128 },
+ { &opts.xstatus_name, CONTROL_TEXT, IDC_XSTATUS_NAME, "XStatusName", (ULONG_PTR) _T("Listening to") },
+ { &opts.xstatus_message, CONTROL_TEXT, IDC_XSTATUS_MESSAGE, "XStatusMessage", (ULONG_PTR) _T("%listening%") },
+ { &opts.nothing, CONTROL_TEXT, IDC_NOTHING, "Nothing", (ULONG_PTR) _T("<Nothing>"), 0, 0, 128 }
};
-static OptPageControl playersControls[] = {
+static OptPageControl playersControls[] = {
+ //first base class player
{ NULL, CONTROL_CHECKBOX, IDC_WATRACK, "GetInfoFromWATrack", FALSE },
- { &opts.time_to_pool, CONTROL_SPIN, IDC_POLL_TIMER, "TimeToPool", (WORD) 5, IDC_POLL_TIMER_SPIN, (WORD) 1, (WORD) 255 },
{ NULL, CONTROL_CHECKBOX, IDC_WINAMP, "EnableWinamp", TRUE },
- { NULL, CONTROL_CHECKBOX, IDC_ITUNES, "EnableITunes", TRUE },
{ NULL, CONTROL_CHECKBOX, IDC_WMP, "EnableWMP", TRUE },
+ { NULL, CONTROL_CHECKBOX, IDC_WLM, "EnableWLM", TRUE },
+ { NULL, CONTROL_CHECKBOX, IDC_ITUNES, "EnableITunes", TRUE },
{ NULL, CONTROL_CHECKBOX, IDC_FOOBAR, "EnableFoobar", TRUE },
+ { NULL/*&opts.enable_radio*/, CONTROL_CHECKBOX, IDC_MRADIO, "EnableMRadio", TRUE },
+// { NULL, CONTROL_CHECKBOX, IDC_VIDEOLAN, "EnableVideoLAN", TRUE },
+ //other
+ { &opts.time_to_pool, CONTROL_SPIN, IDC_POLL_TIMER, "TimeToPool", (WORD) 5, IDC_POLL_TIMER_SPIN, (WORD) 1, (WORD) 255 },
{ &opts.enable_other_players, CONTROL_CHECKBOX, IDC_OTHER, "EnableOtherPlayers", TRUE },
{ &opts.enable_code_injection, CONTROL_CHECKBOX, IDC_CODE_INJECTION, "EnableCodeInjection", TRUE }
};
@@ -92,10 +117,10 @@ int InitOptionsCallback(WPARAM wParam,LPARAM lParam) odp.cbSize=sizeof(odp);
odp.position=0;
odp.hInstance=hInst;
- odp.ptszGroup = TranslateT("Status");
- odp.ptszTitle = TranslateT("Listening info");
+ odp.ptszGroup = LPGENT("Status");
+ odp.ptszTitle = LPGENT("Listening info");
- odp.ptszTab = TranslateT("General");
+ odp.ptszTab = LPGENT("General");
odp.pfnDlgProc = OptionsDlgProc;
odp.pszTemplate = MAKEINTRESOURCEA(IDD_OPTIONS);
odp.flags = ODPF_BOLDGROUPS | ODPF_TCHAR;
@@ -104,13 +129,13 @@ int InitOptionsCallback(WPARAM wParam,LPARAM lParam) odp.nIDBottomSimpleControl = IDC_LISTENING_G;
CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp);
- odp.ptszTab = TranslateT("Format");
+ odp.ptszTab = LPGENT("Format");
odp.pfnDlgProc = FormatDlgProc;
odp.pszTemplate = MAKEINTRESOURCEA(IDD_FORMAT);
odp.flags = ODPF_BOLDGROUPS | ODPF_TCHAR | ODPF_EXPERTONLY;
CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp);
- odp.ptszTab = TranslateT("Players");
+ odp.ptszTab = LPGENT("Players");
odp.pfnDlgProc = PlayersDlgProc;
odp.pszTemplate = MAKEINTRESOURCEA(IDD_PLAYERS);
odp.flags = ODPF_BOLDGROUPS | ODPF_TCHAR | ODPF_EXPERTONLY;
@@ -122,11 +147,14 @@ int InitOptionsCallback(WPARAM wParam,LPARAM lParam) void InitOptions()
{
- playersControls[0].var = &players[WATRACK]->enabled;
- playersControls[2].var = &players[WINAMP]->enabled;
- playersControls[3].var = &players[ITUNES]->enabled;
- playersControls[4].var = &players[WMP]->enabled;
- playersControls[5].var = &players[FOOBAR]->enabled;
+ playersControls[0].var = &players[WATRACK]->m_enabled;
+ playersControls[1].var = &players[WINAMP]->m_enabled;
+ playersControls[2].var = &players[WMP]->m_enabled;
+ playersControls[3].var = &players[WLM]->m_enabled;
+ playersControls[4].var = &players[ITUNES]->m_enabled;
+ playersControls[5].var = &players[FOOBAR]->m_enabled;
+ playersControls[6].var = &players[MRADIO]->m_enabled;
+// playersControls[7].var = &players[VIDEOLAN]->m_enabled;
LoadOptions();
@@ -201,9 +229,9 @@ static void OptionsEnableDisableCtrls(HWND hwndDlg) }
-static BOOL CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+static INT_PTR CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
- BOOL ret;
+ INT_PTR ret;
if (msg != WM_INITDIALOG)
ret = SaveOptsDlgProc(optionsControls, MAX_REGS(optionsControls), MODULE_NAME, hwndDlg, msg, wParam, lParam);
@@ -218,23 +246,52 @@ static BOOL CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA }
else
{
- // Init combo
- int total = 0, first = 0;
- if (ServiceExists(MS_CLUI_GETCAPS))
- {
- total = CallService(MS_CLUI_GETCAPS, 0, CLUIF2_EXTRACOLUMNCOUNT);
- first = CallService(MS_CLUI_GETCAPS, 0, CLUIF2_USEREXTRASTART);
- }
-
- SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) _T("1"));
- SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) _T("2"));
-
- if (total > 0)
- {
- TCHAR tmp[10];
- for (int i = first; i <= total; i++)
- SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) _itot(i - first + 3, tmp, 10));
- }
+ if (ServiceExists("CList/HideContactAvatar")!=0) /* check if Clist modern*/
+ {
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("<none>"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("E-Mail"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Protocol"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Phone/SMS"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #1"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #2"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Web page"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Client (fingerprint.dll is required)"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Visibility/Chat activity"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #3"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #4"));
+ }
+ else if (ServiceExists("CListFrame/SetSkinnedFrame")!=0) /*check if Clist Nicer*/
+ {
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Reserved, unused"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("E-Mail"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Reserved #1"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Telephone"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #1 (ICQ X-Status)"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #2"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Homepage"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Client (fingerprint required)"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Reserved #2"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #3"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #4"));
+ }
+ else if (ServiceExists("CLUI/GetConnectingIconForProtocol")!=0) /*check if Clist MW*/
+ {
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("<none>"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("E-Mail"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Protocol Type"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Cellular"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #1"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #2"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Homepage"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Client (fingerprint required)"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("<none>"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #3"));
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("Advanced #4"));
+ }
+ else
+ {
+ SendDlgItemMessage(hwndDlg, IDC_ADV_ICON, CB_ADDSTRING, 0, (LPARAM) TranslateT("<none>"));
+ }
}
ret = SaveOptsDlgProc(optionsControls, MAX_REGS(optionsControls), MODULE_NAME, hwndDlg, msg, wParam, lParam);
@@ -263,7 +320,8 @@ static BOOL CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA if (lpnmhdr->idFrom == 0 && lpnmhdr->code == PSN_APPLY)
{
RebuildMenu();
- StartTimer();
+ if(!hTimer) //check always if timer exist !!
+ StartTimer();
}
break;
@@ -277,6 +335,7 @@ static BOOL CALLBACK OptionsDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA int playerDlgs[] = {
WINAMP, IDC_WINAMP,
WMP, IDC_WMP,
+ WLM, IDC_WLM,
ITUNES, IDC_ITUNES,
FOOBAR, IDC_FOOBAR
};
@@ -285,6 +344,8 @@ int playerDlgs[] = { static void PlayersEnableDisableCtrls(HWND hwndDlg)
{
BOOL watrack_found = ServiceExists(MS_WAT_GETMUSICINFO);
+ BOOL mradio_found = ServiceExists(MS_RADIO_EXPORT); //mRadio 0.0.1.4
+
EnableWindow(GetDlgItem(hwndDlg, IDC_WATRACK), watrack_found);
BOOL enabled = !IsDlgButtonChecked(hwndDlg, IDC_WATRACK) || !watrack_found;
@@ -294,10 +355,10 @@ static void PlayersEnableDisableCtrls(HWND hwndDlg) for (int i = 0; i < MAX_REGS(playerDlgs); i += 2)
{
EnableWindow(GetDlgItem(hwndDlg, playerDlgs[i+1]), enabled);
- if (players[playerDlgs[i]]->needPoll && IsDlgButtonChecked(hwndDlg, playerDlgs[i+1]))
+ if (players[playerDlgs[i]]->m_needPoll && IsDlgButtonChecked(hwndDlg, playerDlgs[i+1]))
needPoll = TRUE;
}
-
+ EnableWindow(GetDlgItem(hwndDlg, IDC_MRADIO), enabled && mradio_found /*&& opts.enable_radio*/);
EnableWindow(GetDlgItem(hwndDlg, IDC_OTHER), enabled);
EnableWindow(GetDlgItem(hwndDlg, IDC_POLL_TIMER_L), enabled && needPoll);
@@ -307,9 +368,9 @@ static void PlayersEnableDisableCtrls(HWND hwndDlg) EnableWindow(GetDlgItem(hwndDlg, IDC_CODE_INJECTION), enabled);
}
-static BOOL CALLBACK PlayersDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+static INT_PTR CALLBACK PlayersDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
- BOOL ret = SaveOptsDlgProc(playersControls, MAX_REGS(playersControls), MODULE_NAME, hwndDlg, msg, wParam, lParam);
+ INT_PTR ret = SaveOptsDlgProc(playersControls, MAX_REGS(playersControls), MODULE_NAME, hwndDlg, msg, wParam, lParam);
switch (msg)
{
@@ -332,7 +393,8 @@ static BOOL CALLBACK PlayersDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA if (lpnmhdr->idFrom == 0 && lpnmhdr->code == PSN_APPLY)
{
EnableDisablePlayers();
- StartTimer();
+ if(!hTimer) //check always if timer exist !!
+ StartTimer();
}
break;
@@ -342,7 +404,7 @@ static BOOL CALLBACK PlayersDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARA return ret;
}
-static BOOL CALLBACK FormatDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
+static INT_PTR CALLBACK FormatDlgProc(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
return SaveOptsDlgProc(formatControls, MAX_REGS(formatControls), MODULE_NAME, hwndDlg, msg, wParam, lParam);
}
diff --git a/Plugins/listeningto/options.h b/Plugins/listeningto/options.h index b0848e8..9c28ff6 100644 --- a/Plugins/listeningto/options.h +++ b/Plugins/listeningto/options.h @@ -1,20 +1,40 @@ /*
-Copyright (C) 2006 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
@@ -55,7 +75,7 @@ struct Options { BOOL show_adv_icon;
int adv_icon_slot;
- BOOL get_info_from_watrack;
+// BOOL get_info_from_watrack; //not used
BOOL enable_other_players;
BOOL enable_code_injection;
int time_to_pool;
diff --git a/Plugins/listeningto/players/TEventHandler.h b/Plugins/listeningto/players/TEventHandler.h new file mode 100644 index 0000000..f83acfe --- /dev/null +++ b/Plugins/listeningto/players/TEventHandler.h @@ -0,0 +1,236 @@ +/*
+Generic event handler template class for non-ATL clients.
+
+Article: Understanding COM Event Handling
+ http://www.codeproject.com/KB/COM/TEventHandler.aspx
+Autor: Lim Bio Liong
+ http://www.codeproject.com/Members/Lim-Bio-Liong
+
+==========================================================================
+ListeningTo plugin for Miranda IM
+
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+
+*/
+
+#ifndef TEVENT_HANDLER_H
+#define TEVENT_HANDLER_H
+
+#include <windows.h>
+
+namespace TEventHandlerNamespace
+{
+// Generic event handler template class (especially useful (but not limited to) for non-ATL clients).
+template <class event_handler_class, typename device_interface, typename device_event_interface>
+class TEventHandler : IDispatch
+{
+ friend class class_event_handler;
+
+ typedef HRESULT (event_handler_class::*parent_on_invoke)
+ (
+// TEventHandler<event_handler_class, device_interface, device_event_interface>* pthis,
+ void* pthis,
+ DISPID dispidMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS* pdispparams,
+ VARIANT* pvarResult,
+ EXCEPINFO* pexcepinfo,
+ UINT* puArgErr
+ );
+
+public :
+ TEventHandler
+ (
+ event_handler_class& parent,
+ device_interface* pdevice_interface, // Non-ref counted.
+ parent_on_invoke parent_on_invoke_function
+ ) :
+ m_cRef(1),
+ m_parent(parent),
+ m_parent_on_invoke(parent_on_invoke_function),
+ m_pIConnectionPoint(0),
+ m_dwEventCookie(0),
+ m_vbServerState(VARIANT_TRUE)
+
+ {
+ SetupConnectionPoint(pdevice_interface);
+ }
+
+ ~TEventHandler()
+ {
+ // Call ShutdownConnectionPoint() here JUST IN CASE connection points are still
+ // alive at this time. They should have been disconnected earlier.
+ ShutdownConnectionPoint();
+ }
+
+ STDMETHOD_(ULONG, AddRef)()
+ {
+ InterlockedIncrement(&m_cRef);
+ return m_cRef;
+ }
+
+ STDMETHOD_(ULONG, Release)()
+ {
+ if(m_cRef)
+ InterlockedDecrement(&m_cRef);
+ if(m_cRef == 1) {
+ DISPPARAMS dispparams;
+ ZeroMemory(&dispparams, sizeof dispparams);
+ m_vbServerState = VARIANT_FALSE;
+ (m_parent.*m_parent_on_invoke)(this, (DISPID)0x9999, IID_NULL, 0, 0, &dispparams, NULL, NULL, NULL);
+ }
+ else if(m_cRef == 0) {
+ delete this;
+ return 0;
+ }
+
+ return m_cRef;
+ }
+
+ STDMETHOD(QueryInterface)(REFIID riid, void ** ppvObject)
+ {
+ if (riid == IID_IUnknown)
+ {
+ *ppvObject = (IUnknown*)this;
+ AddRef();
+ return S_OK;
+ }
+
+ if ((riid == IID_IDispatch) || (riid == __uuidof(device_event_interface)))
+ {
+ *ppvObject = (IDispatch*)this;
+ AddRef();
+ return S_OK;
+ }
+
+ return E_NOINTERFACE;
+ }
+
+ STDMETHOD(GetTypeInfoCount)(UINT* pctinfo)
+ {
+ return E_NOTIMPL;
+ }
+
+ STDMETHOD(GetTypeInfo)(UINT itinfo, LCID lcid, ITypeInfo** pptinfo)
+ {
+ return E_NOTIMPL;
+ }
+
+ STDMETHOD(GetIDsOfNames)(REFIID riid, LPOLESTR* rgszNames, UINT cNames,
+ LCID lcid, DISPID* rgdispid)
+ {
+ return E_NOTIMPL;
+ }
+
+ STDMETHOD(Invoke)(DISPID dispidMember, REFIID riid,
+ LCID lcid, WORD wFlags, DISPPARAMS* pdispparams, VARIANT* pvarResult,
+ EXCEPINFO* pexcepinfo, UINT* puArgErr)
+ {
+ return (m_parent.*m_parent_on_invoke)(this, dispidMember, riid, lcid, wFlags, pdispparams, pvarResult, pexcepinfo, puArgErr);
+ }
+
+
+protected :
+ LONG m_cRef;
+
+ // Pertaining to the owner of this object.
+ event_handler_class& m_parent; // Non-reference counted. This is to prevent circular references.
+
+ // Pertaining to connection points.
+ IConnectionPoint* m_pIConnectionPoint; // Ref counted of course.
+ DWORD m_dwEventCookie;
+ parent_on_invoke m_parent_on_invoke;
+
+ void SetupConnectionPoint(device_interface* pdevice_interface)
+ {
+ IConnectionPointContainer* pIConnectionPointContainerTemp = NULL;
+ IUnknown* pIUnknown = NULL;
+
+ // QI this object itself for its IUnknown pointer which will be used
+ // later to connect to the Connection Point of the device_interface object.
+ this -> QueryInterface(IID_IUnknown, (void**)&pIUnknown);
+
+ if (pIUnknown)
+ {
+ // QI the pdevice_interface for its connection point.
+ pdevice_interface -> QueryInterface (IID_IConnectionPointContainer, (void**)&pIConnectionPointContainerTemp);
+
+ if (pIConnectionPointContainerTemp)
+ {
+ pIConnectionPointContainerTemp -> FindConnectionPoint(__uuidof(device_event_interface), &m_pIConnectionPoint);
+ pIConnectionPointContainerTemp -> Release();
+ pIConnectionPointContainerTemp = NULL;
+ }
+
+ if (m_pIConnectionPoint)
+ {
+ m_pIConnectionPoint -> Advise(pIUnknown, &m_dwEventCookie);
+ }
+
+ pIUnknown -> Release();
+ pIUnknown = NULL;
+ }
+ }
+
+public :
+ VARIANT_BOOL m_vbServerState;
+
+ void ShutdownConnectionPoint()
+ {
+ if (m_pIConnectionPoint && m_cRef>1) {
+ HRESULT hr = NULL;
+ //client shutdown ConnectionPoint
+ if( m_vbServerState == VARIANT_TRUE &&
+ SUCCEEDED(m_pIConnectionPoint -> Unadvise(m_dwEventCookie)) )
+ {
+ m_dwEventCookie = 0;
+ if(!m_pIConnectionPoint->Release())
+ m_pIConnectionPoint = NULL;
+ }
+ //else server destroy ConnectionPoint (all obj invalid)
+ //m_pIConnectionPoint is only a pointer and c++ destructor destroy it
+ //if we try to Unadvise or Release it at this stage we alwas get exeption
+ return;
+ }
+ }
+};
+
+};
+
+#endif
+
diff --git a/Plugins/listeningto/players/WMP/wmp.h b/Plugins/listeningto/players/WMP/wmp.h new file mode 100644 index 0000000..ec61e41 --- /dev/null +++ b/Plugins/listeningto/players/WMP/wmp.h @@ -0,0 +1,13000 @@ +
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 6.00.0363 */
+/* Compiler settings for wmp.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run)
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING( )
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __wmp_h__
+#define __wmp_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IWMPErrorItem_FWD_DEFINED__
+#define __IWMPErrorItem_FWD_DEFINED__
+typedef interface IWMPErrorItem IWMPErrorItem;
+#endif /* __IWMPErrorItem_FWD_DEFINED__ */
+
+
+#ifndef __IWMPError_FWD_DEFINED__
+#define __IWMPError_FWD_DEFINED__
+typedef interface IWMPError IWMPError;
+#endif /* __IWMPError_FWD_DEFINED__ */
+
+
+#ifndef __IWMPMedia_FWD_DEFINED__
+#define __IWMPMedia_FWD_DEFINED__
+typedef interface IWMPMedia IWMPMedia;
+#endif /* __IWMPMedia_FWD_DEFINED__ */
+
+
+#ifndef __IWMPControls_FWD_DEFINED__
+#define __IWMPControls_FWD_DEFINED__
+typedef interface IWMPControls IWMPControls;
+#endif /* __IWMPControls_FWD_DEFINED__ */
+
+
+#ifndef __IWMPSettings_FWD_DEFINED__
+#define __IWMPSettings_FWD_DEFINED__
+typedef interface IWMPSettings IWMPSettings;
+#endif /* __IWMPSettings_FWD_DEFINED__ */
+
+
+#ifndef __IWMPClosedCaption_FWD_DEFINED__
+#define __IWMPClosedCaption_FWD_DEFINED__
+typedef interface IWMPClosedCaption IWMPClosedCaption;
+#endif /* __IWMPClosedCaption_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlaylist_FWD_DEFINED__
+#define __IWMPPlaylist_FWD_DEFINED__
+typedef interface IWMPPlaylist IWMPPlaylist;
+#endif /* __IWMPPlaylist_FWD_DEFINED__ */
+
+
+#ifndef __IWMPCdrom_FWD_DEFINED__
+#define __IWMPCdrom_FWD_DEFINED__
+typedef interface IWMPCdrom IWMPCdrom;
+#endif /* __IWMPCdrom_FWD_DEFINED__ */
+
+
+#ifndef __IWMPCdromCollection_FWD_DEFINED__
+#define __IWMPCdromCollection_FWD_DEFINED__
+typedef interface IWMPCdromCollection IWMPCdromCollection;
+#endif /* __IWMPCdromCollection_FWD_DEFINED__ */
+
+
+#ifndef __IWMPStringCollection_FWD_DEFINED__
+#define __IWMPStringCollection_FWD_DEFINED__
+typedef interface IWMPStringCollection IWMPStringCollection;
+#endif /* __IWMPStringCollection_FWD_DEFINED__ */
+
+
+#ifndef __IWMPMediaCollection_FWD_DEFINED__
+#define __IWMPMediaCollection_FWD_DEFINED__
+typedef interface IWMPMediaCollection IWMPMediaCollection;
+#endif /* __IWMPMediaCollection_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlaylistArray_FWD_DEFINED__
+#define __IWMPPlaylistArray_FWD_DEFINED__
+typedef interface IWMPPlaylistArray IWMPPlaylistArray;
+#endif /* __IWMPPlaylistArray_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlaylistCollection_FWD_DEFINED__
+#define __IWMPPlaylistCollection_FWD_DEFINED__
+typedef interface IWMPPlaylistCollection IWMPPlaylistCollection;
+#endif /* __IWMPPlaylistCollection_FWD_DEFINED__ */
+
+
+#ifndef __IWMPNetwork_FWD_DEFINED__
+#define __IWMPNetwork_FWD_DEFINED__
+typedef interface IWMPNetwork IWMPNetwork;
+#endif /* __IWMPNetwork_FWD_DEFINED__ */
+
+
+#ifndef __IWMPCore_FWD_DEFINED__
+#define __IWMPCore_FWD_DEFINED__
+typedef interface IWMPCore IWMPCore;
+#endif /* __IWMPCore_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlayer_FWD_DEFINED__
+#define __IWMPPlayer_FWD_DEFINED__
+typedef interface IWMPPlayer IWMPPlayer;
+#endif /* __IWMPPlayer_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlayer2_FWD_DEFINED__
+#define __IWMPPlayer2_FWD_DEFINED__
+typedef interface IWMPPlayer2 IWMPPlayer2;
+#endif /* __IWMPPlayer2_FWD_DEFINED__ */
+
+
+#ifndef __IWMPMedia2_FWD_DEFINED__
+#define __IWMPMedia2_FWD_DEFINED__
+typedef interface IWMPMedia2 IWMPMedia2;
+#endif /* __IWMPMedia2_FWD_DEFINED__ */
+
+
+#ifndef __IWMPControls2_FWD_DEFINED__
+#define __IWMPControls2_FWD_DEFINED__
+typedef interface IWMPControls2 IWMPControls2;
+#endif /* __IWMPControls2_FWD_DEFINED__ */
+
+
+#ifndef __IWMPDVD_FWD_DEFINED__
+#define __IWMPDVD_FWD_DEFINED__
+typedef interface IWMPDVD IWMPDVD;
+#endif /* __IWMPDVD_FWD_DEFINED__ */
+
+
+#ifndef __IWMPCore2_FWD_DEFINED__
+#define __IWMPCore2_FWD_DEFINED__
+typedef interface IWMPCore2 IWMPCore2;
+#endif /* __IWMPCore2_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlayer3_FWD_DEFINED__
+#define __IWMPPlayer3_FWD_DEFINED__
+typedef interface IWMPPlayer3 IWMPPlayer3;
+#endif /* __IWMPPlayer3_FWD_DEFINED__ */
+
+
+#ifndef __IWMPErrorItem2_FWD_DEFINED__
+#define __IWMPErrorItem2_FWD_DEFINED__
+typedef interface IWMPErrorItem2 IWMPErrorItem2;
+#endif /* __IWMPErrorItem2_FWD_DEFINED__ */
+
+
+#ifndef __IWMPRemoteMediaServices_FWD_DEFINED__
+#define __IWMPRemoteMediaServices_FWD_DEFINED__
+typedef interface IWMPRemoteMediaServices IWMPRemoteMediaServices;
+#endif /* __IWMPRemoteMediaServices_FWD_DEFINED__ */
+
+
+#ifndef __IWMPSkinManager_FWD_DEFINED__
+#define __IWMPSkinManager_FWD_DEFINED__
+typedef interface IWMPSkinManager IWMPSkinManager;
+#endif /* __IWMPSkinManager_FWD_DEFINED__ */
+
+
+#ifndef __IWMPMetadataPicture_FWD_DEFINED__
+#define __IWMPMetadataPicture_FWD_DEFINED__
+typedef interface IWMPMetadataPicture IWMPMetadataPicture;
+#endif /* __IWMPMetadataPicture_FWD_DEFINED__ */
+
+
+#ifndef __IWMPMetadataText_FWD_DEFINED__
+#define __IWMPMetadataText_FWD_DEFINED__
+typedef interface IWMPMetadataText IWMPMetadataText;
+#endif /* __IWMPMetadataText_FWD_DEFINED__ */
+
+
+#ifndef __IWMPMedia3_FWD_DEFINED__
+#define __IWMPMedia3_FWD_DEFINED__
+typedef interface IWMPMedia3 IWMPMedia3;
+#endif /* __IWMPMedia3_FWD_DEFINED__ */
+
+
+#ifndef __IWMPSettings2_FWD_DEFINED__
+#define __IWMPSettings2_FWD_DEFINED__
+typedef interface IWMPSettings2 IWMPSettings2;
+#endif /* __IWMPSettings2_FWD_DEFINED__ */
+
+
+#ifndef __IWMPControls3_FWD_DEFINED__
+#define __IWMPControls3_FWD_DEFINED__
+typedef interface IWMPControls3 IWMPControls3;
+#endif /* __IWMPControls3_FWD_DEFINED__ */
+
+
+#ifndef __IWMPClosedCaption2_FWD_DEFINED__
+#define __IWMPClosedCaption2_FWD_DEFINED__
+typedef interface IWMPClosedCaption2 IWMPClosedCaption2;
+#endif /* __IWMPClosedCaption2_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlayerApplication_FWD_DEFINED__
+#define __IWMPPlayerApplication_FWD_DEFINED__
+typedef interface IWMPPlayerApplication IWMPPlayerApplication;
+#endif /* __IWMPPlayerApplication_FWD_DEFINED__ */
+
+
+#ifndef __IWMPCore3_FWD_DEFINED__
+#define __IWMPCore3_FWD_DEFINED__
+typedef interface IWMPCore3 IWMPCore3;
+#endif /* __IWMPCore3_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlayer4_FWD_DEFINED__
+#define __IWMPPlayer4_FWD_DEFINED__
+typedef interface IWMPPlayer4 IWMPPlayer4;
+#endif /* __IWMPPlayer4_FWD_DEFINED__ */
+
+
+#ifndef __IWMPPlayerServices_FWD_DEFINED__
+#define __IWMPPlayerServices_FWD_DEFINED__
+typedef interface IWMPPlayerServices IWMPPlayerServices;
+#endif /* __IWMPPlayerServices_FWD_DEFINED__ */
+
+
+#ifndef __IWMPEvents_FWD_DEFINED__
+#define __IWMPEvents_FWD_DEFINED__
+typedef interface IWMPEvents IWMPEvents;
+#endif /* __IWMPEvents_FWD_DEFINED__ */
+
+
+#ifndef ___WMPOCXEvents_FWD_DEFINED__
+#define ___WMPOCXEvents_FWD_DEFINED__
+typedef interface _WMPOCXEvents _WMPOCXEvents;
+#endif /* ___WMPOCXEvents_FWD_DEFINED__ */
+
+
+#ifndef __WindowsMediaPlayer_FWD_DEFINED__
+#define __WindowsMediaPlayer_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class WindowsMediaPlayer WindowsMediaPlayer;
+#else
+typedef struct WindowsMediaPlayer WindowsMediaPlayer;
+#endif /* __cplusplus */
+
+#endif /* __WindowsMediaPlayer_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+void * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void * );
+
+/* interface __MIDL_itf_wmp_0000 */
+/* [local] */
+
+//=========================================================================
+//
+// Microsoft Windows Media Technologies
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+//=========================================================================
+typedef /* [public][helpstring] */
+enum WMPOpenState
+ { wmposUndefined = 0,
+ wmposPlaylistChanging = wmposUndefined + 1,
+ wmposPlaylistLocating = wmposPlaylistChanging + 1,
+ wmposPlaylistConnecting = wmposPlaylistLocating + 1,
+ wmposPlaylistLoading = wmposPlaylistConnecting + 1,
+ wmposPlaylistOpening = wmposPlaylistLoading + 1,
+ wmposPlaylistOpenNoMedia = wmposPlaylistOpening + 1,
+ wmposPlaylistChanged = wmposPlaylistOpenNoMedia + 1,
+ wmposMediaChanging = wmposPlaylistChanged + 1,
+ wmposMediaLocating = wmposMediaChanging + 1,
+ wmposMediaConnecting = wmposMediaLocating + 1,
+ wmposMediaLoading = wmposMediaConnecting + 1,
+ wmposMediaOpening = wmposMediaLoading + 1,
+ wmposMediaOpen = wmposMediaOpening + 1,
+ wmposBeginCodecAcquisition = wmposMediaOpen + 1,
+ wmposEndCodecAcquisition = wmposBeginCodecAcquisition + 1,
+ wmposBeginLicenseAcquisition = wmposEndCodecAcquisition + 1,
+ wmposEndLicenseAcquisition = wmposBeginLicenseAcquisition + 1,
+ wmposBeginIndividualization = wmposEndLicenseAcquisition + 1,
+ wmposEndIndividualization = wmposBeginIndividualization + 1,
+ wmposMediaWaiting = wmposEndIndividualization + 1,
+ wmposOpeningUnknownURL = wmposMediaWaiting + 1
+ } WMPOpenState;
+
+typedef /* [public][helpstring] */
+enum WMPPlayState
+ { wmppsUndefined = 0,
+ wmppsStopped = wmppsUndefined + 1,
+ wmppsPaused = wmppsStopped + 1,
+ wmppsPlaying = wmppsPaused + 1,
+ wmppsScanForward = wmppsPlaying + 1,
+ wmppsScanReverse = wmppsScanForward + 1,
+ wmppsBuffering = wmppsScanReverse + 1,
+ wmppsWaiting = wmppsBuffering + 1,
+ wmppsMediaEnded = wmppsWaiting + 1,
+ wmppsTransitioning = wmppsMediaEnded + 1,
+ wmppsReady = wmppsTransitioning + 1,
+ wmppsReconnecting = wmppsReady + 1,
+ wmppsLast = wmppsReconnecting + 1
+ } WMPPlayState;
+
+typedef /* [public][helpstring] */
+enum WMPPlaylistChangeEventType
+ { wmplcUnknown = 0,
+ wmplcClear = wmplcUnknown + 1,
+ wmplcInfoChange = wmplcClear + 1,
+ wmplcMove = wmplcInfoChange + 1,
+ wmplcDelete = wmplcMove + 1,
+ wmplcInsert = wmplcDelete + 1,
+ wmplcAppend = wmplcInsert + 1,
+ wmplcPrivate = wmplcAppend + 1,
+ wmplcNameChange = wmplcPrivate + 1,
+ wmplcMorph = wmplcNameChange + 1,
+ wmplcSort = wmplcMorph + 1,
+ wmplcLast = wmplcSort + 1
+ } WMPPlaylistChangeEventType;
+
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_wmp_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_wmp_0000_v0_0_s_ifspec;
+
+#ifndef __IWMPErrorItem_INTERFACE_DEFINED__
+#define __IWMPErrorItem_INTERFACE_DEFINED__
+
+/* interface IWMPErrorItem */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPErrorItem;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("3614C646-3B3B-4de7-A81E-930E3F2127B3")
+ IWMPErrorItem : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_errorCode(
+ /* [retval][out] */ long *phr) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_errorDescription(
+ /* [retval][out] */ BSTR *pbstrDescription) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_errorContext(
+ /* [retval][out] */ VARIANT *pvarContext) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_remedy(
+ /* [retval][out] */ long *plRemedy) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_customUrl(
+ /* [retval][out] */ BSTR *pbstrCustomUrl) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPErrorItemVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPErrorItem * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPErrorItem * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPErrorItem * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPErrorItem * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPErrorItem * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPErrorItem * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPErrorItem * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_errorCode )(
+ IWMPErrorItem * This,
+ /* [retval][out] */ long *phr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_errorDescription )(
+ IWMPErrorItem * This,
+ /* [retval][out] */ BSTR *pbstrDescription);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_errorContext )(
+ IWMPErrorItem * This,
+ /* [retval][out] */ VARIANT *pvarContext);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_remedy )(
+ IWMPErrorItem * This,
+ /* [retval][out] */ long *plRemedy);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_customUrl )(
+ IWMPErrorItem * This,
+ /* [retval][out] */ BSTR *pbstrCustomUrl);
+
+ END_INTERFACE
+ } IWMPErrorItemVtbl;
+
+ interface IWMPErrorItem
+ {
+ CONST_VTBL struct IWMPErrorItemVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPErrorItem_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPErrorItem_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPErrorItem_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPErrorItem_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPErrorItem_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPErrorItem_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPErrorItem_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPErrorItem_get_errorCode(This,phr) \
+ (This)->lpVtbl -> get_errorCode(This,phr)
+
+#define IWMPErrorItem_get_errorDescription(This,pbstrDescription) \
+ (This)->lpVtbl -> get_errorDescription(This,pbstrDescription)
+
+#define IWMPErrorItem_get_errorContext(This,pvarContext) \
+ (This)->lpVtbl -> get_errorContext(This,pvarContext)
+
+#define IWMPErrorItem_get_remedy(This,plRemedy) \
+ (This)->lpVtbl -> get_remedy(This,plRemedy)
+
+#define IWMPErrorItem_get_customUrl(This,pbstrCustomUrl) \
+ (This)->lpVtbl -> get_customUrl(This,pbstrCustomUrl)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPErrorItem_get_errorCode_Proxy(
+ IWMPErrorItem * This,
+ /* [retval][out] */ long *phr);
+
+
+void __RPC_STUB IWMPErrorItem_get_errorCode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPErrorItem_get_errorDescription_Proxy(
+ IWMPErrorItem * This,
+ /* [retval][out] */ BSTR *pbstrDescription);
+
+
+void __RPC_STUB IWMPErrorItem_get_errorDescription_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPErrorItem_get_errorContext_Proxy(
+ IWMPErrorItem * This,
+ /* [retval][out] */ VARIANT *pvarContext);
+
+
+void __RPC_STUB IWMPErrorItem_get_errorContext_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPErrorItem_get_remedy_Proxy(
+ IWMPErrorItem * This,
+ /* [retval][out] */ long *plRemedy);
+
+
+void __RPC_STUB IWMPErrorItem_get_remedy_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPErrorItem_get_customUrl_Proxy(
+ IWMPErrorItem * This,
+ /* [retval][out] */ BSTR *pbstrCustomUrl);
+
+
+void __RPC_STUB IWMPErrorItem_get_customUrl_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPErrorItem_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPError_INTERFACE_DEFINED__
+#define __IWMPError_INTERFACE_DEFINED__
+
+/* interface IWMPError */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPError;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("A12DCF7D-14AB-4c1b-A8CD-63909F06025B")
+ IWMPError : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE clearErrorQueue( void) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_errorCount(
+ /* [retval][out] */ long *plNumErrors) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_item(
+ /* [in] */ long dwIndex,
+ /* [retval][out] */ IWMPErrorItem **ppErrorItem) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE webHelp( void) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPErrorVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPError * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPError * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPError * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPError * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPError * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPError * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPError * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *clearErrorQueue )(
+ IWMPError * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_errorCount )(
+ IWMPError * This,
+ /* [retval][out] */ long *plNumErrors);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_item )(
+ IWMPError * This,
+ /* [in] */ long dwIndex,
+ /* [retval][out] */ IWMPErrorItem **ppErrorItem);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *webHelp )(
+ IWMPError * This);
+
+ END_INTERFACE
+ } IWMPErrorVtbl;
+
+ interface IWMPError
+ {
+ CONST_VTBL struct IWMPErrorVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPError_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPError_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPError_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPError_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPError_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPError_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPError_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPError_clearErrorQueue(This) \
+ (This)->lpVtbl -> clearErrorQueue(This)
+
+#define IWMPError_get_errorCount(This,plNumErrors) \
+ (This)->lpVtbl -> get_errorCount(This,plNumErrors)
+
+#define IWMPError_get_item(This,dwIndex,ppErrorItem) \
+ (This)->lpVtbl -> get_item(This,dwIndex,ppErrorItem)
+
+#define IWMPError_webHelp(This) \
+ (This)->lpVtbl -> webHelp(This)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPError_clearErrorQueue_Proxy(
+ IWMPError * This);
+
+
+void __RPC_STUB IWMPError_clearErrorQueue_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPError_get_errorCount_Proxy(
+ IWMPError * This,
+ /* [retval][out] */ long *plNumErrors);
+
+
+void __RPC_STUB IWMPError_get_errorCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPError_get_item_Proxy(
+ IWMPError * This,
+ /* [in] */ long dwIndex,
+ /* [retval][out] */ IWMPErrorItem **ppErrorItem);
+
+
+void __RPC_STUB IWMPError_get_item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPError_webHelp_Proxy(
+ IWMPError * This);
+
+
+void __RPC_STUB IWMPError_webHelp_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPError_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPMedia_INTERFACE_DEFINED__
+#define __IWMPMedia_INTERFACE_DEFINED__
+
+/* interface IWMPMedia */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPMedia;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("94D55E95-3FAC-11d3-B155-00C04F79FAA6")
+ IWMPMedia : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_isIdentical(
+ /* [in] */ IWMPMedia *pIWMPMedia,
+ /* [retval][out] */ VARIANT_BOOL *pvbool) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_sourceURL(
+ /* [retval][out] */ BSTR *pbstrSourceURL) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_name(
+ /* [retval][out] */ BSTR *pbstrName) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_name(
+ /* [in] */ BSTR bstrName) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_imageSourceWidth(
+ /* [retval][out] */ long *pWidth) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_imageSourceHeight(
+ /* [retval][out] */ long *pHeight) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_markerCount(
+ /* [retval][out] */ long *pMarkerCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getMarkerTime(
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ double *pMarkerTime) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getMarkerName(
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ BSTR *pbstrMarkerName) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_duration(
+ /* [retval][out] */ double *pDuration) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_durationString(
+ /* [retval][out] */ BSTR *pbstrDuration) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_attributeCount(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getAttributeName(
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrItemName) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getItemInfo(
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ BSTR *pbstrVal) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setItemInfo(
+ /* [in] */ BSTR bstrItemName,
+ /* [in] */ BSTR bstrVal) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getItemInfoByAtom(
+ /* [in] */ long lAtom,
+ /* [retval][out] */ BSTR *pbstrVal) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE isMemberOf(
+ /* [in] */ IWMPPlaylist *pPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsMemberOf) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE isReadOnlyItem(
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsReadOnly) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPMediaVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPMedia * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPMedia * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPMedia * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPMedia * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPMedia * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPMedia * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPMedia * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isIdentical )(
+ IWMPMedia * This,
+ /* [in] */ IWMPMedia *pIWMPMedia,
+ /* [retval][out] */ VARIANT_BOOL *pvbool);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_sourceURL )(
+ IWMPMedia * This,
+ /* [retval][out] */ BSTR *pbstrSourceURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
+ IWMPMedia * This,
+ /* [retval][out] */ BSTR *pbstrName);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_name )(
+ IWMPMedia * This,
+ /* [in] */ BSTR bstrName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_imageSourceWidth )(
+ IWMPMedia * This,
+ /* [retval][out] */ long *pWidth);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_imageSourceHeight )(
+ IWMPMedia * This,
+ /* [retval][out] */ long *pHeight);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_markerCount )(
+ IWMPMedia * This,
+ /* [retval][out] */ long *pMarkerCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMarkerTime )(
+ IWMPMedia * This,
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ double *pMarkerTime);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMarkerName )(
+ IWMPMedia * This,
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ BSTR *pbstrMarkerName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_duration )(
+ IWMPMedia * This,
+ /* [retval][out] */ double *pDuration);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_durationString )(
+ IWMPMedia * This,
+ /* [retval][out] */ BSTR *pbstrDuration);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_attributeCount )(
+ IWMPMedia * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getAttributeName )(
+ IWMPMedia * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrItemName);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getItemInfo )(
+ IWMPMedia * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setItemInfo )(
+ IWMPMedia * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [in] */ BSTR bstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getItemInfoByAtom )(
+ IWMPMedia * This,
+ /* [in] */ long lAtom,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *isMemberOf )(
+ IWMPMedia * This,
+ /* [in] */ IWMPPlaylist *pPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsMemberOf);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *isReadOnlyItem )(
+ IWMPMedia * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsReadOnly);
+
+ END_INTERFACE
+ } IWMPMediaVtbl;
+
+ interface IWMPMedia
+ {
+ CONST_VTBL struct IWMPMediaVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPMedia_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPMedia_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPMedia_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPMedia_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPMedia_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPMedia_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPMedia_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPMedia_get_isIdentical(This,pIWMPMedia,pvbool) \
+ (This)->lpVtbl -> get_isIdentical(This,pIWMPMedia,pvbool)
+
+#define IWMPMedia_get_sourceURL(This,pbstrSourceURL) \
+ (This)->lpVtbl -> get_sourceURL(This,pbstrSourceURL)
+
+#define IWMPMedia_get_name(This,pbstrName) \
+ (This)->lpVtbl -> get_name(This,pbstrName)
+
+#define IWMPMedia_put_name(This,bstrName) \
+ (This)->lpVtbl -> put_name(This,bstrName)
+
+#define IWMPMedia_get_imageSourceWidth(This,pWidth) \
+ (This)->lpVtbl -> get_imageSourceWidth(This,pWidth)
+
+#define IWMPMedia_get_imageSourceHeight(This,pHeight) \
+ (This)->lpVtbl -> get_imageSourceHeight(This,pHeight)
+
+#define IWMPMedia_get_markerCount(This,pMarkerCount) \
+ (This)->lpVtbl -> get_markerCount(This,pMarkerCount)
+
+#define IWMPMedia_getMarkerTime(This,MarkerNum,pMarkerTime) \
+ (This)->lpVtbl -> getMarkerTime(This,MarkerNum,pMarkerTime)
+
+#define IWMPMedia_getMarkerName(This,MarkerNum,pbstrMarkerName) \
+ (This)->lpVtbl -> getMarkerName(This,MarkerNum,pbstrMarkerName)
+
+#define IWMPMedia_get_duration(This,pDuration) \
+ (This)->lpVtbl -> get_duration(This,pDuration)
+
+#define IWMPMedia_get_durationString(This,pbstrDuration) \
+ (This)->lpVtbl -> get_durationString(This,pbstrDuration)
+
+#define IWMPMedia_get_attributeCount(This,plCount) \
+ (This)->lpVtbl -> get_attributeCount(This,plCount)
+
+#define IWMPMedia_getAttributeName(This,lIndex,pbstrItemName) \
+ (This)->lpVtbl -> getAttributeName(This,lIndex,pbstrItemName)
+
+#define IWMPMedia_getItemInfo(This,bstrItemName,pbstrVal) \
+ (This)->lpVtbl -> getItemInfo(This,bstrItemName,pbstrVal)
+
+#define IWMPMedia_setItemInfo(This,bstrItemName,bstrVal) \
+ (This)->lpVtbl -> setItemInfo(This,bstrItemName,bstrVal)
+
+#define IWMPMedia_getItemInfoByAtom(This,lAtom,pbstrVal) \
+ (This)->lpVtbl -> getItemInfoByAtom(This,lAtom,pbstrVal)
+
+#define IWMPMedia_isMemberOf(This,pPlaylist,pvarfIsMemberOf) \
+ (This)->lpVtbl -> isMemberOf(This,pPlaylist,pvarfIsMemberOf)
+
+#define IWMPMedia_isReadOnlyItem(This,bstrItemName,pvarfIsReadOnly) \
+ (This)->lpVtbl -> isReadOnlyItem(This,bstrItemName,pvarfIsReadOnly)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_isIdentical_Proxy(
+ IWMPMedia * This,
+ /* [in] */ IWMPMedia *pIWMPMedia,
+ /* [retval][out] */ VARIANT_BOOL *pvbool);
+
+
+void __RPC_STUB IWMPMedia_get_isIdentical_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_sourceURL_Proxy(
+ IWMPMedia * This,
+ /* [retval][out] */ BSTR *pbstrSourceURL);
+
+
+void __RPC_STUB IWMPMedia_get_sourceURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_name_Proxy(
+ IWMPMedia * This,
+ /* [retval][out] */ BSTR *pbstrName);
+
+
+void __RPC_STUB IWMPMedia_get_name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_put_name_Proxy(
+ IWMPMedia * This,
+ /* [in] */ BSTR bstrName);
+
+
+void __RPC_STUB IWMPMedia_put_name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_imageSourceWidth_Proxy(
+ IWMPMedia * This,
+ /* [retval][out] */ long *pWidth);
+
+
+void __RPC_STUB IWMPMedia_get_imageSourceWidth_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_imageSourceHeight_Proxy(
+ IWMPMedia * This,
+ /* [retval][out] */ long *pHeight);
+
+
+void __RPC_STUB IWMPMedia_get_imageSourceHeight_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_markerCount_Proxy(
+ IWMPMedia * This,
+ /* [retval][out] */ long *pMarkerCount);
+
+
+void __RPC_STUB IWMPMedia_get_markerCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_getMarkerTime_Proxy(
+ IWMPMedia * This,
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ double *pMarkerTime);
+
+
+void __RPC_STUB IWMPMedia_getMarkerTime_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_getMarkerName_Proxy(
+ IWMPMedia * This,
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ BSTR *pbstrMarkerName);
+
+
+void __RPC_STUB IWMPMedia_getMarkerName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_duration_Proxy(
+ IWMPMedia * This,
+ /* [retval][out] */ double *pDuration);
+
+
+void __RPC_STUB IWMPMedia_get_duration_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_durationString_Proxy(
+ IWMPMedia * This,
+ /* [retval][out] */ BSTR *pbstrDuration);
+
+
+void __RPC_STUB IWMPMedia_get_durationString_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_get_attributeCount_Proxy(
+ IWMPMedia * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPMedia_get_attributeCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_getAttributeName_Proxy(
+ IWMPMedia * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrItemName);
+
+
+void __RPC_STUB IWMPMedia_getAttributeName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_getItemInfo_Proxy(
+ IWMPMedia * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+
+void __RPC_STUB IWMPMedia_getItemInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_setItemInfo_Proxy(
+ IWMPMedia * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [in] */ BSTR bstrVal);
+
+
+void __RPC_STUB IWMPMedia_setItemInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_getItemInfoByAtom_Proxy(
+ IWMPMedia * This,
+ /* [in] */ long lAtom,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+
+void __RPC_STUB IWMPMedia_getItemInfoByAtom_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_isMemberOf_Proxy(
+ IWMPMedia * This,
+ /* [in] */ IWMPPlaylist *pPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsMemberOf);
+
+
+void __RPC_STUB IWMPMedia_isMemberOf_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia_isReadOnlyItem_Proxy(
+ IWMPMedia * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsReadOnly);
+
+
+void __RPC_STUB IWMPMedia_isReadOnlyItem_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPMedia_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPControls_INTERFACE_DEFINED__
+#define __IWMPControls_INTERFACE_DEFINED__
+
+/* interface IWMPControls */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPControls;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("74C09E02-F828-11d2-A74B-00A0C905F36E")
+ IWMPControls : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_isAvailable(
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE play( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE stop( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE pause( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE fastForward( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE fastReverse( void) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentPosition(
+ /* [retval][out] */ double *pdCurrentPosition) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_currentPosition(
+ /* [in] */ double dCurrentPosition) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentPositionString(
+ /* [retval][out] */ BSTR *pbstrCurrentPosition) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE next( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE previous( void) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentItem(
+ /* [retval][out] */ IWMPMedia **ppIWMPMedia) = 0;
+
+ virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_currentItem(
+ /* [in] */ IWMPMedia *pIWMPMedia) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentMarker(
+ /* [retval][out] */ long *plMarker) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_currentMarker(
+ /* [in] */ long lMarker) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE playItem(
+ /* [in] */ IWMPMedia *pIWMPMedia) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPControlsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPControls * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPControls * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPControls * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPControls * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPControls * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPControls * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPControls * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isAvailable )(
+ IWMPControls * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *play )(
+ IWMPControls * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *stop )(
+ IWMPControls * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *pause )(
+ IWMPControls * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *fastForward )(
+ IWMPControls * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *fastReverse )(
+ IWMPControls * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPosition )(
+ IWMPControls * This,
+ /* [retval][out] */ double *pdCurrentPosition);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPosition )(
+ IWMPControls * This,
+ /* [in] */ double dCurrentPosition);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPositionString )(
+ IWMPControls * This,
+ /* [retval][out] */ BSTR *pbstrCurrentPosition);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *next )(
+ IWMPControls * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *previous )(
+ IWMPControls * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentItem )(
+ IWMPControls * This,
+ /* [retval][out] */ IWMPMedia **ppIWMPMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentItem )(
+ IWMPControls * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMarker )(
+ IWMPControls * This,
+ /* [retval][out] */ long *plMarker);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMarker )(
+ IWMPControls * This,
+ /* [in] */ long lMarker);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *playItem )(
+ IWMPControls * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ END_INTERFACE
+ } IWMPControlsVtbl;
+
+ interface IWMPControls
+ {
+ CONST_VTBL struct IWMPControlsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPControls_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPControls_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPControls_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPControls_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPControls_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPControls_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPControls_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPControls_get_isAvailable(This,bstrItem,pIsAvailable) \
+ (This)->lpVtbl -> get_isAvailable(This,bstrItem,pIsAvailable)
+
+#define IWMPControls_play(This) \
+ (This)->lpVtbl -> play(This)
+
+#define IWMPControls_stop(This) \
+ (This)->lpVtbl -> stop(This)
+
+#define IWMPControls_pause(This) \
+ (This)->lpVtbl -> pause(This)
+
+#define IWMPControls_fastForward(This) \
+ (This)->lpVtbl -> fastForward(This)
+
+#define IWMPControls_fastReverse(This) \
+ (This)->lpVtbl -> fastReverse(This)
+
+#define IWMPControls_get_currentPosition(This,pdCurrentPosition) \
+ (This)->lpVtbl -> get_currentPosition(This,pdCurrentPosition)
+
+#define IWMPControls_put_currentPosition(This,dCurrentPosition) \
+ (This)->lpVtbl -> put_currentPosition(This,dCurrentPosition)
+
+#define IWMPControls_get_currentPositionString(This,pbstrCurrentPosition) \
+ (This)->lpVtbl -> get_currentPositionString(This,pbstrCurrentPosition)
+
+#define IWMPControls_next(This) \
+ (This)->lpVtbl -> next(This)
+
+#define IWMPControls_previous(This) \
+ (This)->lpVtbl -> previous(This)
+
+#define IWMPControls_get_currentItem(This,ppIWMPMedia) \
+ (This)->lpVtbl -> get_currentItem(This,ppIWMPMedia)
+
+#define IWMPControls_put_currentItem(This,pIWMPMedia) \
+ (This)->lpVtbl -> put_currentItem(This,pIWMPMedia)
+
+#define IWMPControls_get_currentMarker(This,plMarker) \
+ (This)->lpVtbl -> get_currentMarker(This,plMarker)
+
+#define IWMPControls_put_currentMarker(This,lMarker) \
+ (This)->lpVtbl -> put_currentMarker(This,lMarker)
+
+#define IWMPControls_playItem(This,pIWMPMedia) \
+ (This)->lpVtbl -> playItem(This,pIWMPMedia)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_get_isAvailable_Proxy(
+ IWMPControls * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+
+void __RPC_STUB IWMPControls_get_isAvailable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_play_Proxy(
+ IWMPControls * This);
+
+
+void __RPC_STUB IWMPControls_play_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_stop_Proxy(
+ IWMPControls * This);
+
+
+void __RPC_STUB IWMPControls_stop_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_pause_Proxy(
+ IWMPControls * This);
+
+
+void __RPC_STUB IWMPControls_pause_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_fastForward_Proxy(
+ IWMPControls * This);
+
+
+void __RPC_STUB IWMPControls_fastForward_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_fastReverse_Proxy(
+ IWMPControls * This);
+
+
+void __RPC_STUB IWMPControls_fastReverse_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_get_currentPosition_Proxy(
+ IWMPControls * This,
+ /* [retval][out] */ double *pdCurrentPosition);
+
+
+void __RPC_STUB IWMPControls_get_currentPosition_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_put_currentPosition_Proxy(
+ IWMPControls * This,
+ /* [in] */ double dCurrentPosition);
+
+
+void __RPC_STUB IWMPControls_put_currentPosition_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_get_currentPositionString_Proxy(
+ IWMPControls * This,
+ /* [retval][out] */ BSTR *pbstrCurrentPosition);
+
+
+void __RPC_STUB IWMPControls_get_currentPositionString_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_next_Proxy(
+ IWMPControls * This);
+
+
+void __RPC_STUB IWMPControls_next_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_previous_Proxy(
+ IWMPControls * This);
+
+
+void __RPC_STUB IWMPControls_previous_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_get_currentItem_Proxy(
+ IWMPControls * This,
+ /* [retval][out] */ IWMPMedia **ppIWMPMedia);
+
+
+void __RPC_STUB IWMPControls_get_currentItem_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propput][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_put_currentItem_Proxy(
+ IWMPControls * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+
+void __RPC_STUB IWMPControls_put_currentItem_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_get_currentMarker_Proxy(
+ IWMPControls * This,
+ /* [retval][out] */ long *plMarker);
+
+
+void __RPC_STUB IWMPControls_get_currentMarker_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_put_currentMarker_Proxy(
+ IWMPControls * This,
+ /* [in] */ long lMarker);
+
+
+void __RPC_STUB IWMPControls_put_currentMarker_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls_playItem_Proxy(
+ IWMPControls * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+
+void __RPC_STUB IWMPControls_playItem_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPControls_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPSettings_INTERFACE_DEFINED__
+#define __IWMPSettings_INTERFACE_DEFINED__
+
+/* interface IWMPSettings */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPSettings;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("9104D1AB-80C9-4fed-ABF0-2E6417A6DF14")
+ IWMPSettings : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_isAvailable(
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_autoStart(
+ /* [retval][out] */ VARIANT_BOOL *pfAutoStart) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_autoStart(
+ /* [in] */ VARIANT_BOOL fAutoStart) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_baseURL(
+ /* [retval][out] */ BSTR *pbstrBaseURL) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_baseURL(
+ /* [in] */ BSTR bstrBaseURL) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_defaultFrame(
+ /* [retval][out] */ BSTR *pbstrDefaultFrame) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_defaultFrame(
+ /* [in] */ BSTR bstrDefaultFrame) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_invokeURLs(
+ /* [retval][out] */ VARIANT_BOOL *pfInvokeURLs) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_invokeURLs(
+ /* [in] */ VARIANT_BOOL fInvokeURLs) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_mute(
+ /* [retval][out] */ VARIANT_BOOL *pfMute) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_mute(
+ /* [in] */ VARIANT_BOOL fMute) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_playCount(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_playCount(
+ /* [in] */ long lCount) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_rate(
+ /* [retval][out] */ double *pdRate) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_rate(
+ /* [in] */ double dRate) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_balance(
+ /* [retval][out] */ long *plBalance) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_balance(
+ /* [in] */ long lBalance) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_volume(
+ /* [retval][out] */ long *plVolume) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_volume(
+ /* [in] */ long lVolume) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getMode(
+ /* [in] */ BSTR bstrMode,
+ /* [retval][out] */ VARIANT_BOOL *pvarfMode) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setMode(
+ /* [in] */ BSTR bstrMode,
+ /* [in] */ VARIANT_BOOL varfMode) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enableErrorDialogs(
+ /* [retval][out] */ VARIANT_BOOL *pfEnableErrorDialogs) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enableErrorDialogs(
+ /* [in] */ VARIANT_BOOL fEnableErrorDialogs) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPSettingsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPSettings * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPSettings * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPSettings * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPSettings * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPSettings * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPSettings * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPSettings * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isAvailable )(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_autoStart )(
+ IWMPSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *pfAutoStart);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_autoStart )(
+ IWMPSettings * This,
+ /* [in] */ VARIANT_BOOL fAutoStart);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_baseURL )(
+ IWMPSettings * This,
+ /* [retval][out] */ BSTR *pbstrBaseURL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_baseURL )(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrBaseURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_defaultFrame )(
+ IWMPSettings * This,
+ /* [retval][out] */ BSTR *pbstrDefaultFrame);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_defaultFrame )(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrDefaultFrame);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_invokeURLs )(
+ IWMPSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *pfInvokeURLs);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_invokeURLs )(
+ IWMPSettings * This,
+ /* [in] */ VARIANT_BOOL fInvokeURLs);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mute )(
+ IWMPSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *pfMute);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_mute )(
+ IWMPSettings * This,
+ /* [in] */ VARIANT_BOOL fMute);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playCount )(
+ IWMPSettings * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_playCount )(
+ IWMPSettings * This,
+ /* [in] */ long lCount);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_rate )(
+ IWMPSettings * This,
+ /* [retval][out] */ double *pdRate);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_rate )(
+ IWMPSettings * This,
+ /* [in] */ double dRate);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_balance )(
+ IWMPSettings * This,
+ /* [retval][out] */ long *plBalance);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_balance )(
+ IWMPSettings * This,
+ /* [in] */ long lBalance);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_volume )(
+ IWMPSettings * This,
+ /* [retval][out] */ long *plVolume);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_volume )(
+ IWMPSettings * This,
+ /* [in] */ long lVolume);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMode )(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrMode,
+ /* [retval][out] */ VARIANT_BOOL *pvarfMode);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setMode )(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrMode,
+ /* [in] */ VARIANT_BOOL varfMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enableErrorDialogs )(
+ IWMPSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *pfEnableErrorDialogs);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enableErrorDialogs )(
+ IWMPSettings * This,
+ /* [in] */ VARIANT_BOOL fEnableErrorDialogs);
+
+ END_INTERFACE
+ } IWMPSettingsVtbl;
+
+ interface IWMPSettings
+ {
+ CONST_VTBL struct IWMPSettingsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPSettings_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPSettings_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPSettings_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPSettings_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPSettings_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPSettings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPSettings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPSettings_get_isAvailable(This,bstrItem,pIsAvailable) \
+ (This)->lpVtbl -> get_isAvailable(This,bstrItem,pIsAvailable)
+
+#define IWMPSettings_get_autoStart(This,pfAutoStart) \
+ (This)->lpVtbl -> get_autoStart(This,pfAutoStart)
+
+#define IWMPSettings_put_autoStart(This,fAutoStart) \
+ (This)->lpVtbl -> put_autoStart(This,fAutoStart)
+
+#define IWMPSettings_get_baseURL(This,pbstrBaseURL) \
+ (This)->lpVtbl -> get_baseURL(This,pbstrBaseURL)
+
+#define IWMPSettings_put_baseURL(This,bstrBaseURL) \
+ (This)->lpVtbl -> put_baseURL(This,bstrBaseURL)
+
+#define IWMPSettings_get_defaultFrame(This,pbstrDefaultFrame) \
+ (This)->lpVtbl -> get_defaultFrame(This,pbstrDefaultFrame)
+
+#define IWMPSettings_put_defaultFrame(This,bstrDefaultFrame) \
+ (This)->lpVtbl -> put_defaultFrame(This,bstrDefaultFrame)
+
+#define IWMPSettings_get_invokeURLs(This,pfInvokeURLs) \
+ (This)->lpVtbl -> get_invokeURLs(This,pfInvokeURLs)
+
+#define IWMPSettings_put_invokeURLs(This,fInvokeURLs) \
+ (This)->lpVtbl -> put_invokeURLs(This,fInvokeURLs)
+
+#define IWMPSettings_get_mute(This,pfMute) \
+ (This)->lpVtbl -> get_mute(This,pfMute)
+
+#define IWMPSettings_put_mute(This,fMute) \
+ (This)->lpVtbl -> put_mute(This,fMute)
+
+#define IWMPSettings_get_playCount(This,plCount) \
+ (This)->lpVtbl -> get_playCount(This,plCount)
+
+#define IWMPSettings_put_playCount(This,lCount) \
+ (This)->lpVtbl -> put_playCount(This,lCount)
+
+#define IWMPSettings_get_rate(This,pdRate) \
+ (This)->lpVtbl -> get_rate(This,pdRate)
+
+#define IWMPSettings_put_rate(This,dRate) \
+ (This)->lpVtbl -> put_rate(This,dRate)
+
+#define IWMPSettings_get_balance(This,plBalance) \
+ (This)->lpVtbl -> get_balance(This,plBalance)
+
+#define IWMPSettings_put_balance(This,lBalance) \
+ (This)->lpVtbl -> put_balance(This,lBalance)
+
+#define IWMPSettings_get_volume(This,plVolume) \
+ (This)->lpVtbl -> get_volume(This,plVolume)
+
+#define IWMPSettings_put_volume(This,lVolume) \
+ (This)->lpVtbl -> put_volume(This,lVolume)
+
+#define IWMPSettings_getMode(This,bstrMode,pvarfMode) \
+ (This)->lpVtbl -> getMode(This,bstrMode,pvarfMode)
+
+#define IWMPSettings_setMode(This,bstrMode,varfMode) \
+ (This)->lpVtbl -> setMode(This,bstrMode,varfMode)
+
+#define IWMPSettings_get_enableErrorDialogs(This,pfEnableErrorDialogs) \
+ (This)->lpVtbl -> get_enableErrorDialogs(This,pfEnableErrorDialogs)
+
+#define IWMPSettings_put_enableErrorDialogs(This,fEnableErrorDialogs) \
+ (This)->lpVtbl -> put_enableErrorDialogs(This,fEnableErrorDialogs)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_isAvailable_Proxy(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+
+void __RPC_STUB IWMPSettings_get_isAvailable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_autoStart_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *pfAutoStart);
+
+
+void __RPC_STUB IWMPSettings_get_autoStart_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_autoStart_Proxy(
+ IWMPSettings * This,
+ /* [in] */ VARIANT_BOOL fAutoStart);
+
+
+void __RPC_STUB IWMPSettings_put_autoStart_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_baseURL_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ BSTR *pbstrBaseURL);
+
+
+void __RPC_STUB IWMPSettings_get_baseURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_baseURL_Proxy(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrBaseURL);
+
+
+void __RPC_STUB IWMPSettings_put_baseURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_defaultFrame_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ BSTR *pbstrDefaultFrame);
+
+
+void __RPC_STUB IWMPSettings_get_defaultFrame_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_defaultFrame_Proxy(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrDefaultFrame);
+
+
+void __RPC_STUB IWMPSettings_put_defaultFrame_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_invokeURLs_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *pfInvokeURLs);
+
+
+void __RPC_STUB IWMPSettings_get_invokeURLs_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_invokeURLs_Proxy(
+ IWMPSettings * This,
+ /* [in] */ VARIANT_BOOL fInvokeURLs);
+
+
+void __RPC_STUB IWMPSettings_put_invokeURLs_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_mute_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *pfMute);
+
+
+void __RPC_STUB IWMPSettings_get_mute_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_mute_Proxy(
+ IWMPSettings * This,
+ /* [in] */ VARIANT_BOOL fMute);
+
+
+void __RPC_STUB IWMPSettings_put_mute_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_playCount_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPSettings_get_playCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_playCount_Proxy(
+ IWMPSettings * This,
+ /* [in] */ long lCount);
+
+
+void __RPC_STUB IWMPSettings_put_playCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_rate_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ double *pdRate);
+
+
+void __RPC_STUB IWMPSettings_get_rate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_rate_Proxy(
+ IWMPSettings * This,
+ /* [in] */ double dRate);
+
+
+void __RPC_STUB IWMPSettings_put_rate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_balance_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ long *plBalance);
+
+
+void __RPC_STUB IWMPSettings_get_balance_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_balance_Proxy(
+ IWMPSettings * This,
+ /* [in] */ long lBalance);
+
+
+void __RPC_STUB IWMPSettings_put_balance_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_volume_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ long *plVolume);
+
+
+void __RPC_STUB IWMPSettings_get_volume_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_volume_Proxy(
+ IWMPSettings * This,
+ /* [in] */ long lVolume);
+
+
+void __RPC_STUB IWMPSettings_put_volume_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_getMode_Proxy(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrMode,
+ /* [retval][out] */ VARIANT_BOOL *pvarfMode);
+
+
+void __RPC_STUB IWMPSettings_getMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_setMode_Proxy(
+ IWMPSettings * This,
+ /* [in] */ BSTR bstrMode,
+ /* [in] */ VARIANT_BOOL varfMode);
+
+
+void __RPC_STUB IWMPSettings_setMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_get_enableErrorDialogs_Proxy(
+ IWMPSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *pfEnableErrorDialogs);
+
+
+void __RPC_STUB IWMPSettings_get_enableErrorDialogs_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings_put_enableErrorDialogs_Proxy(
+ IWMPSettings * This,
+ /* [in] */ VARIANT_BOOL fEnableErrorDialogs);
+
+
+void __RPC_STUB IWMPSettings_put_enableErrorDialogs_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPSettings_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPClosedCaption_INTERFACE_DEFINED__
+#define __IWMPClosedCaption_INTERFACE_DEFINED__
+
+/* interface IWMPClosedCaption */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPClosedCaption;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("4F2DF574-C588-11d3-9ED0-00C04FB6E937")
+ IWMPClosedCaption : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SAMIStyle(
+ /* [retval][out] */ BSTR *pbstrSAMIStyle) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_SAMIStyle(
+ /* [in] */ BSTR bstrSAMIStyle) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SAMILang(
+ /* [retval][out] */ BSTR *pbstrSAMILang) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_SAMILang(
+ /* [in] */ BSTR bstrSAMILang) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SAMIFileName(
+ /* [retval][out] */ BSTR *pbstrSAMIFileName) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_SAMIFileName(
+ /* [in] */ BSTR bstrSAMIFileName) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_captioningId(
+ /* [retval][out] */ BSTR *pbstrCaptioningID) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_captioningId(
+ /* [in] */ BSTR bstrCaptioningID) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPClosedCaptionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPClosedCaption * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPClosedCaption * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPClosedCaption * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPClosedCaption * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPClosedCaption * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPClosedCaption * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPClosedCaption * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAMIStyle )(
+ IWMPClosedCaption * This,
+ /* [retval][out] */ BSTR *pbstrSAMIStyle);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SAMIStyle )(
+ IWMPClosedCaption * This,
+ /* [in] */ BSTR bstrSAMIStyle);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAMILang )(
+ IWMPClosedCaption * This,
+ /* [retval][out] */ BSTR *pbstrSAMILang);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SAMILang )(
+ IWMPClosedCaption * This,
+ /* [in] */ BSTR bstrSAMILang);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAMIFileName )(
+ IWMPClosedCaption * This,
+ /* [retval][out] */ BSTR *pbstrSAMIFileName);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SAMIFileName )(
+ IWMPClosedCaption * This,
+ /* [in] */ BSTR bstrSAMIFileName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_captioningId )(
+ IWMPClosedCaption * This,
+ /* [retval][out] */ BSTR *pbstrCaptioningID);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_captioningId )(
+ IWMPClosedCaption * This,
+ /* [in] */ BSTR bstrCaptioningID);
+
+ END_INTERFACE
+ } IWMPClosedCaptionVtbl;
+
+ interface IWMPClosedCaption
+ {
+ CONST_VTBL struct IWMPClosedCaptionVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPClosedCaption_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPClosedCaption_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPClosedCaption_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPClosedCaption_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPClosedCaption_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPClosedCaption_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPClosedCaption_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPClosedCaption_get_SAMIStyle(This,pbstrSAMIStyle) \
+ (This)->lpVtbl -> get_SAMIStyle(This,pbstrSAMIStyle)
+
+#define IWMPClosedCaption_put_SAMIStyle(This,bstrSAMIStyle) \
+ (This)->lpVtbl -> put_SAMIStyle(This,bstrSAMIStyle)
+
+#define IWMPClosedCaption_get_SAMILang(This,pbstrSAMILang) \
+ (This)->lpVtbl -> get_SAMILang(This,pbstrSAMILang)
+
+#define IWMPClosedCaption_put_SAMILang(This,bstrSAMILang) \
+ (This)->lpVtbl -> put_SAMILang(This,bstrSAMILang)
+
+#define IWMPClosedCaption_get_SAMIFileName(This,pbstrSAMIFileName) \
+ (This)->lpVtbl -> get_SAMIFileName(This,pbstrSAMIFileName)
+
+#define IWMPClosedCaption_put_SAMIFileName(This,bstrSAMIFileName) \
+ (This)->lpVtbl -> put_SAMIFileName(This,bstrSAMIFileName)
+
+#define IWMPClosedCaption_get_captioningId(This,pbstrCaptioningID) \
+ (This)->lpVtbl -> get_captioningId(This,pbstrCaptioningID)
+
+#define IWMPClosedCaption_put_captioningId(This,bstrCaptioningID) \
+ (This)->lpVtbl -> put_captioningId(This,bstrCaptioningID)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption_get_SAMIStyle_Proxy(
+ IWMPClosedCaption * This,
+ /* [retval][out] */ BSTR *pbstrSAMIStyle);
+
+
+void __RPC_STUB IWMPClosedCaption_get_SAMIStyle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption_put_SAMIStyle_Proxy(
+ IWMPClosedCaption * This,
+ /* [in] */ BSTR bstrSAMIStyle);
+
+
+void __RPC_STUB IWMPClosedCaption_put_SAMIStyle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption_get_SAMILang_Proxy(
+ IWMPClosedCaption * This,
+ /* [retval][out] */ BSTR *pbstrSAMILang);
+
+
+void __RPC_STUB IWMPClosedCaption_get_SAMILang_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption_put_SAMILang_Proxy(
+ IWMPClosedCaption * This,
+ /* [in] */ BSTR bstrSAMILang);
+
+
+void __RPC_STUB IWMPClosedCaption_put_SAMILang_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption_get_SAMIFileName_Proxy(
+ IWMPClosedCaption * This,
+ /* [retval][out] */ BSTR *pbstrSAMIFileName);
+
+
+void __RPC_STUB IWMPClosedCaption_get_SAMIFileName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption_put_SAMIFileName_Proxy(
+ IWMPClosedCaption * This,
+ /* [in] */ BSTR bstrSAMIFileName);
+
+
+void __RPC_STUB IWMPClosedCaption_put_SAMIFileName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption_get_captioningId_Proxy(
+ IWMPClosedCaption * This,
+ /* [retval][out] */ BSTR *pbstrCaptioningID);
+
+
+void __RPC_STUB IWMPClosedCaption_get_captioningId_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption_put_captioningId_Proxy(
+ IWMPClosedCaption * This,
+ /* [in] */ BSTR bstrCaptioningID);
+
+
+void __RPC_STUB IWMPClosedCaption_put_captioningId_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPClosedCaption_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlaylist_INTERFACE_DEFINED__
+#define __IWMPPlaylist_INTERFACE_DEFINED__
+
+/* interface IWMPPlaylist */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlaylist;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("D5F0F4F1-130C-11d3-B14E-00C04F79FAA6")
+ IWMPPlaylist : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_count(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_name(
+ /* [retval][out] */ BSTR *pbstrName) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_name(
+ /* [in] */ BSTR bstrName) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_attributeCount(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_attributeName(
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrAttributeName) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_item(
+ long lIndex,
+ /* [retval][out] */ IWMPMedia **ppIWMPMedia) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getItemInfo(
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ BSTR *pbstrVal) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setItemInfo(
+ /* [in] */ BSTR bstrName,
+ /* [in] */ BSTR bstrValue) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_isIdentical(
+ /* [in] */ IWMPPlaylist *pIWMPPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *pvbool) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE clear( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE insertItem(
+ /* [in] */ long lIndex,
+ /* [in] */ IWMPMedia *pIWMPMedia) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE appendItem(
+ /* [in] */ IWMPMedia *pIWMPMedia) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE removeItem(
+ /* [in] */ IWMPMedia *pIWMPMedia) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE moveItem(
+ long lIndexOld,
+ long lIndexNew) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlaylistVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlaylist * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlaylist * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlaylist * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPPlaylist * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPPlaylist * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPPlaylist * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPPlaylist * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_count )(
+ IWMPPlaylist * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
+ IWMPPlaylist * This,
+ /* [retval][out] */ BSTR *pbstrName);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_name )(
+ IWMPPlaylist * This,
+ /* [in] */ BSTR bstrName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_attributeCount )(
+ IWMPPlaylist * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_attributeName )(
+ IWMPPlaylist * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrAttributeName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_item )(
+ IWMPPlaylist * This,
+ long lIndex,
+ /* [retval][out] */ IWMPMedia **ppIWMPMedia);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getItemInfo )(
+ IWMPPlaylist * This,
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setItemInfo )(
+ IWMPPlaylist * This,
+ /* [in] */ BSTR bstrName,
+ /* [in] */ BSTR bstrValue);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isIdentical )(
+ IWMPPlaylist * This,
+ /* [in] */ IWMPPlaylist *pIWMPPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *pvbool);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *clear )(
+ IWMPPlaylist * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *insertItem )(
+ IWMPPlaylist * This,
+ /* [in] */ long lIndex,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *appendItem )(
+ IWMPPlaylist * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *removeItem )(
+ IWMPPlaylist * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *moveItem )(
+ IWMPPlaylist * This,
+ long lIndexOld,
+ long lIndexNew);
+
+ END_INTERFACE
+ } IWMPPlaylistVtbl;
+
+ interface IWMPPlaylist
+ {
+ CONST_VTBL struct IWMPPlaylistVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlaylist_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlaylist_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlaylist_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlaylist_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPPlaylist_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPPlaylist_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPPlaylist_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPPlaylist_get_count(This,plCount) \
+ (This)->lpVtbl -> get_count(This,plCount)
+
+#define IWMPPlaylist_get_name(This,pbstrName) \
+ (This)->lpVtbl -> get_name(This,pbstrName)
+
+#define IWMPPlaylist_put_name(This,bstrName) \
+ (This)->lpVtbl -> put_name(This,bstrName)
+
+#define IWMPPlaylist_get_attributeCount(This,plCount) \
+ (This)->lpVtbl -> get_attributeCount(This,plCount)
+
+#define IWMPPlaylist_get_attributeName(This,lIndex,pbstrAttributeName) \
+ (This)->lpVtbl -> get_attributeName(This,lIndex,pbstrAttributeName)
+
+#define IWMPPlaylist_get_item(This,lIndex,ppIWMPMedia) \
+ (This)->lpVtbl -> get_item(This,lIndex,ppIWMPMedia)
+
+#define IWMPPlaylist_getItemInfo(This,bstrName,pbstrVal) \
+ (This)->lpVtbl -> getItemInfo(This,bstrName,pbstrVal)
+
+#define IWMPPlaylist_setItemInfo(This,bstrName,bstrValue) \
+ (This)->lpVtbl -> setItemInfo(This,bstrName,bstrValue)
+
+#define IWMPPlaylist_get_isIdentical(This,pIWMPPlaylist,pvbool) \
+ (This)->lpVtbl -> get_isIdentical(This,pIWMPPlaylist,pvbool)
+
+#define IWMPPlaylist_clear(This) \
+ (This)->lpVtbl -> clear(This)
+
+#define IWMPPlaylist_insertItem(This,lIndex,pIWMPMedia) \
+ (This)->lpVtbl -> insertItem(This,lIndex,pIWMPMedia)
+
+#define IWMPPlaylist_appendItem(This,pIWMPMedia) \
+ (This)->lpVtbl -> appendItem(This,pIWMPMedia)
+
+#define IWMPPlaylist_removeItem(This,pIWMPMedia) \
+ (This)->lpVtbl -> removeItem(This,pIWMPMedia)
+
+#define IWMPPlaylist_moveItem(This,lIndexOld,lIndexNew) \
+ (This)->lpVtbl -> moveItem(This,lIndexOld,lIndexNew)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_get_count_Proxy(
+ IWMPPlaylist * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPPlaylist_get_count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_get_name_Proxy(
+ IWMPPlaylist * This,
+ /* [retval][out] */ BSTR *pbstrName);
+
+
+void __RPC_STUB IWMPPlaylist_get_name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_put_name_Proxy(
+ IWMPPlaylist * This,
+ /* [in] */ BSTR bstrName);
+
+
+void __RPC_STUB IWMPPlaylist_put_name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_get_attributeCount_Proxy(
+ IWMPPlaylist * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPPlaylist_get_attributeCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_get_attributeName_Proxy(
+ IWMPPlaylist * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrAttributeName);
+
+
+void __RPC_STUB IWMPPlaylist_get_attributeName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_get_item_Proxy(
+ IWMPPlaylist * This,
+ long lIndex,
+ /* [retval][out] */ IWMPMedia **ppIWMPMedia);
+
+
+void __RPC_STUB IWMPPlaylist_get_item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_getItemInfo_Proxy(
+ IWMPPlaylist * This,
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+
+void __RPC_STUB IWMPPlaylist_getItemInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_setItemInfo_Proxy(
+ IWMPPlaylist * This,
+ /* [in] */ BSTR bstrName,
+ /* [in] */ BSTR bstrValue);
+
+
+void __RPC_STUB IWMPPlaylist_setItemInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_get_isIdentical_Proxy(
+ IWMPPlaylist * This,
+ /* [in] */ IWMPPlaylist *pIWMPPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *pvbool);
+
+
+void __RPC_STUB IWMPPlaylist_get_isIdentical_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_clear_Proxy(
+ IWMPPlaylist * This);
+
+
+void __RPC_STUB IWMPPlaylist_clear_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_insertItem_Proxy(
+ IWMPPlaylist * This,
+ /* [in] */ long lIndex,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+
+void __RPC_STUB IWMPPlaylist_insertItem_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_appendItem_Proxy(
+ IWMPPlaylist * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+
+void __RPC_STUB IWMPPlaylist_appendItem_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_removeItem_Proxy(
+ IWMPPlaylist * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+
+void __RPC_STUB IWMPPlaylist_removeItem_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylist_moveItem_Proxy(
+ IWMPPlaylist * This,
+ long lIndexOld,
+ long lIndexNew);
+
+
+void __RPC_STUB IWMPPlaylist_moveItem_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlaylist_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPCdrom_INTERFACE_DEFINED__
+#define __IWMPCdrom_INTERFACE_DEFINED__
+
+/* interface IWMPCdrom */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPCdrom;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("cfab6e98-8730-11d3-b388-00c04f68574b")
+ IWMPCdrom : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_driveSpecifier(
+ /* [retval][out] */ BSTR *pbstrDrive) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_playlist(
+ /* [retval][out] */ IWMPPlaylist **ppPlaylist) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE eject( void) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPCdromVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPCdrom * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPCdrom * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPCdrom * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPCdrom * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPCdrom * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPCdrom * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPCdrom * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_driveSpecifier )(
+ IWMPCdrom * This,
+ /* [retval][out] */ BSTR *pbstrDrive);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playlist )(
+ IWMPCdrom * This,
+ /* [retval][out] */ IWMPPlaylist **ppPlaylist);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *eject )(
+ IWMPCdrom * This);
+
+ END_INTERFACE
+ } IWMPCdromVtbl;
+
+ interface IWMPCdrom
+ {
+ CONST_VTBL struct IWMPCdromVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPCdrom_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPCdrom_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPCdrom_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPCdrom_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPCdrom_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPCdrom_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPCdrom_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPCdrom_get_driveSpecifier(This,pbstrDrive) \
+ (This)->lpVtbl -> get_driveSpecifier(This,pbstrDrive)
+
+#define IWMPCdrom_get_playlist(This,ppPlaylist) \
+ (This)->lpVtbl -> get_playlist(This,ppPlaylist)
+
+#define IWMPCdrom_eject(This) \
+ (This)->lpVtbl -> eject(This)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCdrom_get_driveSpecifier_Proxy(
+ IWMPCdrom * This,
+ /* [retval][out] */ BSTR *pbstrDrive);
+
+
+void __RPC_STUB IWMPCdrom_get_driveSpecifier_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCdrom_get_playlist_Proxy(
+ IWMPCdrom * This,
+ /* [retval][out] */ IWMPPlaylist **ppPlaylist);
+
+
+void __RPC_STUB IWMPCdrom_get_playlist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPCdrom_eject_Proxy(
+ IWMPCdrom * This);
+
+
+void __RPC_STUB IWMPCdrom_eject_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPCdrom_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPCdromCollection_INTERFACE_DEFINED__
+#define __IWMPCdromCollection_INTERFACE_DEFINED__
+
+/* interface IWMPCdromCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPCdromCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("EE4C8FE2-34B2-11d3-A3BF-006097C9B344")
+ IWMPCdromCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_count(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE item(
+ /* [in] */ long lIndex,
+ /* [retval][out] */ IWMPCdrom **ppItem) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getByDriveSpecifier(
+ /* [in] */ BSTR bstrDriveSpecifier,
+ /* [retval][out] */ IWMPCdrom **ppCdrom) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPCdromCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPCdromCollection * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPCdromCollection * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPCdromCollection * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPCdromCollection * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPCdromCollection * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPCdromCollection * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPCdromCollection * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_count )(
+ IWMPCdromCollection * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *item )(
+ IWMPCdromCollection * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ IWMPCdrom **ppItem);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getByDriveSpecifier )(
+ IWMPCdromCollection * This,
+ /* [in] */ BSTR bstrDriveSpecifier,
+ /* [retval][out] */ IWMPCdrom **ppCdrom);
+
+ END_INTERFACE
+ } IWMPCdromCollectionVtbl;
+
+ interface IWMPCdromCollection
+ {
+ CONST_VTBL struct IWMPCdromCollectionVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPCdromCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPCdromCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPCdromCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPCdromCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPCdromCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPCdromCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPCdromCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPCdromCollection_get_count(This,plCount) \
+ (This)->lpVtbl -> get_count(This,plCount)
+
+#define IWMPCdromCollection_item(This,lIndex,ppItem) \
+ (This)->lpVtbl -> item(This,lIndex,ppItem)
+
+#define IWMPCdromCollection_getByDriveSpecifier(This,bstrDriveSpecifier,ppCdrom) \
+ (This)->lpVtbl -> getByDriveSpecifier(This,bstrDriveSpecifier,ppCdrom)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCdromCollection_get_count_Proxy(
+ IWMPCdromCollection * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPCdromCollection_get_count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPCdromCollection_item_Proxy(
+ IWMPCdromCollection * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ IWMPCdrom **ppItem);
+
+
+void __RPC_STUB IWMPCdromCollection_item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPCdromCollection_getByDriveSpecifier_Proxy(
+ IWMPCdromCollection * This,
+ /* [in] */ BSTR bstrDriveSpecifier,
+ /* [retval][out] */ IWMPCdrom **ppCdrom);
+
+
+void __RPC_STUB IWMPCdromCollection_getByDriveSpecifier_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPCdromCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPStringCollection_INTERFACE_DEFINED__
+#define __IWMPStringCollection_INTERFACE_DEFINED__
+
+/* interface IWMPStringCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPStringCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("4a976298-8c0d-11d3-b389-00c04f68574b")
+ IWMPStringCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_count(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE item(
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrString) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPStringCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPStringCollection * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPStringCollection * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPStringCollection * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPStringCollection * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPStringCollection * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPStringCollection * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPStringCollection * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_count )(
+ IWMPStringCollection * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *item )(
+ IWMPStringCollection * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrString);
+
+ END_INTERFACE
+ } IWMPStringCollectionVtbl;
+
+ interface IWMPStringCollection
+ {
+ CONST_VTBL struct IWMPStringCollectionVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPStringCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPStringCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPStringCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPStringCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPStringCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPStringCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPStringCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPStringCollection_get_count(This,plCount) \
+ (This)->lpVtbl -> get_count(This,plCount)
+
+#define IWMPStringCollection_item(This,lIndex,pbstrString) \
+ (This)->lpVtbl -> item(This,lIndex,pbstrString)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPStringCollection_get_count_Proxy(
+ IWMPStringCollection * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPStringCollection_get_count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPStringCollection_item_Proxy(
+ IWMPStringCollection * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrString);
+
+
+void __RPC_STUB IWMPStringCollection_item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPStringCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPMediaCollection_INTERFACE_DEFINED__
+#define __IWMPMediaCollection_INTERFACE_DEFINED__
+
+/* interface IWMPMediaCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPMediaCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("8363BC22-B4B4-4b19-989D-1CD765749DD1")
+ IWMPMediaCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE add(
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPMedia **ppItem) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getAll(
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getByName(
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getByGenre(
+ /* [in] */ BSTR bstrGenre,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getByAuthor(
+ /* [in] */ BSTR bstrAuthor,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getByAlbum(
+ /* [in] */ BSTR bstrAlbum,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getByAttribute(
+ /* [in] */ BSTR bstrAttribute,
+ /* [in] */ BSTR bstrValue,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE remove(
+ /* [in] */ IWMPMedia *pItem,
+ /* [in] */ VARIANT_BOOL varfDeleteFile) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getAttributeStringCollection(
+ /* [in] */ BSTR bstrAttribute,
+ /* [in] */ BSTR bstrMediaType,
+ /* [retval][out] */ IWMPStringCollection **ppStringCollection) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getMediaAtom(
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ long *plAtom) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setDeleted(
+ /* [in] */ IWMPMedia *pItem,
+ /* [in] */ VARIANT_BOOL varfIsDeleted) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE isDeleted(
+ /* [in] */ IWMPMedia *pItem,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsDeleted) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPMediaCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPMediaCollection * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPMediaCollection * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPMediaCollection * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPMediaCollection * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPMediaCollection * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPMediaCollection * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPMediaCollection * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *add )(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPMedia **ppItem);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getAll )(
+ IWMPMediaCollection * This,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getByName )(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getByGenre )(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrGenre,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getByAuthor )(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrAuthor,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getByAlbum )(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrAlbum,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getByAttribute )(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrAttribute,
+ /* [in] */ BSTR bstrValue,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *remove )(
+ IWMPMediaCollection * This,
+ /* [in] */ IWMPMedia *pItem,
+ /* [in] */ VARIANT_BOOL varfDeleteFile);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getAttributeStringCollection )(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrAttribute,
+ /* [in] */ BSTR bstrMediaType,
+ /* [retval][out] */ IWMPStringCollection **ppStringCollection);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMediaAtom )(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ long *plAtom);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setDeleted )(
+ IWMPMediaCollection * This,
+ /* [in] */ IWMPMedia *pItem,
+ /* [in] */ VARIANT_BOOL varfIsDeleted);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *isDeleted )(
+ IWMPMediaCollection * This,
+ /* [in] */ IWMPMedia *pItem,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsDeleted);
+
+ END_INTERFACE
+ } IWMPMediaCollectionVtbl;
+
+ interface IWMPMediaCollection
+ {
+ CONST_VTBL struct IWMPMediaCollectionVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPMediaCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPMediaCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPMediaCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPMediaCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPMediaCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPMediaCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPMediaCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPMediaCollection_add(This,bstrURL,ppItem) \
+ (This)->lpVtbl -> add(This,bstrURL,ppItem)
+
+#define IWMPMediaCollection_getAll(This,ppMediaItems) \
+ (This)->lpVtbl -> getAll(This,ppMediaItems)
+
+#define IWMPMediaCollection_getByName(This,bstrName,ppMediaItems) \
+ (This)->lpVtbl -> getByName(This,bstrName,ppMediaItems)
+
+#define IWMPMediaCollection_getByGenre(This,bstrGenre,ppMediaItems) \
+ (This)->lpVtbl -> getByGenre(This,bstrGenre,ppMediaItems)
+
+#define IWMPMediaCollection_getByAuthor(This,bstrAuthor,ppMediaItems) \
+ (This)->lpVtbl -> getByAuthor(This,bstrAuthor,ppMediaItems)
+
+#define IWMPMediaCollection_getByAlbum(This,bstrAlbum,ppMediaItems) \
+ (This)->lpVtbl -> getByAlbum(This,bstrAlbum,ppMediaItems)
+
+#define IWMPMediaCollection_getByAttribute(This,bstrAttribute,bstrValue,ppMediaItems) \
+ (This)->lpVtbl -> getByAttribute(This,bstrAttribute,bstrValue,ppMediaItems)
+
+#define IWMPMediaCollection_remove(This,pItem,varfDeleteFile) \
+ (This)->lpVtbl -> remove(This,pItem,varfDeleteFile)
+
+#define IWMPMediaCollection_getAttributeStringCollection(This,bstrAttribute,bstrMediaType,ppStringCollection) \
+ (This)->lpVtbl -> getAttributeStringCollection(This,bstrAttribute,bstrMediaType,ppStringCollection)
+
+#define IWMPMediaCollection_getMediaAtom(This,bstrItemName,plAtom) \
+ (This)->lpVtbl -> getMediaAtom(This,bstrItemName,plAtom)
+
+#define IWMPMediaCollection_setDeleted(This,pItem,varfIsDeleted) \
+ (This)->lpVtbl -> setDeleted(This,pItem,varfIsDeleted)
+
+#define IWMPMediaCollection_isDeleted(This,pItem,pvarfIsDeleted) \
+ (This)->lpVtbl -> isDeleted(This,pItem,pvarfIsDeleted)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_add_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPMedia **ppItem);
+
+
+void __RPC_STUB IWMPMediaCollection_add_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_getAll_Proxy(
+ IWMPMediaCollection * This,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+
+void __RPC_STUB IWMPMediaCollection_getAll_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_getByName_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+
+void __RPC_STUB IWMPMediaCollection_getByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_getByGenre_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrGenre,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+
+void __RPC_STUB IWMPMediaCollection_getByGenre_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_getByAuthor_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrAuthor,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+
+void __RPC_STUB IWMPMediaCollection_getByAuthor_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_getByAlbum_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrAlbum,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+
+void __RPC_STUB IWMPMediaCollection_getByAlbum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_getByAttribute_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrAttribute,
+ /* [in] */ BSTR bstrValue,
+ /* [retval][out] */ IWMPPlaylist **ppMediaItems);
+
+
+void __RPC_STUB IWMPMediaCollection_getByAttribute_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_remove_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ IWMPMedia *pItem,
+ /* [in] */ VARIANT_BOOL varfDeleteFile);
+
+
+void __RPC_STUB IWMPMediaCollection_remove_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_getAttributeStringCollection_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrAttribute,
+ /* [in] */ BSTR bstrMediaType,
+ /* [retval][out] */ IWMPStringCollection **ppStringCollection);
+
+
+void __RPC_STUB IWMPMediaCollection_getAttributeStringCollection_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_getMediaAtom_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ long *plAtom);
+
+
+void __RPC_STUB IWMPMediaCollection_getMediaAtom_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_setDeleted_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ IWMPMedia *pItem,
+ /* [in] */ VARIANT_BOOL varfIsDeleted);
+
+
+void __RPC_STUB IWMPMediaCollection_setDeleted_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPMediaCollection_isDeleted_Proxy(
+ IWMPMediaCollection * This,
+ /* [in] */ IWMPMedia *pItem,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsDeleted);
+
+
+void __RPC_STUB IWMPMediaCollection_isDeleted_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPMediaCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlaylistArray_INTERFACE_DEFINED__
+#define __IWMPPlaylistArray_INTERFACE_DEFINED__
+
+/* interface IWMPPlaylistArray */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlaylistArray;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("679409c0-99f7-11d3-9fb7-00105aa620bb")
+ IWMPPlaylistArray : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_count(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE item(
+ /* [in] */ long lIndex,
+ /* [retval][out] */ IWMPPlaylist **ppItem) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlaylistArrayVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlaylistArray * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlaylistArray * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlaylistArray * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPPlaylistArray * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPPlaylistArray * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPPlaylistArray * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPPlaylistArray * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_count )(
+ IWMPPlaylistArray * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *item )(
+ IWMPPlaylistArray * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ IWMPPlaylist **ppItem);
+
+ END_INTERFACE
+ } IWMPPlaylistArrayVtbl;
+
+ interface IWMPPlaylistArray
+ {
+ CONST_VTBL struct IWMPPlaylistArrayVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlaylistArray_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlaylistArray_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlaylistArray_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlaylistArray_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPPlaylistArray_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPPlaylistArray_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPPlaylistArray_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPPlaylistArray_get_count(This,plCount) \
+ (This)->lpVtbl -> get_count(This,plCount)
+
+#define IWMPPlaylistArray_item(This,lIndex,ppItem) \
+ (This)->lpVtbl -> item(This,lIndex,ppItem)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistArray_get_count_Proxy(
+ IWMPPlaylistArray * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPPlaylistArray_get_count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistArray_item_Proxy(
+ IWMPPlaylistArray * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ IWMPPlaylist **ppItem);
+
+
+void __RPC_STUB IWMPPlaylistArray_item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlaylistArray_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlaylistCollection_INTERFACE_DEFINED__
+#define __IWMPPlaylistCollection_INTERFACE_DEFINED__
+
+/* interface IWMPPlaylistCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlaylistCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("10A13217-23A7-439b-B1C0-D847C79B7774")
+ IWMPPlaylistCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE newPlaylist(
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylist **ppItem) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getAll(
+ /* [retval][out] */ IWMPPlaylistArray **ppPlaylistArray) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getByName(
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylistArray **ppPlaylistArray) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE remove(
+ /* [in] */ IWMPPlaylist *pItem) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setDeleted(
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [in] */ VARIANT_BOOL varfIsDeleted) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE isDeleted(
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsDeleted) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE importPlaylist(
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [retval][out] */ IWMPPlaylist **ppImportedItem) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlaylistCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlaylistCollection * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlaylistCollection * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPPlaylistCollection * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *newPlaylist )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylist **ppItem);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getAll )(
+ IWMPPlaylistCollection * This,
+ /* [retval][out] */ IWMPPlaylistArray **ppPlaylistArray);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getByName )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylistArray **ppPlaylistArray);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *remove )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ IWMPPlaylist *pItem);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setDeleted )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [in] */ VARIANT_BOOL varfIsDeleted);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *isDeleted )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsDeleted);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *importPlaylist )(
+ IWMPPlaylistCollection * This,
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [retval][out] */ IWMPPlaylist **ppImportedItem);
+
+ END_INTERFACE
+ } IWMPPlaylistCollectionVtbl;
+
+ interface IWMPPlaylistCollection
+ {
+ CONST_VTBL struct IWMPPlaylistCollectionVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlaylistCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlaylistCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlaylistCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlaylistCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPPlaylistCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPPlaylistCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPPlaylistCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPPlaylistCollection_newPlaylist(This,bstrName,ppItem) \
+ (This)->lpVtbl -> newPlaylist(This,bstrName,ppItem)
+
+#define IWMPPlaylistCollection_getAll(This,ppPlaylistArray) \
+ (This)->lpVtbl -> getAll(This,ppPlaylistArray)
+
+#define IWMPPlaylistCollection_getByName(This,bstrName,ppPlaylistArray) \
+ (This)->lpVtbl -> getByName(This,bstrName,ppPlaylistArray)
+
+#define IWMPPlaylistCollection_remove(This,pItem) \
+ (This)->lpVtbl -> remove(This,pItem)
+
+#define IWMPPlaylistCollection_setDeleted(This,pItem,varfIsDeleted) \
+ (This)->lpVtbl -> setDeleted(This,pItem,varfIsDeleted)
+
+#define IWMPPlaylistCollection_isDeleted(This,pItem,pvarfIsDeleted) \
+ (This)->lpVtbl -> isDeleted(This,pItem,pvarfIsDeleted)
+
+#define IWMPPlaylistCollection_importPlaylist(This,pItem,ppImportedItem) \
+ (This)->lpVtbl -> importPlaylist(This,pItem,ppImportedItem)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistCollection_newPlaylist_Proxy(
+ IWMPPlaylistCollection * This,
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylist **ppItem);
+
+
+void __RPC_STUB IWMPPlaylistCollection_newPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistCollection_getAll_Proxy(
+ IWMPPlaylistCollection * This,
+ /* [retval][out] */ IWMPPlaylistArray **ppPlaylistArray);
+
+
+void __RPC_STUB IWMPPlaylistCollection_getAll_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistCollection_getByName_Proxy(
+ IWMPPlaylistCollection * This,
+ /* [in] */ BSTR bstrName,
+ /* [retval][out] */ IWMPPlaylistArray **ppPlaylistArray);
+
+
+void __RPC_STUB IWMPPlaylistCollection_getByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistCollection_remove_Proxy(
+ IWMPPlaylistCollection * This,
+ /* [in] */ IWMPPlaylist *pItem);
+
+
+void __RPC_STUB IWMPPlaylistCollection_remove_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistCollection_setDeleted_Proxy(
+ IWMPPlaylistCollection * This,
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [in] */ VARIANT_BOOL varfIsDeleted);
+
+
+void __RPC_STUB IWMPPlaylistCollection_setDeleted_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistCollection_isDeleted_Proxy(
+ IWMPPlaylistCollection * This,
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsDeleted);
+
+
+void __RPC_STUB IWMPPlaylistCollection_isDeleted_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlaylistCollection_importPlaylist_Proxy(
+ IWMPPlaylistCollection * This,
+ /* [in] */ IWMPPlaylist *pItem,
+ /* [retval][out] */ IWMPPlaylist **ppImportedItem);
+
+
+void __RPC_STUB IWMPPlaylistCollection_importPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlaylistCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPNetwork_INTERFACE_DEFINED__
+#define __IWMPNetwork_INTERFACE_DEFINED__
+
+/* interface IWMPNetwork */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPNetwork;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("EC21B779-EDEF-462d-BBA4-AD9DDE2B29A7")
+ IWMPNetwork : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_bandWidth(
+ /* [retval][out] */ long *plBandwidth) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_recoveredPackets(
+ /* [retval][out] */ long *plRecoveredPackets) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_sourceProtocol(
+ /* [retval][out] */ BSTR *pbstrSourceProtocol) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_receivedPackets(
+ /* [retval][out] */ long *plReceivedPackets) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_lostPackets(
+ /* [retval][out] */ long *plLostPackets) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_receptionQuality(
+ /* [retval][out] */ long *plReceptionQuality) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_bufferingCount(
+ /* [retval][out] */ long *plBufferingCount) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_bufferingProgress(
+ /* [retval][out] */ long *plBufferingProgress) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_bufferingTime(
+ /* [retval][out] */ long *plBufferingTime) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_bufferingTime(
+ /* [in] */ long lBufferingTime) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_frameRate(
+ /* [retval][out] */ long *plFrameRate) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_maxBitRate(
+ /* [retval][out] */ long *plBitRate) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_bitRate(
+ /* [retval][out] */ long *plBitRate) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getProxySettings(
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ long *plProxySetting) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setProxySettings(
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ long lProxySetting) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getProxyName(
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ BSTR *pbstrProxyName) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setProxyName(
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ BSTR bstrProxyName) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getProxyPort(
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ long *lProxyPort) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setProxyPort(
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ long lProxyPort) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getProxyExceptionList(
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ BSTR *pbstrExceptionList) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setProxyExceptionList(
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ BSTR pbstrExceptionList) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getProxyBypassForLocal(
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ VARIANT_BOOL *pfBypassForLocal) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE setProxyBypassForLocal(
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ VARIANT_BOOL fBypassForLocal) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_maxBandwidth(
+ /* [retval][out] */ long *lMaxBandwidth) = 0;
+
+ virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_maxBandwidth(
+ /* [in] */ long lMaxBandwidth) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_downloadProgress(
+ /* [retval][out] */ long *plDownloadProgress) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_encodedFrameRate(
+ /* [retval][out] */ long *plFrameRate) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_framesSkipped(
+ /* [retval][out] */ long *plFrames) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPNetworkVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPNetwork * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPNetwork * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPNetwork * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPNetwork * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPNetwork * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPNetwork * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPNetwork * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_bandWidth )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBandwidth);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_recoveredPackets )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plRecoveredPackets);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_sourceProtocol )(
+ IWMPNetwork * This,
+ /* [retval][out] */ BSTR *pbstrSourceProtocol);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_receivedPackets )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plReceivedPackets);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_lostPackets )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plLostPackets);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_receptionQuality )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plReceptionQuality);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_bufferingCount )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBufferingCount);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_bufferingProgress )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBufferingProgress);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_bufferingTime )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBufferingTime);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_bufferingTime )(
+ IWMPNetwork * This,
+ /* [in] */ long lBufferingTime);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_frameRate )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plFrameRate);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_maxBitRate )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBitRate);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_bitRate )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBitRate);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getProxySettings )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ long *plProxySetting);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setProxySettings )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ long lProxySetting);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getProxyName )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ BSTR *pbstrProxyName);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setProxyName )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ BSTR bstrProxyName);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getProxyPort )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ long *lProxyPort);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setProxyPort )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ long lProxyPort);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getProxyExceptionList )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ BSTR *pbstrExceptionList);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setProxyExceptionList )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ BSTR pbstrExceptionList);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getProxyBypassForLocal )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ VARIANT_BOOL *pfBypassForLocal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setProxyBypassForLocal )(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ VARIANT_BOOL fBypassForLocal);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_maxBandwidth )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *lMaxBandwidth);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_maxBandwidth )(
+ IWMPNetwork * This,
+ /* [in] */ long lMaxBandwidth);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_downloadProgress )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plDownloadProgress);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_encodedFrameRate )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plFrameRate);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_framesSkipped )(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plFrames);
+
+ END_INTERFACE
+ } IWMPNetworkVtbl;
+
+ interface IWMPNetwork
+ {
+ CONST_VTBL struct IWMPNetworkVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPNetwork_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPNetwork_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPNetwork_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPNetwork_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPNetwork_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPNetwork_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPNetwork_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPNetwork_get_bandWidth(This,plBandwidth) \
+ (This)->lpVtbl -> get_bandWidth(This,plBandwidth)
+
+#define IWMPNetwork_get_recoveredPackets(This,plRecoveredPackets) \
+ (This)->lpVtbl -> get_recoveredPackets(This,plRecoveredPackets)
+
+#define IWMPNetwork_get_sourceProtocol(This,pbstrSourceProtocol) \
+ (This)->lpVtbl -> get_sourceProtocol(This,pbstrSourceProtocol)
+
+#define IWMPNetwork_get_receivedPackets(This,plReceivedPackets) \
+ (This)->lpVtbl -> get_receivedPackets(This,plReceivedPackets)
+
+#define IWMPNetwork_get_lostPackets(This,plLostPackets) \
+ (This)->lpVtbl -> get_lostPackets(This,plLostPackets)
+
+#define IWMPNetwork_get_receptionQuality(This,plReceptionQuality) \
+ (This)->lpVtbl -> get_receptionQuality(This,plReceptionQuality)
+
+#define IWMPNetwork_get_bufferingCount(This,plBufferingCount) \
+ (This)->lpVtbl -> get_bufferingCount(This,plBufferingCount)
+
+#define IWMPNetwork_get_bufferingProgress(This,plBufferingProgress) \
+ (This)->lpVtbl -> get_bufferingProgress(This,plBufferingProgress)
+
+#define IWMPNetwork_get_bufferingTime(This,plBufferingTime) \
+ (This)->lpVtbl -> get_bufferingTime(This,plBufferingTime)
+
+#define IWMPNetwork_put_bufferingTime(This,lBufferingTime) \
+ (This)->lpVtbl -> put_bufferingTime(This,lBufferingTime)
+
+#define IWMPNetwork_get_frameRate(This,plFrameRate) \
+ (This)->lpVtbl -> get_frameRate(This,plFrameRate)
+
+#define IWMPNetwork_get_maxBitRate(This,plBitRate) \
+ (This)->lpVtbl -> get_maxBitRate(This,plBitRate)
+
+#define IWMPNetwork_get_bitRate(This,plBitRate) \
+ (This)->lpVtbl -> get_bitRate(This,plBitRate)
+
+#define IWMPNetwork_getProxySettings(This,bstrProtocol,plProxySetting) \
+ (This)->lpVtbl -> getProxySettings(This,bstrProtocol,plProxySetting)
+
+#define IWMPNetwork_setProxySettings(This,bstrProtocol,lProxySetting) \
+ (This)->lpVtbl -> setProxySettings(This,bstrProtocol,lProxySetting)
+
+#define IWMPNetwork_getProxyName(This,bstrProtocol,pbstrProxyName) \
+ (This)->lpVtbl -> getProxyName(This,bstrProtocol,pbstrProxyName)
+
+#define IWMPNetwork_setProxyName(This,bstrProtocol,bstrProxyName) \
+ (This)->lpVtbl -> setProxyName(This,bstrProtocol,bstrProxyName)
+
+#define IWMPNetwork_getProxyPort(This,bstrProtocol,lProxyPort) \
+ (This)->lpVtbl -> getProxyPort(This,bstrProtocol,lProxyPort)
+
+#define IWMPNetwork_setProxyPort(This,bstrProtocol,lProxyPort) \
+ (This)->lpVtbl -> setProxyPort(This,bstrProtocol,lProxyPort)
+
+#define IWMPNetwork_getProxyExceptionList(This,bstrProtocol,pbstrExceptionList) \
+ (This)->lpVtbl -> getProxyExceptionList(This,bstrProtocol,pbstrExceptionList)
+
+#define IWMPNetwork_setProxyExceptionList(This,bstrProtocol,pbstrExceptionList) \
+ (This)->lpVtbl -> setProxyExceptionList(This,bstrProtocol,pbstrExceptionList)
+
+#define IWMPNetwork_getProxyBypassForLocal(This,bstrProtocol,pfBypassForLocal) \
+ (This)->lpVtbl -> getProxyBypassForLocal(This,bstrProtocol,pfBypassForLocal)
+
+#define IWMPNetwork_setProxyBypassForLocal(This,bstrProtocol,fBypassForLocal) \
+ (This)->lpVtbl -> setProxyBypassForLocal(This,bstrProtocol,fBypassForLocal)
+
+#define IWMPNetwork_get_maxBandwidth(This,lMaxBandwidth) \
+ (This)->lpVtbl -> get_maxBandwidth(This,lMaxBandwidth)
+
+#define IWMPNetwork_put_maxBandwidth(This,lMaxBandwidth) \
+ (This)->lpVtbl -> put_maxBandwidth(This,lMaxBandwidth)
+
+#define IWMPNetwork_get_downloadProgress(This,plDownloadProgress) \
+ (This)->lpVtbl -> get_downloadProgress(This,plDownloadProgress)
+
+#define IWMPNetwork_get_encodedFrameRate(This,plFrameRate) \
+ (This)->lpVtbl -> get_encodedFrameRate(This,plFrameRate)
+
+#define IWMPNetwork_get_framesSkipped(This,plFrames) \
+ (This)->lpVtbl -> get_framesSkipped(This,plFrames)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_bandWidth_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBandwidth);
+
+
+void __RPC_STUB IWMPNetwork_get_bandWidth_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_recoveredPackets_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plRecoveredPackets);
+
+
+void __RPC_STUB IWMPNetwork_get_recoveredPackets_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_sourceProtocol_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ BSTR *pbstrSourceProtocol);
+
+
+void __RPC_STUB IWMPNetwork_get_sourceProtocol_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_receivedPackets_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plReceivedPackets);
+
+
+void __RPC_STUB IWMPNetwork_get_receivedPackets_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_lostPackets_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plLostPackets);
+
+
+void __RPC_STUB IWMPNetwork_get_lostPackets_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_receptionQuality_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plReceptionQuality);
+
+
+void __RPC_STUB IWMPNetwork_get_receptionQuality_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_bufferingCount_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBufferingCount);
+
+
+void __RPC_STUB IWMPNetwork_get_bufferingCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_bufferingProgress_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBufferingProgress);
+
+
+void __RPC_STUB IWMPNetwork_get_bufferingProgress_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_bufferingTime_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBufferingTime);
+
+
+void __RPC_STUB IWMPNetwork_get_bufferingTime_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_put_bufferingTime_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ long lBufferingTime);
+
+
+void __RPC_STUB IWMPNetwork_put_bufferingTime_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_frameRate_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plFrameRate);
+
+
+void __RPC_STUB IWMPNetwork_get_frameRate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_maxBitRate_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBitRate);
+
+
+void __RPC_STUB IWMPNetwork_get_maxBitRate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_bitRate_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plBitRate);
+
+
+void __RPC_STUB IWMPNetwork_get_bitRate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_getProxySettings_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ long *plProxySetting);
+
+
+void __RPC_STUB IWMPNetwork_getProxySettings_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_setProxySettings_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ long lProxySetting);
+
+
+void __RPC_STUB IWMPNetwork_setProxySettings_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_getProxyName_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ BSTR *pbstrProxyName);
+
+
+void __RPC_STUB IWMPNetwork_getProxyName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_setProxyName_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ BSTR bstrProxyName);
+
+
+void __RPC_STUB IWMPNetwork_setProxyName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_getProxyPort_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ long *lProxyPort);
+
+
+void __RPC_STUB IWMPNetwork_getProxyPort_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_setProxyPort_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ long lProxyPort);
+
+
+void __RPC_STUB IWMPNetwork_setProxyPort_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_getProxyExceptionList_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ BSTR *pbstrExceptionList);
+
+
+void __RPC_STUB IWMPNetwork_getProxyExceptionList_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_setProxyExceptionList_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ BSTR pbstrExceptionList);
+
+
+void __RPC_STUB IWMPNetwork_setProxyExceptionList_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_getProxyBypassForLocal_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [retval][out] */ VARIANT_BOOL *pfBypassForLocal);
+
+
+void __RPC_STUB IWMPNetwork_getProxyBypassForLocal_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_setProxyBypassForLocal_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ BSTR bstrProtocol,
+ /* [in] */ VARIANT_BOOL fBypassForLocal);
+
+
+void __RPC_STUB IWMPNetwork_setProxyBypassForLocal_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_maxBandwidth_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *lMaxBandwidth);
+
+
+void __RPC_STUB IWMPNetwork_get_maxBandwidth_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propput][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_put_maxBandwidth_Proxy(
+ IWMPNetwork * This,
+ /* [in] */ long lMaxBandwidth);
+
+
+void __RPC_STUB IWMPNetwork_put_maxBandwidth_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_downloadProgress_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plDownloadProgress);
+
+
+void __RPC_STUB IWMPNetwork_get_downloadProgress_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_encodedFrameRate_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plFrameRate);
+
+
+void __RPC_STUB IWMPNetwork_get_encodedFrameRate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPNetwork_get_framesSkipped_Proxy(
+ IWMPNetwork * This,
+ /* [retval][out] */ long *plFrames);
+
+
+void __RPC_STUB IWMPNetwork_get_framesSkipped_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPNetwork_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPCore_INTERFACE_DEFINED__
+#define __IWMPCore_INTERFACE_DEFINED__
+
+/* interface IWMPCore */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPCore;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("D84CCA99-CCE2-11d2-9ECC-0000F8085981")
+ IWMPCore : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE close( void) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_URL(
+ /* [retval][out] */ BSTR *pbstrURL) = 0;
+
+ virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_URL(
+ /* [in] */ BSTR bstrURL) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_openState(
+ /* [retval][out] */ WMPOpenState *pwmpos) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_playState(
+ /* [retval][out] */ WMPPlayState *pwmpps) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_controls(
+ /* [retval][out] */ IWMPControls **ppControl) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_settings(
+ /* [retval][out] */ IWMPSettings **ppSettings) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentMedia(
+ /* [retval][out] */ IWMPMedia **ppMedia) = 0;
+
+ virtual /* [propput][id] */ HRESULT STDMETHODCALLTYPE put_currentMedia(
+ /* [in] */ IWMPMedia *pMedia) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_mediaCollection(
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_playlistCollection(
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_versionInfo(
+ /* [retval][out] */ BSTR *pbstrVersionInfo) = 0;
+
+ virtual /* [id] */ HRESULT STDMETHODCALLTYPE launchURL(
+ /* [in] */ BSTR bstrURL) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_network(
+ /* [retval][out] */ IWMPNetwork **ppQNI) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentPlaylist(
+ /* [retval][out] */ IWMPPlaylist **ppPL) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_currentPlaylist(
+ /* [in] */ IWMPPlaylist *pPL) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_cdromCollection(
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_closedCaption(
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_isOnline(
+ /* [retval][out] */ VARIANT_BOOL *pfOnline) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_error(
+ /* [retval][out] */ IWMPError **ppError) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_status(
+ /* [retval][out] */ BSTR *pbstrStatus) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPCoreVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPCore * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPCore * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPCore * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPCore * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPCore * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPCore * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPCore * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *close )(
+ IWMPCore * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URL )(
+ IWMPCore * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_URL )(
+ IWMPCore * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_openState )(
+ IWMPCore * This,
+ /* [retval][out] */ WMPOpenState *pwmpos);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playState )(
+ IWMPCore * This,
+ /* [retval][out] */ WMPPlayState *pwmpps);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_controls )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPControls **ppControl);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_settings )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPSettings **ppSettings);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMedia )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMedia )(
+ IWMPCore * This,
+ /* [in] */ IWMPMedia *pMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mediaCollection )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playlistCollection )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_versionInfo )(
+ IWMPCore * This,
+ /* [retval][out] */ BSTR *pbstrVersionInfo);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *launchURL )(
+ IWMPCore * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_network )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPNetwork **ppQNI);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPlaylist )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPPlaylist **ppPL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPlaylist )(
+ IWMPCore * This,
+ /* [in] */ IWMPPlaylist *pPL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_cdromCollection )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_closedCaption )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isOnline )(
+ IWMPCore * This,
+ /* [retval][out] */ VARIANT_BOOL *pfOnline);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPError **ppError);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_status )(
+ IWMPCore * This,
+ /* [retval][out] */ BSTR *pbstrStatus);
+
+ END_INTERFACE
+ } IWMPCoreVtbl;
+
+ interface IWMPCore
+ {
+ CONST_VTBL struct IWMPCoreVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPCore_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPCore_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPCore_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPCore_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPCore_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPCore_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPCore_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPCore_close(This) \
+ (This)->lpVtbl -> close(This)
+
+#define IWMPCore_get_URL(This,pbstrURL) \
+ (This)->lpVtbl -> get_URL(This,pbstrURL)
+
+#define IWMPCore_put_URL(This,bstrURL) \
+ (This)->lpVtbl -> put_URL(This,bstrURL)
+
+#define IWMPCore_get_openState(This,pwmpos) \
+ (This)->lpVtbl -> get_openState(This,pwmpos)
+
+#define IWMPCore_get_playState(This,pwmpps) \
+ (This)->lpVtbl -> get_playState(This,pwmpps)
+
+#define IWMPCore_get_controls(This,ppControl) \
+ (This)->lpVtbl -> get_controls(This,ppControl)
+
+#define IWMPCore_get_settings(This,ppSettings) \
+ (This)->lpVtbl -> get_settings(This,ppSettings)
+
+#define IWMPCore_get_currentMedia(This,ppMedia) \
+ (This)->lpVtbl -> get_currentMedia(This,ppMedia)
+
+#define IWMPCore_put_currentMedia(This,pMedia) \
+ (This)->lpVtbl -> put_currentMedia(This,pMedia)
+
+#define IWMPCore_get_mediaCollection(This,ppMediaCollection) \
+ (This)->lpVtbl -> get_mediaCollection(This,ppMediaCollection)
+
+#define IWMPCore_get_playlistCollection(This,ppPlaylistCollection) \
+ (This)->lpVtbl -> get_playlistCollection(This,ppPlaylistCollection)
+
+#define IWMPCore_get_versionInfo(This,pbstrVersionInfo) \
+ (This)->lpVtbl -> get_versionInfo(This,pbstrVersionInfo)
+
+#define IWMPCore_launchURL(This,bstrURL) \
+ (This)->lpVtbl -> launchURL(This,bstrURL)
+
+#define IWMPCore_get_network(This,ppQNI) \
+ (This)->lpVtbl -> get_network(This,ppQNI)
+
+#define IWMPCore_get_currentPlaylist(This,ppPL) \
+ (This)->lpVtbl -> get_currentPlaylist(This,ppPL)
+
+#define IWMPCore_put_currentPlaylist(This,pPL) \
+ (This)->lpVtbl -> put_currentPlaylist(This,pPL)
+
+#define IWMPCore_get_cdromCollection(This,ppCdromCollection) \
+ (This)->lpVtbl -> get_cdromCollection(This,ppCdromCollection)
+
+#define IWMPCore_get_closedCaption(This,ppClosedCaption) \
+ (This)->lpVtbl -> get_closedCaption(This,ppClosedCaption)
+
+#define IWMPCore_get_isOnline(This,pfOnline) \
+ (This)->lpVtbl -> get_isOnline(This,pfOnline)
+
+#define IWMPCore_get_error(This,ppError) \
+ (This)->lpVtbl -> get_error(This,ppError)
+
+#define IWMPCore_get_status(This,pbstrStatus) \
+ (This)->lpVtbl -> get_status(This,pbstrStatus)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_close_Proxy(
+ IWMPCore * This);
+
+
+void __RPC_STUB IWMPCore_close_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_URL_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+
+void __RPC_STUB IWMPCore_get_URL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propput][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_put_URL_Proxy(
+ IWMPCore * This,
+ /* [in] */ BSTR bstrURL);
+
+
+void __RPC_STUB IWMPCore_put_URL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_openState_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ WMPOpenState *pwmpos);
+
+
+void __RPC_STUB IWMPCore_get_openState_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_playState_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ WMPPlayState *pwmpps);
+
+
+void __RPC_STUB IWMPCore_get_playState_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_controls_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPControls **ppControl);
+
+
+void __RPC_STUB IWMPCore_get_controls_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_settings_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPSettings **ppSettings);
+
+
+void __RPC_STUB IWMPCore_get_settings_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_currentMedia_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+
+void __RPC_STUB IWMPCore_get_currentMedia_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propput][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_put_currentMedia_Proxy(
+ IWMPCore * This,
+ /* [in] */ IWMPMedia *pMedia);
+
+
+void __RPC_STUB IWMPCore_put_currentMedia_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_mediaCollection_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection);
+
+
+void __RPC_STUB IWMPCore_get_mediaCollection_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_playlistCollection_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection);
+
+
+void __RPC_STUB IWMPCore_get_playlistCollection_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_versionInfo_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ BSTR *pbstrVersionInfo);
+
+
+void __RPC_STUB IWMPCore_get_versionInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [id] */ HRESULT STDMETHODCALLTYPE IWMPCore_launchURL_Proxy(
+ IWMPCore * This,
+ /* [in] */ BSTR bstrURL);
+
+
+void __RPC_STUB IWMPCore_launchURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_network_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPNetwork **ppQNI);
+
+
+void __RPC_STUB IWMPCore_get_network_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_currentPlaylist_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPPlaylist **ppPL);
+
+
+void __RPC_STUB IWMPCore_get_currentPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_put_currentPlaylist_Proxy(
+ IWMPCore * This,
+ /* [in] */ IWMPPlaylist *pPL);
+
+
+void __RPC_STUB IWMPCore_put_currentPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_cdromCollection_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection);
+
+
+void __RPC_STUB IWMPCore_get_cdromCollection_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_closedCaption_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption);
+
+
+void __RPC_STUB IWMPCore_get_closedCaption_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_isOnline_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ VARIANT_BOOL *pfOnline);
+
+
+void __RPC_STUB IWMPCore_get_isOnline_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_error_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ IWMPError **ppError);
+
+
+void __RPC_STUB IWMPCore_get_error_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore_get_status_Proxy(
+ IWMPCore * This,
+ /* [retval][out] */ BSTR *pbstrStatus);
+
+
+void __RPC_STUB IWMPCore_get_status_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPCore_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlayer_INTERFACE_DEFINED__
+#define __IWMPPlayer_INTERFACE_DEFINED__
+
+/* interface IWMPPlayer */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlayer;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6BF52A4F-394A-11d3-B153-00C04F79FAA6")
+ IWMPPlayer : public IWMPCore
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enabled(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enabled(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_fullScreen(
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_fullScreen(
+ VARIANT_BOOL bFullScreen) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enableContextMenu(
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enableContextMenu(
+ VARIANT_BOOL bEnableContextMenu) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_uiMode(
+ /* [in] */ BSTR bstrMode) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_uiMode(
+ /* [retval][out] */ BSTR *pbstrMode) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlayerVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlayer * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlayer * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlayer * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPPlayer * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPPlayer * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPPlayer * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPPlayer * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *close )(
+ IWMPPlayer * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URL )(
+ IWMPPlayer * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_URL )(
+ IWMPPlayer * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_openState )(
+ IWMPPlayer * This,
+ /* [retval][out] */ WMPOpenState *pwmpos);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playState )(
+ IWMPPlayer * This,
+ /* [retval][out] */ WMPPlayState *pwmpps);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_controls )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPControls **ppControl);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_settings )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPSettings **ppSettings);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMedia )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMedia )(
+ IWMPPlayer * This,
+ /* [in] */ IWMPMedia *pMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mediaCollection )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playlistCollection )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_versionInfo )(
+ IWMPPlayer * This,
+ /* [retval][out] */ BSTR *pbstrVersionInfo);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *launchURL )(
+ IWMPPlayer * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_network )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPNetwork **ppQNI);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPlaylist )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPPlaylist **ppPL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPlaylist )(
+ IWMPPlayer * This,
+ /* [in] */ IWMPPlaylist *pPL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_cdromCollection )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_closedCaption )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isOnline )(
+ IWMPPlayer * This,
+ /* [retval][out] */ VARIANT_BOOL *pfOnline);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPPlayer * This,
+ /* [retval][out] */ IWMPError **ppError);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_status )(
+ IWMPPlayer * This,
+ /* [retval][out] */ BSTR *pbstrStatus);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enabled )(
+ IWMPPlayer * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enabled )(
+ IWMPPlayer * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_fullScreen )(
+ IWMPPlayer * This,
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_fullScreen )(
+ IWMPPlayer * This,
+ VARIANT_BOOL bFullScreen);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enableContextMenu )(
+ IWMPPlayer * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enableContextMenu )(
+ IWMPPlayer * This,
+ VARIANT_BOOL bEnableContextMenu);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_uiMode )(
+ IWMPPlayer * This,
+ /* [in] */ BSTR bstrMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_uiMode )(
+ IWMPPlayer * This,
+ /* [retval][out] */ BSTR *pbstrMode);
+
+ END_INTERFACE
+ } IWMPPlayerVtbl;
+
+ interface IWMPPlayer
+ {
+ CONST_VTBL struct IWMPPlayerVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlayer_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlayer_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlayer_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlayer_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPPlayer_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPPlayer_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPPlayer_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPPlayer_close(This) \
+ (This)->lpVtbl -> close(This)
+
+#define IWMPPlayer_get_URL(This,pbstrURL) \
+ (This)->lpVtbl -> get_URL(This,pbstrURL)
+
+#define IWMPPlayer_put_URL(This,bstrURL) \
+ (This)->lpVtbl -> put_URL(This,bstrURL)
+
+#define IWMPPlayer_get_openState(This,pwmpos) \
+ (This)->lpVtbl -> get_openState(This,pwmpos)
+
+#define IWMPPlayer_get_playState(This,pwmpps) \
+ (This)->lpVtbl -> get_playState(This,pwmpps)
+
+#define IWMPPlayer_get_controls(This,ppControl) \
+ (This)->lpVtbl -> get_controls(This,ppControl)
+
+#define IWMPPlayer_get_settings(This,ppSettings) \
+ (This)->lpVtbl -> get_settings(This,ppSettings)
+
+#define IWMPPlayer_get_currentMedia(This,ppMedia) \
+ (This)->lpVtbl -> get_currentMedia(This,ppMedia)
+
+#define IWMPPlayer_put_currentMedia(This,pMedia) \
+ (This)->lpVtbl -> put_currentMedia(This,pMedia)
+
+#define IWMPPlayer_get_mediaCollection(This,ppMediaCollection) \
+ (This)->lpVtbl -> get_mediaCollection(This,ppMediaCollection)
+
+#define IWMPPlayer_get_playlistCollection(This,ppPlaylistCollection) \
+ (This)->lpVtbl -> get_playlistCollection(This,ppPlaylistCollection)
+
+#define IWMPPlayer_get_versionInfo(This,pbstrVersionInfo) \
+ (This)->lpVtbl -> get_versionInfo(This,pbstrVersionInfo)
+
+#define IWMPPlayer_launchURL(This,bstrURL) \
+ (This)->lpVtbl -> launchURL(This,bstrURL)
+
+#define IWMPPlayer_get_network(This,ppQNI) \
+ (This)->lpVtbl -> get_network(This,ppQNI)
+
+#define IWMPPlayer_get_currentPlaylist(This,ppPL) \
+ (This)->lpVtbl -> get_currentPlaylist(This,ppPL)
+
+#define IWMPPlayer_put_currentPlaylist(This,pPL) \
+ (This)->lpVtbl -> put_currentPlaylist(This,pPL)
+
+#define IWMPPlayer_get_cdromCollection(This,ppCdromCollection) \
+ (This)->lpVtbl -> get_cdromCollection(This,ppCdromCollection)
+
+#define IWMPPlayer_get_closedCaption(This,ppClosedCaption) \
+ (This)->lpVtbl -> get_closedCaption(This,ppClosedCaption)
+
+#define IWMPPlayer_get_isOnline(This,pfOnline) \
+ (This)->lpVtbl -> get_isOnline(This,pfOnline)
+
+#define IWMPPlayer_get_error(This,ppError) \
+ (This)->lpVtbl -> get_error(This,ppError)
+
+#define IWMPPlayer_get_status(This,pbstrStatus) \
+ (This)->lpVtbl -> get_status(This,pbstrStatus)
+
+
+#define IWMPPlayer_get_enabled(This,pbEnabled) \
+ (This)->lpVtbl -> get_enabled(This,pbEnabled)
+
+#define IWMPPlayer_put_enabled(This,bEnabled) \
+ (This)->lpVtbl -> put_enabled(This,bEnabled)
+
+#define IWMPPlayer_get_fullScreen(This,pbFullScreen) \
+ (This)->lpVtbl -> get_fullScreen(This,pbFullScreen)
+
+#define IWMPPlayer_put_fullScreen(This,bFullScreen) \
+ (This)->lpVtbl -> put_fullScreen(This,bFullScreen)
+
+#define IWMPPlayer_get_enableContextMenu(This,pbEnableContextMenu) \
+ (This)->lpVtbl -> get_enableContextMenu(This,pbEnableContextMenu)
+
+#define IWMPPlayer_put_enableContextMenu(This,bEnableContextMenu) \
+ (This)->lpVtbl -> put_enableContextMenu(This,bEnableContextMenu)
+
+#define IWMPPlayer_put_uiMode(This,bstrMode) \
+ (This)->lpVtbl -> put_uiMode(This,bstrMode)
+
+#define IWMPPlayer_get_uiMode(This,pbstrMode) \
+ (This)->lpVtbl -> get_uiMode(This,pbstrMode)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer_get_enabled_Proxy(
+ IWMPPlayer * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer_get_enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer_put_enabled_Proxy(
+ IWMPPlayer * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer_put_enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer_get_fullScreen_Proxy(
+ IWMPPlayer * This,
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen);
+
+
+void __RPC_STUB IWMPPlayer_get_fullScreen_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer_put_fullScreen_Proxy(
+ IWMPPlayer * This,
+ VARIANT_BOOL bFullScreen);
+
+
+void __RPC_STUB IWMPPlayer_put_fullScreen_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer_get_enableContextMenu_Proxy(
+ IWMPPlayer * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu);
+
+
+void __RPC_STUB IWMPPlayer_get_enableContextMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer_put_enableContextMenu_Proxy(
+ IWMPPlayer * This,
+ VARIANT_BOOL bEnableContextMenu);
+
+
+void __RPC_STUB IWMPPlayer_put_enableContextMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer_put_uiMode_Proxy(
+ IWMPPlayer * This,
+ /* [in] */ BSTR bstrMode);
+
+
+void __RPC_STUB IWMPPlayer_put_uiMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer_get_uiMode_Proxy(
+ IWMPPlayer * This,
+ /* [retval][out] */ BSTR *pbstrMode);
+
+
+void __RPC_STUB IWMPPlayer_get_uiMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlayer_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlayer2_INTERFACE_DEFINED__
+#define __IWMPPlayer2_INTERFACE_DEFINED__
+
+/* interface IWMPPlayer2 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlayer2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("0E6B01D1-D407-4c85-BF5F-1C01F6150280")
+ IWMPPlayer2 : public IWMPCore
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enabled(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enabled(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_fullScreen(
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_fullScreen(
+ VARIANT_BOOL bFullScreen) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enableContextMenu(
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enableContextMenu(
+ VARIANT_BOOL bEnableContextMenu) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_uiMode(
+ /* [in] */ BSTR bstrMode) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_uiMode(
+ /* [retval][out] */ BSTR *pbstrMode) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_stretchToFit(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_stretchToFit(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_windowlessVideo(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_windowlessVideo(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlayer2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlayer2 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlayer2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlayer2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPPlayer2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPPlayer2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPPlayer2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPPlayer2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *close )(
+ IWMPPlayer2 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URL )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_URL )(
+ IWMPPlayer2 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_openState )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ WMPOpenState *pwmpos);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playState )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ WMPPlayState *pwmpps);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_controls )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPControls **ppControl);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_settings )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPSettings **ppSettings);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMedia )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMedia )(
+ IWMPPlayer2 * This,
+ /* [in] */ IWMPMedia *pMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mediaCollection )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playlistCollection )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_versionInfo )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ BSTR *pbstrVersionInfo);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *launchURL )(
+ IWMPPlayer2 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_network )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPNetwork **ppQNI);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPlaylist )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPPlaylist **ppPL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPlaylist )(
+ IWMPPlayer2 * This,
+ /* [in] */ IWMPPlaylist *pPL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_cdromCollection )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_closedCaption )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isOnline )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfOnline);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ IWMPError **ppError);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_status )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ BSTR *pbstrStatus);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enabled )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enabled )(
+ IWMPPlayer2 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_fullScreen )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_fullScreen )(
+ IWMPPlayer2 * This,
+ VARIANT_BOOL bFullScreen);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enableContextMenu )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enableContextMenu )(
+ IWMPPlayer2 * This,
+ VARIANT_BOOL bEnableContextMenu);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_uiMode )(
+ IWMPPlayer2 * This,
+ /* [in] */ BSTR bstrMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_uiMode )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ BSTR *pbstrMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_stretchToFit )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_stretchToFit )(
+ IWMPPlayer2 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_windowlessVideo )(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_windowlessVideo )(
+ IWMPPlayer2 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ END_INTERFACE
+ } IWMPPlayer2Vtbl;
+
+ interface IWMPPlayer2
+ {
+ CONST_VTBL struct IWMPPlayer2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlayer2_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlayer2_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlayer2_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlayer2_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPPlayer2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPPlayer2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPPlayer2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPPlayer2_close(This) \
+ (This)->lpVtbl -> close(This)
+
+#define IWMPPlayer2_get_URL(This,pbstrURL) \
+ (This)->lpVtbl -> get_URL(This,pbstrURL)
+
+#define IWMPPlayer2_put_URL(This,bstrURL) \
+ (This)->lpVtbl -> put_URL(This,bstrURL)
+
+#define IWMPPlayer2_get_openState(This,pwmpos) \
+ (This)->lpVtbl -> get_openState(This,pwmpos)
+
+#define IWMPPlayer2_get_playState(This,pwmpps) \
+ (This)->lpVtbl -> get_playState(This,pwmpps)
+
+#define IWMPPlayer2_get_controls(This,ppControl) \
+ (This)->lpVtbl -> get_controls(This,ppControl)
+
+#define IWMPPlayer2_get_settings(This,ppSettings) \
+ (This)->lpVtbl -> get_settings(This,ppSettings)
+
+#define IWMPPlayer2_get_currentMedia(This,ppMedia) \
+ (This)->lpVtbl -> get_currentMedia(This,ppMedia)
+
+#define IWMPPlayer2_put_currentMedia(This,pMedia) \
+ (This)->lpVtbl -> put_currentMedia(This,pMedia)
+
+#define IWMPPlayer2_get_mediaCollection(This,ppMediaCollection) \
+ (This)->lpVtbl -> get_mediaCollection(This,ppMediaCollection)
+
+#define IWMPPlayer2_get_playlistCollection(This,ppPlaylistCollection) \
+ (This)->lpVtbl -> get_playlistCollection(This,ppPlaylistCollection)
+
+#define IWMPPlayer2_get_versionInfo(This,pbstrVersionInfo) \
+ (This)->lpVtbl -> get_versionInfo(This,pbstrVersionInfo)
+
+#define IWMPPlayer2_launchURL(This,bstrURL) \
+ (This)->lpVtbl -> launchURL(This,bstrURL)
+
+#define IWMPPlayer2_get_network(This,ppQNI) \
+ (This)->lpVtbl -> get_network(This,ppQNI)
+
+#define IWMPPlayer2_get_currentPlaylist(This,ppPL) \
+ (This)->lpVtbl -> get_currentPlaylist(This,ppPL)
+
+#define IWMPPlayer2_put_currentPlaylist(This,pPL) \
+ (This)->lpVtbl -> put_currentPlaylist(This,pPL)
+
+#define IWMPPlayer2_get_cdromCollection(This,ppCdromCollection) \
+ (This)->lpVtbl -> get_cdromCollection(This,ppCdromCollection)
+
+#define IWMPPlayer2_get_closedCaption(This,ppClosedCaption) \
+ (This)->lpVtbl -> get_closedCaption(This,ppClosedCaption)
+
+#define IWMPPlayer2_get_isOnline(This,pfOnline) \
+ (This)->lpVtbl -> get_isOnline(This,pfOnline)
+
+#define IWMPPlayer2_get_error(This,ppError) \
+ (This)->lpVtbl -> get_error(This,ppError)
+
+#define IWMPPlayer2_get_status(This,pbstrStatus) \
+ (This)->lpVtbl -> get_status(This,pbstrStatus)
+
+
+#define IWMPPlayer2_get_enabled(This,pbEnabled) \
+ (This)->lpVtbl -> get_enabled(This,pbEnabled)
+
+#define IWMPPlayer2_put_enabled(This,bEnabled) \
+ (This)->lpVtbl -> put_enabled(This,bEnabled)
+
+#define IWMPPlayer2_get_fullScreen(This,pbFullScreen) \
+ (This)->lpVtbl -> get_fullScreen(This,pbFullScreen)
+
+#define IWMPPlayer2_put_fullScreen(This,bFullScreen) \
+ (This)->lpVtbl -> put_fullScreen(This,bFullScreen)
+
+#define IWMPPlayer2_get_enableContextMenu(This,pbEnableContextMenu) \
+ (This)->lpVtbl -> get_enableContextMenu(This,pbEnableContextMenu)
+
+#define IWMPPlayer2_put_enableContextMenu(This,bEnableContextMenu) \
+ (This)->lpVtbl -> put_enableContextMenu(This,bEnableContextMenu)
+
+#define IWMPPlayer2_put_uiMode(This,bstrMode) \
+ (This)->lpVtbl -> put_uiMode(This,bstrMode)
+
+#define IWMPPlayer2_get_uiMode(This,pbstrMode) \
+ (This)->lpVtbl -> get_uiMode(This,pbstrMode)
+
+#define IWMPPlayer2_get_stretchToFit(This,pbEnabled) \
+ (This)->lpVtbl -> get_stretchToFit(This,pbEnabled)
+
+#define IWMPPlayer2_put_stretchToFit(This,bEnabled) \
+ (This)->lpVtbl -> put_stretchToFit(This,bEnabled)
+
+#define IWMPPlayer2_get_windowlessVideo(This,pbEnabled) \
+ (This)->lpVtbl -> get_windowlessVideo(This,pbEnabled)
+
+#define IWMPPlayer2_put_windowlessVideo(This,bEnabled) \
+ (This)->lpVtbl -> put_windowlessVideo(This,bEnabled)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_get_enabled_Proxy(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer2_get_enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_put_enabled_Proxy(
+ IWMPPlayer2 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer2_put_enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_get_fullScreen_Proxy(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen);
+
+
+void __RPC_STUB IWMPPlayer2_get_fullScreen_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_put_fullScreen_Proxy(
+ IWMPPlayer2 * This,
+ VARIANT_BOOL bFullScreen);
+
+
+void __RPC_STUB IWMPPlayer2_put_fullScreen_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_get_enableContextMenu_Proxy(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu);
+
+
+void __RPC_STUB IWMPPlayer2_get_enableContextMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_put_enableContextMenu_Proxy(
+ IWMPPlayer2 * This,
+ VARIANT_BOOL bEnableContextMenu);
+
+
+void __RPC_STUB IWMPPlayer2_put_enableContextMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_put_uiMode_Proxy(
+ IWMPPlayer2 * This,
+ /* [in] */ BSTR bstrMode);
+
+
+void __RPC_STUB IWMPPlayer2_put_uiMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_get_uiMode_Proxy(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ BSTR *pbstrMode);
+
+
+void __RPC_STUB IWMPPlayer2_get_uiMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_get_stretchToFit_Proxy(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer2_get_stretchToFit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_put_stretchToFit_Proxy(
+ IWMPPlayer2 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer2_put_stretchToFit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_get_windowlessVideo_Proxy(
+ IWMPPlayer2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer2_get_windowlessVideo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer2_put_windowlessVideo_Proxy(
+ IWMPPlayer2 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer2_put_windowlessVideo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlayer2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPMedia2_INTERFACE_DEFINED__
+#define __IWMPMedia2_INTERFACE_DEFINED__
+
+/* interface IWMPMedia2 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPMedia2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("AB7C88BB-143E-4ea4-ACC3-E4350B2106C3")
+ IWMPMedia2 : public IWMPMedia
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_error(
+ /* [retval][out] */ IWMPErrorItem **ppIWMPErrorItem) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPMedia2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPMedia2 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPMedia2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPMedia2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPMedia2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPMedia2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPMedia2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPMedia2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isIdentical )(
+ IWMPMedia2 * This,
+ /* [in] */ IWMPMedia *pIWMPMedia,
+ /* [retval][out] */ VARIANT_BOOL *pvbool);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_sourceURL )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ BSTR *pbstrSourceURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ BSTR *pbstrName);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_name )(
+ IWMPMedia2 * This,
+ /* [in] */ BSTR bstrName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_imageSourceWidth )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ long *pWidth);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_imageSourceHeight )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ long *pHeight);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_markerCount )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ long *pMarkerCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMarkerTime )(
+ IWMPMedia2 * This,
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ double *pMarkerTime);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMarkerName )(
+ IWMPMedia2 * This,
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ BSTR *pbstrMarkerName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_duration )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ double *pDuration);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_durationString )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ BSTR *pbstrDuration);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_attributeCount )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getAttributeName )(
+ IWMPMedia2 * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrItemName);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getItemInfo )(
+ IWMPMedia2 * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setItemInfo )(
+ IWMPMedia2 * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [in] */ BSTR bstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getItemInfoByAtom )(
+ IWMPMedia2 * This,
+ /* [in] */ long lAtom,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *isMemberOf )(
+ IWMPMedia2 * This,
+ /* [in] */ IWMPPlaylist *pPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsMemberOf);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *isReadOnlyItem )(
+ IWMPMedia2 * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsReadOnly);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPMedia2 * This,
+ /* [retval][out] */ IWMPErrorItem **ppIWMPErrorItem);
+
+ END_INTERFACE
+ } IWMPMedia2Vtbl;
+
+ interface IWMPMedia2
+ {
+ CONST_VTBL struct IWMPMedia2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPMedia2_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPMedia2_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPMedia2_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPMedia2_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPMedia2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPMedia2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPMedia2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPMedia2_get_isIdentical(This,pIWMPMedia,pvbool) \
+ (This)->lpVtbl -> get_isIdentical(This,pIWMPMedia,pvbool)
+
+#define IWMPMedia2_get_sourceURL(This,pbstrSourceURL) \
+ (This)->lpVtbl -> get_sourceURL(This,pbstrSourceURL)
+
+#define IWMPMedia2_get_name(This,pbstrName) \
+ (This)->lpVtbl -> get_name(This,pbstrName)
+
+#define IWMPMedia2_put_name(This,bstrName) \
+ (This)->lpVtbl -> put_name(This,bstrName)
+
+#define IWMPMedia2_get_imageSourceWidth(This,pWidth) \
+ (This)->lpVtbl -> get_imageSourceWidth(This,pWidth)
+
+#define IWMPMedia2_get_imageSourceHeight(This,pHeight) \
+ (This)->lpVtbl -> get_imageSourceHeight(This,pHeight)
+
+#define IWMPMedia2_get_markerCount(This,pMarkerCount) \
+ (This)->lpVtbl -> get_markerCount(This,pMarkerCount)
+
+#define IWMPMedia2_getMarkerTime(This,MarkerNum,pMarkerTime) \
+ (This)->lpVtbl -> getMarkerTime(This,MarkerNum,pMarkerTime)
+
+#define IWMPMedia2_getMarkerName(This,MarkerNum,pbstrMarkerName) \
+ (This)->lpVtbl -> getMarkerName(This,MarkerNum,pbstrMarkerName)
+
+#define IWMPMedia2_get_duration(This,pDuration) \
+ (This)->lpVtbl -> get_duration(This,pDuration)
+
+#define IWMPMedia2_get_durationString(This,pbstrDuration) \
+ (This)->lpVtbl -> get_durationString(This,pbstrDuration)
+
+#define IWMPMedia2_get_attributeCount(This,plCount) \
+ (This)->lpVtbl -> get_attributeCount(This,plCount)
+
+#define IWMPMedia2_getAttributeName(This,lIndex,pbstrItemName) \
+ (This)->lpVtbl -> getAttributeName(This,lIndex,pbstrItemName)
+
+#define IWMPMedia2_getItemInfo(This,bstrItemName,pbstrVal) \
+ (This)->lpVtbl -> getItemInfo(This,bstrItemName,pbstrVal)
+
+#define IWMPMedia2_setItemInfo(This,bstrItemName,bstrVal) \
+ (This)->lpVtbl -> setItemInfo(This,bstrItemName,bstrVal)
+
+#define IWMPMedia2_getItemInfoByAtom(This,lAtom,pbstrVal) \
+ (This)->lpVtbl -> getItemInfoByAtom(This,lAtom,pbstrVal)
+
+#define IWMPMedia2_isMemberOf(This,pPlaylist,pvarfIsMemberOf) \
+ (This)->lpVtbl -> isMemberOf(This,pPlaylist,pvarfIsMemberOf)
+
+#define IWMPMedia2_isReadOnlyItem(This,bstrItemName,pvarfIsReadOnly) \
+ (This)->lpVtbl -> isReadOnlyItem(This,bstrItemName,pvarfIsReadOnly)
+
+
+#define IWMPMedia2_get_error(This,ppIWMPErrorItem) \
+ (This)->lpVtbl -> get_error(This,ppIWMPErrorItem)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMedia2_get_error_Proxy(
+ IWMPMedia2 * This,
+ /* [retval][out] */ IWMPErrorItem **ppIWMPErrorItem);
+
+
+void __RPC_STUB IWMPMedia2_get_error_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPMedia2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPControls2_INTERFACE_DEFINED__
+#define __IWMPControls2_INTERFACE_DEFINED__
+
+/* interface IWMPControls2 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPControls2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6F030D25-0890-480f-9775-1F7E40AB5B8E")
+ IWMPControls2 : public IWMPControls
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE step(
+ /* [in] */ long lStep) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPControls2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPControls2 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPControls2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPControls2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPControls2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPControls2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPControls2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPControls2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isAvailable )(
+ IWMPControls2 * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *play )(
+ IWMPControls2 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *stop )(
+ IWMPControls2 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *pause )(
+ IWMPControls2 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *fastForward )(
+ IWMPControls2 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *fastReverse )(
+ IWMPControls2 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPosition )(
+ IWMPControls2 * This,
+ /* [retval][out] */ double *pdCurrentPosition);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPosition )(
+ IWMPControls2 * This,
+ /* [in] */ double dCurrentPosition);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPositionString )(
+ IWMPControls2 * This,
+ /* [retval][out] */ BSTR *pbstrCurrentPosition);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *next )(
+ IWMPControls2 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *previous )(
+ IWMPControls2 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentItem )(
+ IWMPControls2 * This,
+ /* [retval][out] */ IWMPMedia **ppIWMPMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentItem )(
+ IWMPControls2 * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMarker )(
+ IWMPControls2 * This,
+ /* [retval][out] */ long *plMarker);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMarker )(
+ IWMPControls2 * This,
+ /* [in] */ long lMarker);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *playItem )(
+ IWMPControls2 * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *step )(
+ IWMPControls2 * This,
+ /* [in] */ long lStep);
+
+ END_INTERFACE
+ } IWMPControls2Vtbl;
+
+ interface IWMPControls2
+ {
+ CONST_VTBL struct IWMPControls2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPControls2_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPControls2_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPControls2_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPControls2_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPControls2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPControls2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPControls2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPControls2_get_isAvailable(This,bstrItem,pIsAvailable) \
+ (This)->lpVtbl -> get_isAvailable(This,bstrItem,pIsAvailable)
+
+#define IWMPControls2_play(This) \
+ (This)->lpVtbl -> play(This)
+
+#define IWMPControls2_stop(This) \
+ (This)->lpVtbl -> stop(This)
+
+#define IWMPControls2_pause(This) \
+ (This)->lpVtbl -> pause(This)
+
+#define IWMPControls2_fastForward(This) \
+ (This)->lpVtbl -> fastForward(This)
+
+#define IWMPControls2_fastReverse(This) \
+ (This)->lpVtbl -> fastReverse(This)
+
+#define IWMPControls2_get_currentPosition(This,pdCurrentPosition) \
+ (This)->lpVtbl -> get_currentPosition(This,pdCurrentPosition)
+
+#define IWMPControls2_put_currentPosition(This,dCurrentPosition) \
+ (This)->lpVtbl -> put_currentPosition(This,dCurrentPosition)
+
+#define IWMPControls2_get_currentPositionString(This,pbstrCurrentPosition) \
+ (This)->lpVtbl -> get_currentPositionString(This,pbstrCurrentPosition)
+
+#define IWMPControls2_next(This) \
+ (This)->lpVtbl -> next(This)
+
+#define IWMPControls2_previous(This) \
+ (This)->lpVtbl -> previous(This)
+
+#define IWMPControls2_get_currentItem(This,ppIWMPMedia) \
+ (This)->lpVtbl -> get_currentItem(This,ppIWMPMedia)
+
+#define IWMPControls2_put_currentItem(This,pIWMPMedia) \
+ (This)->lpVtbl -> put_currentItem(This,pIWMPMedia)
+
+#define IWMPControls2_get_currentMarker(This,plMarker) \
+ (This)->lpVtbl -> get_currentMarker(This,plMarker)
+
+#define IWMPControls2_put_currentMarker(This,lMarker) \
+ (This)->lpVtbl -> put_currentMarker(This,lMarker)
+
+#define IWMPControls2_playItem(This,pIWMPMedia) \
+ (This)->lpVtbl -> playItem(This,pIWMPMedia)
+
+
+#define IWMPControls2_step(This,lStep) \
+ (This)->lpVtbl -> step(This,lStep)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls2_step_Proxy(
+ IWMPControls2 * This,
+ /* [in] */ long lStep);
+
+
+void __RPC_STUB IWMPControls2_step_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPControls2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPDVD_INTERFACE_DEFINED__
+#define __IWMPDVD_INTERFACE_DEFINED__
+
+/* interface IWMPDVD */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPDVD;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("8DA61686-4668-4a5c-AE5D-803193293DBE")
+ IWMPDVD : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_isAvailable(
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_domain(
+ /* [retval][out] */ BSTR *strDomain) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE topMenu( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE titleMenu( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE back( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE resume( void) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPDVDVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPDVD * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPDVD * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPDVD * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPDVD * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPDVD * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPDVD * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPDVD * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isAvailable )(
+ IWMPDVD * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_domain )(
+ IWMPDVD * This,
+ /* [retval][out] */ BSTR *strDomain);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *topMenu )(
+ IWMPDVD * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *titleMenu )(
+ IWMPDVD * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *back )(
+ IWMPDVD * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *resume )(
+ IWMPDVD * This);
+
+ END_INTERFACE
+ } IWMPDVDVtbl;
+
+ interface IWMPDVD
+ {
+ CONST_VTBL struct IWMPDVDVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPDVD_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPDVD_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPDVD_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPDVD_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPDVD_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPDVD_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPDVD_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPDVD_get_isAvailable(This,bstrItem,pIsAvailable) \
+ (This)->lpVtbl -> get_isAvailable(This,bstrItem,pIsAvailable)
+
+#define IWMPDVD_get_domain(This,strDomain) \
+ (This)->lpVtbl -> get_domain(This,strDomain)
+
+#define IWMPDVD_topMenu(This) \
+ (This)->lpVtbl -> topMenu(This)
+
+#define IWMPDVD_titleMenu(This) \
+ (This)->lpVtbl -> titleMenu(This)
+
+#define IWMPDVD_back(This) \
+ (This)->lpVtbl -> back(This)
+
+#define IWMPDVD_resume(This) \
+ (This)->lpVtbl -> resume(This)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPDVD_get_isAvailable_Proxy(
+ IWMPDVD * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+
+void __RPC_STUB IWMPDVD_get_isAvailable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPDVD_get_domain_Proxy(
+ IWMPDVD * This,
+ /* [retval][out] */ BSTR *strDomain);
+
+
+void __RPC_STUB IWMPDVD_get_domain_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPDVD_topMenu_Proxy(
+ IWMPDVD * This);
+
+
+void __RPC_STUB IWMPDVD_topMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPDVD_titleMenu_Proxy(
+ IWMPDVD * This);
+
+
+void __RPC_STUB IWMPDVD_titleMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPDVD_back_Proxy(
+ IWMPDVD * This);
+
+
+void __RPC_STUB IWMPDVD_back_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPDVD_resume_Proxy(
+ IWMPDVD * This);
+
+
+void __RPC_STUB IWMPDVD_resume_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPDVD_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPCore2_INTERFACE_DEFINED__
+#define __IWMPCore2_INTERFACE_DEFINED__
+
+/* interface IWMPCore2 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPCore2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("BC17E5B7-7561-4c18-BB90-17D485775659")
+ IWMPCore2 : public IWMPCore
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_dvd(
+ /* [retval][out] */ IWMPDVD **ppDVD) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPCore2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPCore2 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPCore2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPCore2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPCore2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPCore2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPCore2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPCore2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *close )(
+ IWMPCore2 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URL )(
+ IWMPCore2 * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_URL )(
+ IWMPCore2 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_openState )(
+ IWMPCore2 * This,
+ /* [retval][out] */ WMPOpenState *pwmpos);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playState )(
+ IWMPCore2 * This,
+ /* [retval][out] */ WMPPlayState *pwmpps);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_controls )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPControls **ppControl);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_settings )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPSettings **ppSettings);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMedia )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMedia )(
+ IWMPCore2 * This,
+ /* [in] */ IWMPMedia *pMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mediaCollection )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playlistCollection )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_versionInfo )(
+ IWMPCore2 * This,
+ /* [retval][out] */ BSTR *pbstrVersionInfo);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *launchURL )(
+ IWMPCore2 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_network )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPNetwork **ppQNI);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPlaylist )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPPlaylist **ppPL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPlaylist )(
+ IWMPCore2 * This,
+ /* [in] */ IWMPPlaylist *pPL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_cdromCollection )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_closedCaption )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isOnline )(
+ IWMPCore2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfOnline);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPError **ppError);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_status )(
+ IWMPCore2 * This,
+ /* [retval][out] */ BSTR *pbstrStatus);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_dvd )(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPDVD **ppDVD);
+
+ END_INTERFACE
+ } IWMPCore2Vtbl;
+
+ interface IWMPCore2
+ {
+ CONST_VTBL struct IWMPCore2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPCore2_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPCore2_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPCore2_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPCore2_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPCore2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPCore2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPCore2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPCore2_close(This) \
+ (This)->lpVtbl -> close(This)
+
+#define IWMPCore2_get_URL(This,pbstrURL) \
+ (This)->lpVtbl -> get_URL(This,pbstrURL)
+
+#define IWMPCore2_put_URL(This,bstrURL) \
+ (This)->lpVtbl -> put_URL(This,bstrURL)
+
+#define IWMPCore2_get_openState(This,pwmpos) \
+ (This)->lpVtbl -> get_openState(This,pwmpos)
+
+#define IWMPCore2_get_playState(This,pwmpps) \
+ (This)->lpVtbl -> get_playState(This,pwmpps)
+
+#define IWMPCore2_get_controls(This,ppControl) \
+ (This)->lpVtbl -> get_controls(This,ppControl)
+
+#define IWMPCore2_get_settings(This,ppSettings) \
+ (This)->lpVtbl -> get_settings(This,ppSettings)
+
+#define IWMPCore2_get_currentMedia(This,ppMedia) \
+ (This)->lpVtbl -> get_currentMedia(This,ppMedia)
+
+#define IWMPCore2_put_currentMedia(This,pMedia) \
+ (This)->lpVtbl -> put_currentMedia(This,pMedia)
+
+#define IWMPCore2_get_mediaCollection(This,ppMediaCollection) \
+ (This)->lpVtbl -> get_mediaCollection(This,ppMediaCollection)
+
+#define IWMPCore2_get_playlistCollection(This,ppPlaylistCollection) \
+ (This)->lpVtbl -> get_playlistCollection(This,ppPlaylistCollection)
+
+#define IWMPCore2_get_versionInfo(This,pbstrVersionInfo) \
+ (This)->lpVtbl -> get_versionInfo(This,pbstrVersionInfo)
+
+#define IWMPCore2_launchURL(This,bstrURL) \
+ (This)->lpVtbl -> launchURL(This,bstrURL)
+
+#define IWMPCore2_get_network(This,ppQNI) \
+ (This)->lpVtbl -> get_network(This,ppQNI)
+
+#define IWMPCore2_get_currentPlaylist(This,ppPL) \
+ (This)->lpVtbl -> get_currentPlaylist(This,ppPL)
+
+#define IWMPCore2_put_currentPlaylist(This,pPL) \
+ (This)->lpVtbl -> put_currentPlaylist(This,pPL)
+
+#define IWMPCore2_get_cdromCollection(This,ppCdromCollection) \
+ (This)->lpVtbl -> get_cdromCollection(This,ppCdromCollection)
+
+#define IWMPCore2_get_closedCaption(This,ppClosedCaption) \
+ (This)->lpVtbl -> get_closedCaption(This,ppClosedCaption)
+
+#define IWMPCore2_get_isOnline(This,pfOnline) \
+ (This)->lpVtbl -> get_isOnline(This,pfOnline)
+
+#define IWMPCore2_get_error(This,ppError) \
+ (This)->lpVtbl -> get_error(This,ppError)
+
+#define IWMPCore2_get_status(This,pbstrStatus) \
+ (This)->lpVtbl -> get_status(This,pbstrStatus)
+
+
+#define IWMPCore2_get_dvd(This,ppDVD) \
+ (This)->lpVtbl -> get_dvd(This,ppDVD)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPCore2_get_dvd_Proxy(
+ IWMPCore2 * This,
+ /* [retval][out] */ IWMPDVD **ppDVD);
+
+
+void __RPC_STUB IWMPCore2_get_dvd_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPCore2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlayer3_INTERFACE_DEFINED__
+#define __IWMPPlayer3_INTERFACE_DEFINED__
+
+/* interface IWMPPlayer3 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlayer3;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("54062B68-052A-4c25-A39F-8B63346511D4")
+ IWMPPlayer3 : public IWMPCore2
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enabled(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enabled(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_fullScreen(
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_fullScreen(
+ VARIANT_BOOL bFullScreen) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enableContextMenu(
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enableContextMenu(
+ VARIANT_BOOL bEnableContextMenu) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_uiMode(
+ /* [in] */ BSTR bstrMode) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_uiMode(
+ /* [retval][out] */ BSTR *pbstrMode) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_stretchToFit(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_stretchToFit(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_windowlessVideo(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_windowlessVideo(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlayer3Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlayer3 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlayer3 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlayer3 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPPlayer3 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPPlayer3 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPPlayer3 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPPlayer3 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *close )(
+ IWMPPlayer3 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URL )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_URL )(
+ IWMPPlayer3 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_openState )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ WMPOpenState *pwmpos);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playState )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ WMPPlayState *pwmpps);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_controls )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPControls **ppControl);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_settings )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPSettings **ppSettings);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMedia )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMedia )(
+ IWMPPlayer3 * This,
+ /* [in] */ IWMPMedia *pMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mediaCollection )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playlistCollection )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_versionInfo )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ BSTR *pbstrVersionInfo);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *launchURL )(
+ IWMPPlayer3 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_network )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPNetwork **ppQNI);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPlaylist )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPPlaylist **ppPL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPlaylist )(
+ IWMPPlayer3 * This,
+ /* [in] */ IWMPPlaylist *pPL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_cdromCollection )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_closedCaption )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isOnline )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfOnline);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPError **ppError);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_status )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ BSTR *pbstrStatus);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_dvd )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ IWMPDVD **ppDVD);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enabled )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enabled )(
+ IWMPPlayer3 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_fullScreen )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_fullScreen )(
+ IWMPPlayer3 * This,
+ VARIANT_BOOL bFullScreen);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enableContextMenu )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enableContextMenu )(
+ IWMPPlayer3 * This,
+ VARIANT_BOOL bEnableContextMenu);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_uiMode )(
+ IWMPPlayer3 * This,
+ /* [in] */ BSTR bstrMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_uiMode )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ BSTR *pbstrMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_stretchToFit )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_stretchToFit )(
+ IWMPPlayer3 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_windowlessVideo )(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_windowlessVideo )(
+ IWMPPlayer3 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ END_INTERFACE
+ } IWMPPlayer3Vtbl;
+
+ interface IWMPPlayer3
+ {
+ CONST_VTBL struct IWMPPlayer3Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlayer3_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlayer3_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlayer3_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlayer3_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPPlayer3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPPlayer3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPPlayer3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPPlayer3_close(This) \
+ (This)->lpVtbl -> close(This)
+
+#define IWMPPlayer3_get_URL(This,pbstrURL) \
+ (This)->lpVtbl -> get_URL(This,pbstrURL)
+
+#define IWMPPlayer3_put_URL(This,bstrURL) \
+ (This)->lpVtbl -> put_URL(This,bstrURL)
+
+#define IWMPPlayer3_get_openState(This,pwmpos) \
+ (This)->lpVtbl -> get_openState(This,pwmpos)
+
+#define IWMPPlayer3_get_playState(This,pwmpps) \
+ (This)->lpVtbl -> get_playState(This,pwmpps)
+
+#define IWMPPlayer3_get_controls(This,ppControl) \
+ (This)->lpVtbl -> get_controls(This,ppControl)
+
+#define IWMPPlayer3_get_settings(This,ppSettings) \
+ (This)->lpVtbl -> get_settings(This,ppSettings)
+
+#define IWMPPlayer3_get_currentMedia(This,ppMedia) \
+ (This)->lpVtbl -> get_currentMedia(This,ppMedia)
+
+#define IWMPPlayer3_put_currentMedia(This,pMedia) \
+ (This)->lpVtbl -> put_currentMedia(This,pMedia)
+
+#define IWMPPlayer3_get_mediaCollection(This,ppMediaCollection) \
+ (This)->lpVtbl -> get_mediaCollection(This,ppMediaCollection)
+
+#define IWMPPlayer3_get_playlistCollection(This,ppPlaylistCollection) \
+ (This)->lpVtbl -> get_playlistCollection(This,ppPlaylistCollection)
+
+#define IWMPPlayer3_get_versionInfo(This,pbstrVersionInfo) \
+ (This)->lpVtbl -> get_versionInfo(This,pbstrVersionInfo)
+
+#define IWMPPlayer3_launchURL(This,bstrURL) \
+ (This)->lpVtbl -> launchURL(This,bstrURL)
+
+#define IWMPPlayer3_get_network(This,ppQNI) \
+ (This)->lpVtbl -> get_network(This,ppQNI)
+
+#define IWMPPlayer3_get_currentPlaylist(This,ppPL) \
+ (This)->lpVtbl -> get_currentPlaylist(This,ppPL)
+
+#define IWMPPlayer3_put_currentPlaylist(This,pPL) \
+ (This)->lpVtbl -> put_currentPlaylist(This,pPL)
+
+#define IWMPPlayer3_get_cdromCollection(This,ppCdromCollection) \
+ (This)->lpVtbl -> get_cdromCollection(This,ppCdromCollection)
+
+#define IWMPPlayer3_get_closedCaption(This,ppClosedCaption) \
+ (This)->lpVtbl -> get_closedCaption(This,ppClosedCaption)
+
+#define IWMPPlayer3_get_isOnline(This,pfOnline) \
+ (This)->lpVtbl -> get_isOnline(This,pfOnline)
+
+#define IWMPPlayer3_get_error(This,ppError) \
+ (This)->lpVtbl -> get_error(This,ppError)
+
+#define IWMPPlayer3_get_status(This,pbstrStatus) \
+ (This)->lpVtbl -> get_status(This,pbstrStatus)
+
+
+#define IWMPPlayer3_get_dvd(This,ppDVD) \
+ (This)->lpVtbl -> get_dvd(This,ppDVD)
+
+
+#define IWMPPlayer3_get_enabled(This,pbEnabled) \
+ (This)->lpVtbl -> get_enabled(This,pbEnabled)
+
+#define IWMPPlayer3_put_enabled(This,bEnabled) \
+ (This)->lpVtbl -> put_enabled(This,bEnabled)
+
+#define IWMPPlayer3_get_fullScreen(This,pbFullScreen) \
+ (This)->lpVtbl -> get_fullScreen(This,pbFullScreen)
+
+#define IWMPPlayer3_put_fullScreen(This,bFullScreen) \
+ (This)->lpVtbl -> put_fullScreen(This,bFullScreen)
+
+#define IWMPPlayer3_get_enableContextMenu(This,pbEnableContextMenu) \
+ (This)->lpVtbl -> get_enableContextMenu(This,pbEnableContextMenu)
+
+#define IWMPPlayer3_put_enableContextMenu(This,bEnableContextMenu) \
+ (This)->lpVtbl -> put_enableContextMenu(This,bEnableContextMenu)
+
+#define IWMPPlayer3_put_uiMode(This,bstrMode) \
+ (This)->lpVtbl -> put_uiMode(This,bstrMode)
+
+#define IWMPPlayer3_get_uiMode(This,pbstrMode) \
+ (This)->lpVtbl -> get_uiMode(This,pbstrMode)
+
+#define IWMPPlayer3_get_stretchToFit(This,pbEnabled) \
+ (This)->lpVtbl -> get_stretchToFit(This,pbEnabled)
+
+#define IWMPPlayer3_put_stretchToFit(This,bEnabled) \
+ (This)->lpVtbl -> put_stretchToFit(This,bEnabled)
+
+#define IWMPPlayer3_get_windowlessVideo(This,pbEnabled) \
+ (This)->lpVtbl -> get_windowlessVideo(This,pbEnabled)
+
+#define IWMPPlayer3_put_windowlessVideo(This,bEnabled) \
+ (This)->lpVtbl -> put_windowlessVideo(This,bEnabled)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_get_enabled_Proxy(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer3_get_enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_put_enabled_Proxy(
+ IWMPPlayer3 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer3_put_enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_get_fullScreen_Proxy(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen);
+
+
+void __RPC_STUB IWMPPlayer3_get_fullScreen_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_put_fullScreen_Proxy(
+ IWMPPlayer3 * This,
+ VARIANT_BOOL bFullScreen);
+
+
+void __RPC_STUB IWMPPlayer3_put_fullScreen_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_get_enableContextMenu_Proxy(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu);
+
+
+void __RPC_STUB IWMPPlayer3_get_enableContextMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_put_enableContextMenu_Proxy(
+ IWMPPlayer3 * This,
+ VARIANT_BOOL bEnableContextMenu);
+
+
+void __RPC_STUB IWMPPlayer3_put_enableContextMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_put_uiMode_Proxy(
+ IWMPPlayer3 * This,
+ /* [in] */ BSTR bstrMode);
+
+
+void __RPC_STUB IWMPPlayer3_put_uiMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_get_uiMode_Proxy(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ BSTR *pbstrMode);
+
+
+void __RPC_STUB IWMPPlayer3_get_uiMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_get_stretchToFit_Proxy(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer3_get_stretchToFit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_put_stretchToFit_Proxy(
+ IWMPPlayer3 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer3_put_stretchToFit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_get_windowlessVideo_Proxy(
+ IWMPPlayer3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer3_get_windowlessVideo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer3_put_windowlessVideo_Proxy(
+ IWMPPlayer3 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer3_put_windowlessVideo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlayer3_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPErrorItem2_INTERFACE_DEFINED__
+#define __IWMPErrorItem2_INTERFACE_DEFINED__
+
+/* interface IWMPErrorItem2 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPErrorItem2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("F75CCEC0-C67C-475c-931E-8719870BEE7D")
+ IWMPErrorItem2 : public IWMPErrorItem
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_condition(
+ /* [retval][out] */ long *plCondition) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPErrorItem2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPErrorItem2 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPErrorItem2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPErrorItem2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPErrorItem2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPErrorItem2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPErrorItem2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPErrorItem2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_errorCode )(
+ IWMPErrorItem2 * This,
+ /* [retval][out] */ long *phr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_errorDescription )(
+ IWMPErrorItem2 * This,
+ /* [retval][out] */ BSTR *pbstrDescription);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_errorContext )(
+ IWMPErrorItem2 * This,
+ /* [retval][out] */ VARIANT *pvarContext);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_remedy )(
+ IWMPErrorItem2 * This,
+ /* [retval][out] */ long *plRemedy);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_customUrl )(
+ IWMPErrorItem2 * This,
+ /* [retval][out] */ BSTR *pbstrCustomUrl);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_condition )(
+ IWMPErrorItem2 * This,
+ /* [retval][out] */ long *plCondition);
+
+ END_INTERFACE
+ } IWMPErrorItem2Vtbl;
+
+ interface IWMPErrorItem2
+ {
+ CONST_VTBL struct IWMPErrorItem2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPErrorItem2_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPErrorItem2_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPErrorItem2_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPErrorItem2_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPErrorItem2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPErrorItem2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPErrorItem2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPErrorItem2_get_errorCode(This,phr) \
+ (This)->lpVtbl -> get_errorCode(This,phr)
+
+#define IWMPErrorItem2_get_errorDescription(This,pbstrDescription) \
+ (This)->lpVtbl -> get_errorDescription(This,pbstrDescription)
+
+#define IWMPErrorItem2_get_errorContext(This,pvarContext) \
+ (This)->lpVtbl -> get_errorContext(This,pvarContext)
+
+#define IWMPErrorItem2_get_remedy(This,plRemedy) \
+ (This)->lpVtbl -> get_remedy(This,plRemedy)
+
+#define IWMPErrorItem2_get_customUrl(This,pbstrCustomUrl) \
+ (This)->lpVtbl -> get_customUrl(This,pbstrCustomUrl)
+
+
+#define IWMPErrorItem2_get_condition(This,plCondition) \
+ (This)->lpVtbl -> get_condition(This,plCondition)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPErrorItem2_get_condition_Proxy(
+ IWMPErrorItem2 * This,
+ /* [retval][out] */ long *plCondition);
+
+
+void __RPC_STUB IWMPErrorItem2_get_condition_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPErrorItem2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPRemoteMediaServices_INTERFACE_DEFINED__
+#define __IWMPRemoteMediaServices_INTERFACE_DEFINED__
+
+/* interface IWMPRemoteMediaServices */
+/* [unique][helpstring][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPRemoteMediaServices;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("CBB92747-741F-44fe-AB5B-F1A48F3B2A59")
+ IWMPRemoteMediaServices : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE GetServiceType(
+ /* [out] */ BSTR *pbstrType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetApplicationName(
+ /* [out] */ BSTR *pbstrName) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetScriptableObject(
+ /* [out] */ BSTR *pbstrName,
+ /* [out] */ IDispatch **ppDispatch) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE GetCustomUIMode(
+ /* [out] */ BSTR *pbstrFile) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPRemoteMediaServicesVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPRemoteMediaServices * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPRemoteMediaServices * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPRemoteMediaServices * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetServiceType )(
+ IWMPRemoteMediaServices * This,
+ /* [out] */ BSTR *pbstrType);
+
+ HRESULT ( STDMETHODCALLTYPE *GetApplicationName )(
+ IWMPRemoteMediaServices * This,
+ /* [out] */ BSTR *pbstrName);
+
+ HRESULT ( STDMETHODCALLTYPE *GetScriptableObject )(
+ IWMPRemoteMediaServices * This,
+ /* [out] */ BSTR *pbstrName,
+ /* [out] */ IDispatch **ppDispatch);
+
+ HRESULT ( STDMETHODCALLTYPE *GetCustomUIMode )(
+ IWMPRemoteMediaServices * This,
+ /* [out] */ BSTR *pbstrFile);
+
+ END_INTERFACE
+ } IWMPRemoteMediaServicesVtbl;
+
+ interface IWMPRemoteMediaServices
+ {
+ CONST_VTBL struct IWMPRemoteMediaServicesVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPRemoteMediaServices_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPRemoteMediaServices_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPRemoteMediaServices_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPRemoteMediaServices_GetServiceType(This,pbstrType) \
+ (This)->lpVtbl -> GetServiceType(This,pbstrType)
+
+#define IWMPRemoteMediaServices_GetApplicationName(This,pbstrName) \
+ (This)->lpVtbl -> GetApplicationName(This,pbstrName)
+
+#define IWMPRemoteMediaServices_GetScriptableObject(This,pbstrName,ppDispatch) \
+ (This)->lpVtbl -> GetScriptableObject(This,pbstrName,ppDispatch)
+
+#define IWMPRemoteMediaServices_GetCustomUIMode(This,pbstrFile) \
+ (This)->lpVtbl -> GetCustomUIMode(This,pbstrFile)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IWMPRemoteMediaServices_GetServiceType_Proxy(
+ IWMPRemoteMediaServices * This,
+ /* [out] */ BSTR *pbstrType);
+
+
+void __RPC_STUB IWMPRemoteMediaServices_GetServiceType_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IWMPRemoteMediaServices_GetApplicationName_Proxy(
+ IWMPRemoteMediaServices * This,
+ /* [out] */ BSTR *pbstrName);
+
+
+void __RPC_STUB IWMPRemoteMediaServices_GetApplicationName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IWMPRemoteMediaServices_GetScriptableObject_Proxy(
+ IWMPRemoteMediaServices * This,
+ /* [out] */ BSTR *pbstrName,
+ /* [out] */ IDispatch **ppDispatch);
+
+
+void __RPC_STUB IWMPRemoteMediaServices_GetScriptableObject_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IWMPRemoteMediaServices_GetCustomUIMode_Proxy(
+ IWMPRemoteMediaServices * This,
+ /* [out] */ BSTR *pbstrFile);
+
+
+void __RPC_STUB IWMPRemoteMediaServices_GetCustomUIMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPRemoteMediaServices_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_wmp_0281 */
+/* [local] */
+
+EXTERN_GUID( CLSID_WMPSkinManager, 0xB2A7FD52,0x301F,0x4348, 0xB9, 0x3A, 0x63, 0x8C, 0x6D, 0xE4, 0x92, 0x29 );
+
+
+extern RPC_IF_HANDLE __MIDL_itf_wmp_0281_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_wmp_0281_v0_0_s_ifspec;
+
+#ifndef __IWMPSkinManager_INTERFACE_DEFINED__
+#define __IWMPSkinManager_INTERFACE_DEFINED__
+
+/* interface IWMPSkinManager */
+/* [unique][helpstring][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPSkinManager;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("076F2FA6-ED30-448B-8CC5-3F3EF3529C7A")
+ IWMPSkinManager : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE SetVisualStyle(
+ /* [in] */ BSTR bstrPath) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPSkinManagerVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPSkinManager * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPSkinManager * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPSkinManager * This);
+
+ HRESULT ( STDMETHODCALLTYPE *SetVisualStyle )(
+ IWMPSkinManager * This,
+ /* [in] */ BSTR bstrPath);
+
+ END_INTERFACE
+ } IWMPSkinManagerVtbl;
+
+ interface IWMPSkinManager
+ {
+ CONST_VTBL struct IWMPSkinManagerVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPSkinManager_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPSkinManager_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPSkinManager_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPSkinManager_SetVisualStyle(This,bstrPath) \
+ (This)->lpVtbl -> SetVisualStyle(This,bstrPath)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IWMPSkinManager_SetVisualStyle_Proxy(
+ IWMPSkinManager * This,
+ /* [in] */ BSTR bstrPath);
+
+
+void __RPC_STUB IWMPSkinManager_SetVisualStyle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPSkinManager_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPMetadataPicture_INTERFACE_DEFINED__
+#define __IWMPMetadataPicture_INTERFACE_DEFINED__
+
+/* interface IWMPMetadataPicture */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPMetadataPicture;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("5C29BBE0-F87D-4c45-AA28-A70F0230FFA9")
+ IWMPMetadataPicture : public IDispatch
+ {
+ public:
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_mimeType(
+ /* [retval][out] */ BSTR *pbstrMimeType) = 0;
+
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_pictureType(
+ /* [retval][out] */ BSTR *pbstrPictureType) = 0;
+
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_description(
+ /* [retval][out] */ BSTR *pbstrDescription) = 0;
+
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_URL(
+ /* [retval][out] */ BSTR *pbstrURL) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPMetadataPictureVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPMetadataPicture * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPMetadataPicture * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPMetadataPicture * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPMetadataPicture * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPMetadataPicture * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPMetadataPicture * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPMetadataPicture * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mimeType )(
+ IWMPMetadataPicture * This,
+ /* [retval][out] */ BSTR *pbstrMimeType);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_pictureType )(
+ IWMPMetadataPicture * This,
+ /* [retval][out] */ BSTR *pbstrPictureType);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
+ IWMPMetadataPicture * This,
+ /* [retval][out] */ BSTR *pbstrDescription);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URL )(
+ IWMPMetadataPicture * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+ END_INTERFACE
+ } IWMPMetadataPictureVtbl;
+
+ interface IWMPMetadataPicture
+ {
+ CONST_VTBL struct IWMPMetadataPictureVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPMetadataPicture_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPMetadataPicture_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPMetadataPicture_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPMetadataPicture_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPMetadataPicture_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPMetadataPicture_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPMetadataPicture_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPMetadataPicture_get_mimeType(This,pbstrMimeType) \
+ (This)->lpVtbl -> get_mimeType(This,pbstrMimeType)
+
+#define IWMPMetadataPicture_get_pictureType(This,pbstrPictureType) \
+ (This)->lpVtbl -> get_pictureType(This,pbstrPictureType)
+
+#define IWMPMetadataPicture_get_description(This,pbstrDescription) \
+ (This)->lpVtbl -> get_description(This,pbstrDescription)
+
+#define IWMPMetadataPicture_get_URL(This,pbstrURL) \
+ (This)->lpVtbl -> get_URL(This,pbstrURL)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMetadataPicture_get_mimeType_Proxy(
+ IWMPMetadataPicture * This,
+ /* [retval][out] */ BSTR *pbstrMimeType);
+
+
+void __RPC_STUB IWMPMetadataPicture_get_mimeType_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMetadataPicture_get_pictureType_Proxy(
+ IWMPMetadataPicture * This,
+ /* [retval][out] */ BSTR *pbstrPictureType);
+
+
+void __RPC_STUB IWMPMetadataPicture_get_pictureType_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMetadataPicture_get_description_Proxy(
+ IWMPMetadataPicture * This,
+ /* [retval][out] */ BSTR *pbstrDescription);
+
+
+void __RPC_STUB IWMPMetadataPicture_get_description_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMetadataPicture_get_URL_Proxy(
+ IWMPMetadataPicture * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+
+void __RPC_STUB IWMPMetadataPicture_get_URL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPMetadataPicture_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPMetadataText_INTERFACE_DEFINED__
+#define __IWMPMetadataText_INTERFACE_DEFINED__
+
+/* interface IWMPMetadataText */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPMetadataText;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("769A72DB-13D2-45e2-9C48-53CA9D5B7450")
+ IWMPMetadataText : public IDispatch
+ {
+ public:
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_description(
+ /* [retval][out] */ BSTR *pbstrDescription) = 0;
+
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_text(
+ /* [retval][out] */ BSTR *pbstrText) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPMetadataTextVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPMetadataText * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPMetadataText * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPMetadataText * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPMetadataText * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPMetadataText * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPMetadataText * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPMetadataText * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
+ IWMPMetadataText * This,
+ /* [retval][out] */ BSTR *pbstrDescription);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IWMPMetadataText * This,
+ /* [retval][out] */ BSTR *pbstrText);
+
+ END_INTERFACE
+ } IWMPMetadataTextVtbl;
+
+ interface IWMPMetadataText
+ {
+ CONST_VTBL struct IWMPMetadataTextVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPMetadataText_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPMetadataText_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPMetadataText_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPMetadataText_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPMetadataText_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPMetadataText_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPMetadataText_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPMetadataText_get_description(This,pbstrDescription) \
+ (This)->lpVtbl -> get_description(This,pbstrDescription)
+
+#define IWMPMetadataText_get_text(This,pbstrText) \
+ (This)->lpVtbl -> get_text(This,pbstrText)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMetadataText_get_description_Proxy(
+ IWMPMetadataText * This,
+ /* [retval][out] */ BSTR *pbstrDescription);
+
+
+void __RPC_STUB IWMPMetadataText_get_description_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propget][id] */ HRESULT STDMETHODCALLTYPE IWMPMetadataText_get_text_Proxy(
+ IWMPMetadataText * This,
+ /* [retval][out] */ BSTR *pbstrText);
+
+
+void __RPC_STUB IWMPMetadataText_get_text_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPMetadataText_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPMedia3_INTERFACE_DEFINED__
+#define __IWMPMedia3_INTERFACE_DEFINED__
+
+/* interface IWMPMedia3 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPMedia3;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("F118EFC7-F03A-4fb4-99C9-1C02A5C1065B")
+ IWMPMedia3 : public IWMPMedia2
+ {
+ public:
+ virtual /* [id] */ HRESULT STDMETHODCALLTYPE getAttributeCountByType(
+ /* [in] */ BSTR bstrType,
+ /* [in] */ BSTR bstrLanguage,
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [id] */ HRESULT STDMETHODCALLTYPE getItemInfoByType(
+ /* [in] */ BSTR bstrType,
+ /* [in] */ BSTR bstrLanguage,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ VARIANT *pvarValue) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPMedia3Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPMedia3 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPMedia3 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPMedia3 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPMedia3 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPMedia3 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPMedia3 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPMedia3 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isIdentical )(
+ IWMPMedia3 * This,
+ /* [in] */ IWMPMedia *pIWMPMedia,
+ /* [retval][out] */ VARIANT_BOOL *pvbool);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_sourceURL )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ BSTR *pbstrSourceURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ BSTR *pbstrName);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_name )(
+ IWMPMedia3 * This,
+ /* [in] */ BSTR bstrName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_imageSourceWidth )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ long *pWidth);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_imageSourceHeight )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ long *pHeight);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_markerCount )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ long *pMarkerCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMarkerTime )(
+ IWMPMedia3 * This,
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ double *pMarkerTime);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMarkerName )(
+ IWMPMedia3 * This,
+ /* [in] */ long MarkerNum,
+ /* [retval][out] */ BSTR *pbstrMarkerName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_duration )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ double *pDuration);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_durationString )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ BSTR *pbstrDuration);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_attributeCount )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getAttributeName )(
+ IWMPMedia3 * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrItemName);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getItemInfo )(
+ IWMPMedia3 * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setItemInfo )(
+ IWMPMedia3 * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [in] */ BSTR bstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getItemInfoByAtom )(
+ IWMPMedia3 * This,
+ /* [in] */ long lAtom,
+ /* [retval][out] */ BSTR *pbstrVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *isMemberOf )(
+ IWMPMedia3 * This,
+ /* [in] */ IWMPPlaylist *pPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsMemberOf);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *isReadOnlyItem )(
+ IWMPMedia3 * This,
+ /* [in] */ BSTR bstrItemName,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsReadOnly);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPMedia3 * This,
+ /* [retval][out] */ IWMPErrorItem **ppIWMPErrorItem);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *getAttributeCountByType )(
+ IWMPMedia3 * This,
+ /* [in] */ BSTR bstrType,
+ /* [in] */ BSTR bstrLanguage,
+ /* [retval][out] */ long *plCount);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *getItemInfoByType )(
+ IWMPMedia3 * This,
+ /* [in] */ BSTR bstrType,
+ /* [in] */ BSTR bstrLanguage,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ VARIANT *pvarValue);
+
+ END_INTERFACE
+ } IWMPMedia3Vtbl;
+
+ interface IWMPMedia3
+ {
+ CONST_VTBL struct IWMPMedia3Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPMedia3_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPMedia3_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPMedia3_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPMedia3_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPMedia3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPMedia3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPMedia3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPMedia3_get_isIdentical(This,pIWMPMedia,pvbool) \
+ (This)->lpVtbl -> get_isIdentical(This,pIWMPMedia,pvbool)
+
+#define IWMPMedia3_get_sourceURL(This,pbstrSourceURL) \
+ (This)->lpVtbl -> get_sourceURL(This,pbstrSourceURL)
+
+#define IWMPMedia3_get_name(This,pbstrName) \
+ (This)->lpVtbl -> get_name(This,pbstrName)
+
+#define IWMPMedia3_put_name(This,bstrName) \
+ (This)->lpVtbl -> put_name(This,bstrName)
+
+#define IWMPMedia3_get_imageSourceWidth(This,pWidth) \
+ (This)->lpVtbl -> get_imageSourceWidth(This,pWidth)
+
+#define IWMPMedia3_get_imageSourceHeight(This,pHeight) \
+ (This)->lpVtbl -> get_imageSourceHeight(This,pHeight)
+
+#define IWMPMedia3_get_markerCount(This,pMarkerCount) \
+ (This)->lpVtbl -> get_markerCount(This,pMarkerCount)
+
+#define IWMPMedia3_getMarkerTime(This,MarkerNum,pMarkerTime) \
+ (This)->lpVtbl -> getMarkerTime(This,MarkerNum,pMarkerTime)
+
+#define IWMPMedia3_getMarkerName(This,MarkerNum,pbstrMarkerName) \
+ (This)->lpVtbl -> getMarkerName(This,MarkerNum,pbstrMarkerName)
+
+#define IWMPMedia3_get_duration(This,pDuration) \
+ (This)->lpVtbl -> get_duration(This,pDuration)
+
+#define IWMPMedia3_get_durationString(This,pbstrDuration) \
+ (This)->lpVtbl -> get_durationString(This,pbstrDuration)
+
+#define IWMPMedia3_get_attributeCount(This,plCount) \
+ (This)->lpVtbl -> get_attributeCount(This,plCount)
+
+#define IWMPMedia3_getAttributeName(This,lIndex,pbstrItemName) \
+ (This)->lpVtbl -> getAttributeName(This,lIndex,pbstrItemName)
+
+#define IWMPMedia3_getItemInfo(This,bstrItemName,pbstrVal) \
+ (This)->lpVtbl -> getItemInfo(This,bstrItemName,pbstrVal)
+
+#define IWMPMedia3_setItemInfo(This,bstrItemName,bstrVal) \
+ (This)->lpVtbl -> setItemInfo(This,bstrItemName,bstrVal)
+
+#define IWMPMedia3_getItemInfoByAtom(This,lAtom,pbstrVal) \
+ (This)->lpVtbl -> getItemInfoByAtom(This,lAtom,pbstrVal)
+
+#define IWMPMedia3_isMemberOf(This,pPlaylist,pvarfIsMemberOf) \
+ (This)->lpVtbl -> isMemberOf(This,pPlaylist,pvarfIsMemberOf)
+
+#define IWMPMedia3_isReadOnlyItem(This,bstrItemName,pvarfIsReadOnly) \
+ (This)->lpVtbl -> isReadOnlyItem(This,bstrItemName,pvarfIsReadOnly)
+
+
+#define IWMPMedia3_get_error(This,ppIWMPErrorItem) \
+ (This)->lpVtbl -> get_error(This,ppIWMPErrorItem)
+
+
+#define IWMPMedia3_getAttributeCountByType(This,bstrType,bstrLanguage,plCount) \
+ (This)->lpVtbl -> getAttributeCountByType(This,bstrType,bstrLanguage,plCount)
+
+#define IWMPMedia3_getItemInfoByType(This,bstrType,bstrLanguage,lIndex,pvarValue) \
+ (This)->lpVtbl -> getItemInfoByType(This,bstrType,bstrLanguage,lIndex,pvarValue)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [id] */ HRESULT STDMETHODCALLTYPE IWMPMedia3_getAttributeCountByType_Proxy(
+ IWMPMedia3 * This,
+ /* [in] */ BSTR bstrType,
+ /* [in] */ BSTR bstrLanguage,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPMedia3_getAttributeCountByType_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [id] */ HRESULT STDMETHODCALLTYPE IWMPMedia3_getItemInfoByType_Proxy(
+ IWMPMedia3 * This,
+ /* [in] */ BSTR bstrType,
+ /* [in] */ BSTR bstrLanguage,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ VARIANT *pvarValue);
+
+
+void __RPC_STUB IWMPMedia3_getItemInfoByType_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPMedia3_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPSettings2_INTERFACE_DEFINED__
+#define __IWMPSettings2_INTERFACE_DEFINED__
+
+/* interface IWMPSettings2 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPSettings2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("FDA937A4-EECE-4da5-A0B6-39BF89ADE2C2")
+ IWMPSettings2 : public IWMPSettings
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_defaultAudioLanguage(
+ /* [retval][out] */ long *plLangID) = 0;
+
+ virtual /* [propget][id] */ HRESULT STDMETHODCALLTYPE get_mediaAccessRights(
+ /* [retval][out] */ BSTR *pbstrRights) = 0;
+
+ virtual /* [id] */ HRESULT STDMETHODCALLTYPE requestMediaAccessRights(
+ /* [in] */ BSTR bstrDesiredAccess,
+ /* [retval][out] */ VARIANT_BOOL *pvbAccepted) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPSettings2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPSettings2 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPSettings2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPSettings2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPSettings2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPSettings2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPSettings2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPSettings2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isAvailable )(
+ IWMPSettings2 * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_autoStart )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfAutoStart);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_autoStart )(
+ IWMPSettings2 * This,
+ /* [in] */ VARIANT_BOOL fAutoStart);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_baseURL )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ BSTR *pbstrBaseURL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_baseURL )(
+ IWMPSettings2 * This,
+ /* [in] */ BSTR bstrBaseURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_defaultFrame )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ BSTR *pbstrDefaultFrame);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_defaultFrame )(
+ IWMPSettings2 * This,
+ /* [in] */ BSTR bstrDefaultFrame);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_invokeURLs )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfInvokeURLs);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_invokeURLs )(
+ IWMPSettings2 * This,
+ /* [in] */ VARIANT_BOOL fInvokeURLs);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mute )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfMute);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_mute )(
+ IWMPSettings2 * This,
+ /* [in] */ VARIANT_BOOL fMute);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playCount )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_playCount )(
+ IWMPSettings2 * This,
+ /* [in] */ long lCount);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_rate )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ double *pdRate);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_rate )(
+ IWMPSettings2 * This,
+ /* [in] */ double dRate);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_balance )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ long *plBalance);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_balance )(
+ IWMPSettings2 * This,
+ /* [in] */ long lBalance);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_volume )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ long *plVolume);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_volume )(
+ IWMPSettings2 * This,
+ /* [in] */ long lVolume);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getMode )(
+ IWMPSettings2 * This,
+ /* [in] */ BSTR bstrMode,
+ /* [retval][out] */ VARIANT_BOOL *pvarfMode);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *setMode )(
+ IWMPSettings2 * This,
+ /* [in] */ BSTR bstrMode,
+ /* [in] */ VARIANT_BOOL varfMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enableErrorDialogs )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfEnableErrorDialogs);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enableErrorDialogs )(
+ IWMPSettings2 * This,
+ /* [in] */ VARIANT_BOOL fEnableErrorDialogs);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_defaultAudioLanguage )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ long *plLangID);
+
+ /* [propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mediaAccessRights )(
+ IWMPSettings2 * This,
+ /* [retval][out] */ BSTR *pbstrRights);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *requestMediaAccessRights )(
+ IWMPSettings2 * This,
+ /* [in] */ BSTR bstrDesiredAccess,
+ /* [retval][out] */ VARIANT_BOOL *pvbAccepted);
+
+ END_INTERFACE
+ } IWMPSettings2Vtbl;
+
+ interface IWMPSettings2
+ {
+ CONST_VTBL struct IWMPSettings2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPSettings2_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPSettings2_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPSettings2_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPSettings2_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPSettings2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPSettings2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPSettings2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPSettings2_get_isAvailable(This,bstrItem,pIsAvailable) \
+ (This)->lpVtbl -> get_isAvailable(This,bstrItem,pIsAvailable)
+
+#define IWMPSettings2_get_autoStart(This,pfAutoStart) \
+ (This)->lpVtbl -> get_autoStart(This,pfAutoStart)
+
+#define IWMPSettings2_put_autoStart(This,fAutoStart) \
+ (This)->lpVtbl -> put_autoStart(This,fAutoStart)
+
+#define IWMPSettings2_get_baseURL(This,pbstrBaseURL) \
+ (This)->lpVtbl -> get_baseURL(This,pbstrBaseURL)
+
+#define IWMPSettings2_put_baseURL(This,bstrBaseURL) \
+ (This)->lpVtbl -> put_baseURL(This,bstrBaseURL)
+
+#define IWMPSettings2_get_defaultFrame(This,pbstrDefaultFrame) \
+ (This)->lpVtbl -> get_defaultFrame(This,pbstrDefaultFrame)
+
+#define IWMPSettings2_put_defaultFrame(This,bstrDefaultFrame) \
+ (This)->lpVtbl -> put_defaultFrame(This,bstrDefaultFrame)
+
+#define IWMPSettings2_get_invokeURLs(This,pfInvokeURLs) \
+ (This)->lpVtbl -> get_invokeURLs(This,pfInvokeURLs)
+
+#define IWMPSettings2_put_invokeURLs(This,fInvokeURLs) \
+ (This)->lpVtbl -> put_invokeURLs(This,fInvokeURLs)
+
+#define IWMPSettings2_get_mute(This,pfMute) \
+ (This)->lpVtbl -> get_mute(This,pfMute)
+
+#define IWMPSettings2_put_mute(This,fMute) \
+ (This)->lpVtbl -> put_mute(This,fMute)
+
+#define IWMPSettings2_get_playCount(This,plCount) \
+ (This)->lpVtbl -> get_playCount(This,plCount)
+
+#define IWMPSettings2_put_playCount(This,lCount) \
+ (This)->lpVtbl -> put_playCount(This,lCount)
+
+#define IWMPSettings2_get_rate(This,pdRate) \
+ (This)->lpVtbl -> get_rate(This,pdRate)
+
+#define IWMPSettings2_put_rate(This,dRate) \
+ (This)->lpVtbl -> put_rate(This,dRate)
+
+#define IWMPSettings2_get_balance(This,plBalance) \
+ (This)->lpVtbl -> get_balance(This,plBalance)
+
+#define IWMPSettings2_put_balance(This,lBalance) \
+ (This)->lpVtbl -> put_balance(This,lBalance)
+
+#define IWMPSettings2_get_volume(This,plVolume) \
+ (This)->lpVtbl -> get_volume(This,plVolume)
+
+#define IWMPSettings2_put_volume(This,lVolume) \
+ (This)->lpVtbl -> put_volume(This,lVolume)
+
+#define IWMPSettings2_getMode(This,bstrMode,pvarfMode) \
+ (This)->lpVtbl -> getMode(This,bstrMode,pvarfMode)
+
+#define IWMPSettings2_setMode(This,bstrMode,varfMode) \
+ (This)->lpVtbl -> setMode(This,bstrMode,varfMode)
+
+#define IWMPSettings2_get_enableErrorDialogs(This,pfEnableErrorDialogs) \
+ (This)->lpVtbl -> get_enableErrorDialogs(This,pfEnableErrorDialogs)
+
+#define IWMPSettings2_put_enableErrorDialogs(This,fEnableErrorDialogs) \
+ (This)->lpVtbl -> put_enableErrorDialogs(This,fEnableErrorDialogs)
+
+
+#define IWMPSettings2_get_defaultAudioLanguage(This,plLangID) \
+ (This)->lpVtbl -> get_defaultAudioLanguage(This,plLangID)
+
+#define IWMPSettings2_get_mediaAccessRights(This,pbstrRights) \
+ (This)->lpVtbl -> get_mediaAccessRights(This,pbstrRights)
+
+#define IWMPSettings2_requestMediaAccessRights(This,bstrDesiredAccess,pvbAccepted) \
+ (This)->lpVtbl -> requestMediaAccessRights(This,bstrDesiredAccess,pvbAccepted)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings2_get_defaultAudioLanguage_Proxy(
+ IWMPSettings2 * This,
+ /* [retval][out] */ long *plLangID);
+
+
+void __RPC_STUB IWMPSettings2_get_defaultAudioLanguage_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [propget][id] */ HRESULT STDMETHODCALLTYPE IWMPSettings2_get_mediaAccessRights_Proxy(
+ IWMPSettings2 * This,
+ /* [retval][out] */ BSTR *pbstrRights);
+
+
+void __RPC_STUB IWMPSettings2_get_mediaAccessRights_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [id] */ HRESULT STDMETHODCALLTYPE IWMPSettings2_requestMediaAccessRights_Proxy(
+ IWMPSettings2 * This,
+ /* [in] */ BSTR bstrDesiredAccess,
+ /* [retval][out] */ VARIANT_BOOL *pvbAccepted);
+
+
+void __RPC_STUB IWMPSettings2_requestMediaAccessRights_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPSettings2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPControls3_INTERFACE_DEFINED__
+#define __IWMPControls3_INTERFACE_DEFINED__
+
+/* interface IWMPControls3 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPControls3;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("A1D1110E-D545-476a-9A78-AC3E4CB1E6BD")
+ IWMPControls3 : public IWMPControls2
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_audioLanguageCount(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getAudioLanguageID(
+ /* [in] */ long lIndex,
+ /* [retval][out] */ long *plLangID) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getAudioLanguageDescription(
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrLangDesc) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentAudioLanguage(
+ /* [retval][out] */ long *plLangID) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_currentAudioLanguage(
+ /* [in] */ long lLangID) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentAudioLanguageIndex(
+ /* [retval][out] */ long *plIndex) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_currentAudioLanguageIndex(
+ /* [in] */ long lIndex) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getLanguageName(
+ /* [in] */ long lLangID,
+ /* [retval][out] */ BSTR *pbstrLangName) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_currentPositionTimecode(
+ /* [retval][out] */ BSTR *bstrTimecode) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_currentPositionTimecode(
+ /* [in] */ BSTR bstrTimecode) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPControls3Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPControls3 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPControls3 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPControls3 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPControls3 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPControls3 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPControls3 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPControls3 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isAvailable )(
+ IWMPControls3 * This,
+ /* [in] */ BSTR bstrItem,
+ /* [retval][out] */ VARIANT_BOOL *pIsAvailable);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *play )(
+ IWMPControls3 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *stop )(
+ IWMPControls3 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *pause )(
+ IWMPControls3 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *fastForward )(
+ IWMPControls3 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *fastReverse )(
+ IWMPControls3 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPosition )(
+ IWMPControls3 * This,
+ /* [retval][out] */ double *pdCurrentPosition);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPosition )(
+ IWMPControls3 * This,
+ /* [in] */ double dCurrentPosition);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPositionString )(
+ IWMPControls3 * This,
+ /* [retval][out] */ BSTR *pbstrCurrentPosition);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *next )(
+ IWMPControls3 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *previous )(
+ IWMPControls3 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentItem )(
+ IWMPControls3 * This,
+ /* [retval][out] */ IWMPMedia **ppIWMPMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentItem )(
+ IWMPControls3 * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMarker )(
+ IWMPControls3 * This,
+ /* [retval][out] */ long *plMarker);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMarker )(
+ IWMPControls3 * This,
+ /* [in] */ long lMarker);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *playItem )(
+ IWMPControls3 * This,
+ /* [in] */ IWMPMedia *pIWMPMedia);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *step )(
+ IWMPControls3 * This,
+ /* [in] */ long lStep);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_audioLanguageCount )(
+ IWMPControls3 * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getAudioLanguageID )(
+ IWMPControls3 * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ long *plLangID);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getAudioLanguageDescription )(
+ IWMPControls3 * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrLangDesc);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentAudioLanguage )(
+ IWMPControls3 * This,
+ /* [retval][out] */ long *plLangID);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentAudioLanguage )(
+ IWMPControls3 * This,
+ /* [in] */ long lLangID);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentAudioLanguageIndex )(
+ IWMPControls3 * This,
+ /* [retval][out] */ long *plIndex);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentAudioLanguageIndex )(
+ IWMPControls3 * This,
+ /* [in] */ long lIndex);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getLanguageName )(
+ IWMPControls3 * This,
+ /* [in] */ long lLangID,
+ /* [retval][out] */ BSTR *pbstrLangName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPositionTimecode )(
+ IWMPControls3 * This,
+ /* [retval][out] */ BSTR *bstrTimecode);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPositionTimecode )(
+ IWMPControls3 * This,
+ /* [in] */ BSTR bstrTimecode);
+
+ END_INTERFACE
+ } IWMPControls3Vtbl;
+
+ interface IWMPControls3
+ {
+ CONST_VTBL struct IWMPControls3Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPControls3_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPControls3_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPControls3_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPControls3_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPControls3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPControls3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPControls3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPControls3_get_isAvailable(This,bstrItem,pIsAvailable) \
+ (This)->lpVtbl -> get_isAvailable(This,bstrItem,pIsAvailable)
+
+#define IWMPControls3_play(This) \
+ (This)->lpVtbl -> play(This)
+
+#define IWMPControls3_stop(This) \
+ (This)->lpVtbl -> stop(This)
+
+#define IWMPControls3_pause(This) \
+ (This)->lpVtbl -> pause(This)
+
+#define IWMPControls3_fastForward(This) \
+ (This)->lpVtbl -> fastForward(This)
+
+#define IWMPControls3_fastReverse(This) \
+ (This)->lpVtbl -> fastReverse(This)
+
+#define IWMPControls3_get_currentPosition(This,pdCurrentPosition) \
+ (This)->lpVtbl -> get_currentPosition(This,pdCurrentPosition)
+
+#define IWMPControls3_put_currentPosition(This,dCurrentPosition) \
+ (This)->lpVtbl -> put_currentPosition(This,dCurrentPosition)
+
+#define IWMPControls3_get_currentPositionString(This,pbstrCurrentPosition) \
+ (This)->lpVtbl -> get_currentPositionString(This,pbstrCurrentPosition)
+
+#define IWMPControls3_next(This) \
+ (This)->lpVtbl -> next(This)
+
+#define IWMPControls3_previous(This) \
+ (This)->lpVtbl -> previous(This)
+
+#define IWMPControls3_get_currentItem(This,ppIWMPMedia) \
+ (This)->lpVtbl -> get_currentItem(This,ppIWMPMedia)
+
+#define IWMPControls3_put_currentItem(This,pIWMPMedia) \
+ (This)->lpVtbl -> put_currentItem(This,pIWMPMedia)
+
+#define IWMPControls3_get_currentMarker(This,plMarker) \
+ (This)->lpVtbl -> get_currentMarker(This,plMarker)
+
+#define IWMPControls3_put_currentMarker(This,lMarker) \
+ (This)->lpVtbl -> put_currentMarker(This,lMarker)
+
+#define IWMPControls3_playItem(This,pIWMPMedia) \
+ (This)->lpVtbl -> playItem(This,pIWMPMedia)
+
+
+#define IWMPControls3_step(This,lStep) \
+ (This)->lpVtbl -> step(This,lStep)
+
+
+#define IWMPControls3_get_audioLanguageCount(This,plCount) \
+ (This)->lpVtbl -> get_audioLanguageCount(This,plCount)
+
+#define IWMPControls3_getAudioLanguageID(This,lIndex,plLangID) \
+ (This)->lpVtbl -> getAudioLanguageID(This,lIndex,plLangID)
+
+#define IWMPControls3_getAudioLanguageDescription(This,lIndex,pbstrLangDesc) \
+ (This)->lpVtbl -> getAudioLanguageDescription(This,lIndex,pbstrLangDesc)
+
+#define IWMPControls3_get_currentAudioLanguage(This,plLangID) \
+ (This)->lpVtbl -> get_currentAudioLanguage(This,plLangID)
+
+#define IWMPControls3_put_currentAudioLanguage(This,lLangID) \
+ (This)->lpVtbl -> put_currentAudioLanguage(This,lLangID)
+
+#define IWMPControls3_get_currentAudioLanguageIndex(This,plIndex) \
+ (This)->lpVtbl -> get_currentAudioLanguageIndex(This,plIndex)
+
+#define IWMPControls3_put_currentAudioLanguageIndex(This,lIndex) \
+ (This)->lpVtbl -> put_currentAudioLanguageIndex(This,lIndex)
+
+#define IWMPControls3_getLanguageName(This,lLangID,pbstrLangName) \
+ (This)->lpVtbl -> getLanguageName(This,lLangID,pbstrLangName)
+
+#define IWMPControls3_get_currentPositionTimecode(This,bstrTimecode) \
+ (This)->lpVtbl -> get_currentPositionTimecode(This,bstrTimecode)
+
+#define IWMPControls3_put_currentPositionTimecode(This,bstrTimecode) \
+ (This)->lpVtbl -> put_currentPositionTimecode(This,bstrTimecode)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_get_audioLanguageCount_Proxy(
+ IWMPControls3 * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPControls3_get_audioLanguageCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_getAudioLanguageID_Proxy(
+ IWMPControls3 * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ long *plLangID);
+
+
+void __RPC_STUB IWMPControls3_getAudioLanguageID_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_getAudioLanguageDescription_Proxy(
+ IWMPControls3 * This,
+ /* [in] */ long lIndex,
+ /* [retval][out] */ BSTR *pbstrLangDesc);
+
+
+void __RPC_STUB IWMPControls3_getAudioLanguageDescription_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_get_currentAudioLanguage_Proxy(
+ IWMPControls3 * This,
+ /* [retval][out] */ long *plLangID);
+
+
+void __RPC_STUB IWMPControls3_get_currentAudioLanguage_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_put_currentAudioLanguage_Proxy(
+ IWMPControls3 * This,
+ /* [in] */ long lLangID);
+
+
+void __RPC_STUB IWMPControls3_put_currentAudioLanguage_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_get_currentAudioLanguageIndex_Proxy(
+ IWMPControls3 * This,
+ /* [retval][out] */ long *plIndex);
+
+
+void __RPC_STUB IWMPControls3_get_currentAudioLanguageIndex_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_put_currentAudioLanguageIndex_Proxy(
+ IWMPControls3 * This,
+ /* [in] */ long lIndex);
+
+
+void __RPC_STUB IWMPControls3_put_currentAudioLanguageIndex_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_getLanguageName_Proxy(
+ IWMPControls3 * This,
+ /* [in] */ long lLangID,
+ /* [retval][out] */ BSTR *pbstrLangName);
+
+
+void __RPC_STUB IWMPControls3_getLanguageName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_get_currentPositionTimecode_Proxy(
+ IWMPControls3 * This,
+ /* [retval][out] */ BSTR *bstrTimecode);
+
+
+void __RPC_STUB IWMPControls3_get_currentPositionTimecode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPControls3_put_currentPositionTimecode_Proxy(
+ IWMPControls3 * This,
+ /* [in] */ BSTR bstrTimecode);
+
+
+void __RPC_STUB IWMPControls3_put_currentPositionTimecode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPControls3_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPClosedCaption2_INTERFACE_DEFINED__
+#define __IWMPClosedCaption2_INTERFACE_DEFINED__
+
+/* interface IWMPClosedCaption2 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPClosedCaption2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("350BA78B-6BC8-4113-A5F5-312056934EB6")
+ IWMPClosedCaption2 : public IWMPClosedCaption
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SAMILangCount(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getSAMILangName(
+ /* [in] */ long nIndex,
+ /* [retval][out] */ BSTR *pbstrName) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getSAMILangID(
+ /* [in] */ long nIndex,
+ /* [retval][out] */ long *plLangID) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_SAMIStyleCount(
+ /* [retval][out] */ long *plCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE getSAMIStyleName(
+ /* [in] */ long nIndex,
+ /* [retval][out] */ BSTR *pbstrName) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPClosedCaption2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPClosedCaption2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPClosedCaption2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPClosedCaption2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAMIStyle )(
+ IWMPClosedCaption2 * This,
+ /* [retval][out] */ BSTR *pbstrSAMIStyle);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SAMIStyle )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ BSTR bstrSAMIStyle);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAMILang )(
+ IWMPClosedCaption2 * This,
+ /* [retval][out] */ BSTR *pbstrSAMILang);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SAMILang )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ BSTR bstrSAMILang);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAMIFileName )(
+ IWMPClosedCaption2 * This,
+ /* [retval][out] */ BSTR *pbstrSAMIFileName);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_SAMIFileName )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ BSTR bstrSAMIFileName);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_captioningId )(
+ IWMPClosedCaption2 * This,
+ /* [retval][out] */ BSTR *pbstrCaptioningID);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_captioningId )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ BSTR bstrCaptioningID);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAMILangCount )(
+ IWMPClosedCaption2 * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getSAMILangName )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ long nIndex,
+ /* [retval][out] */ BSTR *pbstrName);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getSAMILangID )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ long nIndex,
+ /* [retval][out] */ long *plLangID);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_SAMIStyleCount )(
+ IWMPClosedCaption2 * This,
+ /* [retval][out] */ long *plCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *getSAMIStyleName )(
+ IWMPClosedCaption2 * This,
+ /* [in] */ long nIndex,
+ /* [retval][out] */ BSTR *pbstrName);
+
+ END_INTERFACE
+ } IWMPClosedCaption2Vtbl;
+
+ interface IWMPClosedCaption2
+ {
+ CONST_VTBL struct IWMPClosedCaption2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPClosedCaption2_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPClosedCaption2_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPClosedCaption2_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPClosedCaption2_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPClosedCaption2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPClosedCaption2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPClosedCaption2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPClosedCaption2_get_SAMIStyle(This,pbstrSAMIStyle) \
+ (This)->lpVtbl -> get_SAMIStyle(This,pbstrSAMIStyle)
+
+#define IWMPClosedCaption2_put_SAMIStyle(This,bstrSAMIStyle) \
+ (This)->lpVtbl -> put_SAMIStyle(This,bstrSAMIStyle)
+
+#define IWMPClosedCaption2_get_SAMILang(This,pbstrSAMILang) \
+ (This)->lpVtbl -> get_SAMILang(This,pbstrSAMILang)
+
+#define IWMPClosedCaption2_put_SAMILang(This,bstrSAMILang) \
+ (This)->lpVtbl -> put_SAMILang(This,bstrSAMILang)
+
+#define IWMPClosedCaption2_get_SAMIFileName(This,pbstrSAMIFileName) \
+ (This)->lpVtbl -> get_SAMIFileName(This,pbstrSAMIFileName)
+
+#define IWMPClosedCaption2_put_SAMIFileName(This,bstrSAMIFileName) \
+ (This)->lpVtbl -> put_SAMIFileName(This,bstrSAMIFileName)
+
+#define IWMPClosedCaption2_get_captioningId(This,pbstrCaptioningID) \
+ (This)->lpVtbl -> get_captioningId(This,pbstrCaptioningID)
+
+#define IWMPClosedCaption2_put_captioningId(This,bstrCaptioningID) \
+ (This)->lpVtbl -> put_captioningId(This,bstrCaptioningID)
+
+
+#define IWMPClosedCaption2_get_SAMILangCount(This,plCount) \
+ (This)->lpVtbl -> get_SAMILangCount(This,plCount)
+
+#define IWMPClosedCaption2_getSAMILangName(This,nIndex,pbstrName) \
+ (This)->lpVtbl -> getSAMILangName(This,nIndex,pbstrName)
+
+#define IWMPClosedCaption2_getSAMILangID(This,nIndex,plLangID) \
+ (This)->lpVtbl -> getSAMILangID(This,nIndex,plLangID)
+
+#define IWMPClosedCaption2_get_SAMIStyleCount(This,plCount) \
+ (This)->lpVtbl -> get_SAMIStyleCount(This,plCount)
+
+#define IWMPClosedCaption2_getSAMIStyleName(This,nIndex,pbstrName) \
+ (This)->lpVtbl -> getSAMIStyleName(This,nIndex,pbstrName)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption2_get_SAMILangCount_Proxy(
+ IWMPClosedCaption2 * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPClosedCaption2_get_SAMILangCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption2_getSAMILangName_Proxy(
+ IWMPClosedCaption2 * This,
+ /* [in] */ long nIndex,
+ /* [retval][out] */ BSTR *pbstrName);
+
+
+void __RPC_STUB IWMPClosedCaption2_getSAMILangName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption2_getSAMILangID_Proxy(
+ IWMPClosedCaption2 * This,
+ /* [in] */ long nIndex,
+ /* [retval][out] */ long *plLangID);
+
+
+void __RPC_STUB IWMPClosedCaption2_getSAMILangID_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption2_get_SAMIStyleCount_Proxy(
+ IWMPClosedCaption2 * This,
+ /* [retval][out] */ long *plCount);
+
+
+void __RPC_STUB IWMPClosedCaption2_get_SAMIStyleCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPClosedCaption2_getSAMIStyleName_Proxy(
+ IWMPClosedCaption2 * This,
+ /* [in] */ long nIndex,
+ /* [retval][out] */ BSTR *pbstrName);
+
+
+void __RPC_STUB IWMPClosedCaption2_getSAMIStyleName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPClosedCaption2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlayerApplication_INTERFACE_DEFINED__
+#define __IWMPPlayerApplication_INTERFACE_DEFINED__
+
+/* interface IWMPPlayerApplication */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlayerApplication;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("40897764-CEAB-47be-AD4A-8E28537F9BBF")
+ IWMPPlayerApplication : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE switchToPlayerApplication( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE switchToControl( void) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_playerDocked(
+ /* [retval][out] */ VARIANT_BOOL *pbPlayerDocked) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_hasDisplay(
+ /* [retval][out] */ VARIANT_BOOL *pbHasDisplay) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlayerApplicationVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlayerApplication * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlayerApplication * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlayerApplication * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPPlayerApplication * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPPlayerApplication * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPPlayerApplication * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPPlayerApplication * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *switchToPlayerApplication )(
+ IWMPPlayerApplication * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *switchToControl )(
+ IWMPPlayerApplication * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playerDocked )(
+ IWMPPlayerApplication * This,
+ /* [retval][out] */ VARIANT_BOOL *pbPlayerDocked);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_hasDisplay )(
+ IWMPPlayerApplication * This,
+ /* [retval][out] */ VARIANT_BOOL *pbHasDisplay);
+
+ END_INTERFACE
+ } IWMPPlayerApplicationVtbl;
+
+ interface IWMPPlayerApplication
+ {
+ CONST_VTBL struct IWMPPlayerApplicationVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlayerApplication_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlayerApplication_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlayerApplication_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlayerApplication_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPPlayerApplication_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPPlayerApplication_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPPlayerApplication_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPPlayerApplication_switchToPlayerApplication(This) \
+ (This)->lpVtbl -> switchToPlayerApplication(This)
+
+#define IWMPPlayerApplication_switchToControl(This) \
+ (This)->lpVtbl -> switchToControl(This)
+
+#define IWMPPlayerApplication_get_playerDocked(This,pbPlayerDocked) \
+ (This)->lpVtbl -> get_playerDocked(This,pbPlayerDocked)
+
+#define IWMPPlayerApplication_get_hasDisplay(This,pbHasDisplay) \
+ (This)->lpVtbl -> get_hasDisplay(This,pbHasDisplay)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayerApplication_switchToPlayerApplication_Proxy(
+ IWMPPlayerApplication * This);
+
+
+void __RPC_STUB IWMPPlayerApplication_switchToPlayerApplication_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayerApplication_switchToControl_Proxy(
+ IWMPPlayerApplication * This);
+
+
+void __RPC_STUB IWMPPlayerApplication_switchToControl_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayerApplication_get_playerDocked_Proxy(
+ IWMPPlayerApplication * This,
+ /* [retval][out] */ VARIANT_BOOL *pbPlayerDocked);
+
+
+void __RPC_STUB IWMPPlayerApplication_get_playerDocked_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayerApplication_get_hasDisplay_Proxy(
+ IWMPPlayerApplication * This,
+ /* [retval][out] */ VARIANT_BOOL *pbHasDisplay);
+
+
+void __RPC_STUB IWMPPlayerApplication_get_hasDisplay_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlayerApplication_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPCore3_INTERFACE_DEFINED__
+#define __IWMPCore3_INTERFACE_DEFINED__
+
+/* interface IWMPCore3 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPCore3;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("7587C667-628F-499f-88E7-6A6F4E888464")
+ IWMPCore3 : public IWMPCore2
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE newPlaylist(
+ /* [in] */ BSTR bstrName,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPPlaylist **ppPlaylist) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE newMedia(
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPMedia **ppMedia) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPCore3Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPCore3 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPCore3 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPCore3 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPCore3 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPCore3 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPCore3 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPCore3 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *close )(
+ IWMPCore3 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URL )(
+ IWMPCore3 * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_URL )(
+ IWMPCore3 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_openState )(
+ IWMPCore3 * This,
+ /* [retval][out] */ WMPOpenState *pwmpos);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playState )(
+ IWMPCore3 * This,
+ /* [retval][out] */ WMPPlayState *pwmpps);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_controls )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPControls **ppControl);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_settings )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPSettings **ppSettings);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMedia )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMedia )(
+ IWMPCore3 * This,
+ /* [in] */ IWMPMedia *pMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mediaCollection )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playlistCollection )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_versionInfo )(
+ IWMPCore3 * This,
+ /* [retval][out] */ BSTR *pbstrVersionInfo);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *launchURL )(
+ IWMPCore3 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_network )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPNetwork **ppQNI);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPlaylist )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPPlaylist **ppPL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPlaylist )(
+ IWMPCore3 * This,
+ /* [in] */ IWMPPlaylist *pPL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_cdromCollection )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_closedCaption )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isOnline )(
+ IWMPCore3 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfOnline);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPError **ppError);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_status )(
+ IWMPCore3 * This,
+ /* [retval][out] */ BSTR *pbstrStatus);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_dvd )(
+ IWMPCore3 * This,
+ /* [retval][out] */ IWMPDVD **ppDVD);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *newPlaylist )(
+ IWMPCore3 * This,
+ /* [in] */ BSTR bstrName,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPPlaylist **ppPlaylist);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *newMedia )(
+ IWMPCore3 * This,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ END_INTERFACE
+ } IWMPCore3Vtbl;
+
+ interface IWMPCore3
+ {
+ CONST_VTBL struct IWMPCore3Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPCore3_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPCore3_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPCore3_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPCore3_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPCore3_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPCore3_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPCore3_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPCore3_close(This) \
+ (This)->lpVtbl -> close(This)
+
+#define IWMPCore3_get_URL(This,pbstrURL) \
+ (This)->lpVtbl -> get_URL(This,pbstrURL)
+
+#define IWMPCore3_put_URL(This,bstrURL) \
+ (This)->lpVtbl -> put_URL(This,bstrURL)
+
+#define IWMPCore3_get_openState(This,pwmpos) \
+ (This)->lpVtbl -> get_openState(This,pwmpos)
+
+#define IWMPCore3_get_playState(This,pwmpps) \
+ (This)->lpVtbl -> get_playState(This,pwmpps)
+
+#define IWMPCore3_get_controls(This,ppControl) \
+ (This)->lpVtbl -> get_controls(This,ppControl)
+
+#define IWMPCore3_get_settings(This,ppSettings) \
+ (This)->lpVtbl -> get_settings(This,ppSettings)
+
+#define IWMPCore3_get_currentMedia(This,ppMedia) \
+ (This)->lpVtbl -> get_currentMedia(This,ppMedia)
+
+#define IWMPCore3_put_currentMedia(This,pMedia) \
+ (This)->lpVtbl -> put_currentMedia(This,pMedia)
+
+#define IWMPCore3_get_mediaCollection(This,ppMediaCollection) \
+ (This)->lpVtbl -> get_mediaCollection(This,ppMediaCollection)
+
+#define IWMPCore3_get_playlistCollection(This,ppPlaylistCollection) \
+ (This)->lpVtbl -> get_playlistCollection(This,ppPlaylistCollection)
+
+#define IWMPCore3_get_versionInfo(This,pbstrVersionInfo) \
+ (This)->lpVtbl -> get_versionInfo(This,pbstrVersionInfo)
+
+#define IWMPCore3_launchURL(This,bstrURL) \
+ (This)->lpVtbl -> launchURL(This,bstrURL)
+
+#define IWMPCore3_get_network(This,ppQNI) \
+ (This)->lpVtbl -> get_network(This,ppQNI)
+
+#define IWMPCore3_get_currentPlaylist(This,ppPL) \
+ (This)->lpVtbl -> get_currentPlaylist(This,ppPL)
+
+#define IWMPCore3_put_currentPlaylist(This,pPL) \
+ (This)->lpVtbl -> put_currentPlaylist(This,pPL)
+
+#define IWMPCore3_get_cdromCollection(This,ppCdromCollection) \
+ (This)->lpVtbl -> get_cdromCollection(This,ppCdromCollection)
+
+#define IWMPCore3_get_closedCaption(This,ppClosedCaption) \
+ (This)->lpVtbl -> get_closedCaption(This,ppClosedCaption)
+
+#define IWMPCore3_get_isOnline(This,pfOnline) \
+ (This)->lpVtbl -> get_isOnline(This,pfOnline)
+
+#define IWMPCore3_get_error(This,ppError) \
+ (This)->lpVtbl -> get_error(This,ppError)
+
+#define IWMPCore3_get_status(This,pbstrStatus) \
+ (This)->lpVtbl -> get_status(This,pbstrStatus)
+
+
+#define IWMPCore3_get_dvd(This,ppDVD) \
+ (This)->lpVtbl -> get_dvd(This,ppDVD)
+
+
+#define IWMPCore3_newPlaylist(This,bstrName,bstrURL,ppPlaylist) \
+ (This)->lpVtbl -> newPlaylist(This,bstrName,bstrURL,ppPlaylist)
+
+#define IWMPCore3_newMedia(This,bstrURL,ppMedia) \
+ (This)->lpVtbl -> newMedia(This,bstrURL,ppMedia)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPCore3_newPlaylist_Proxy(
+ IWMPCore3 * This,
+ /* [in] */ BSTR bstrName,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPPlaylist **ppPlaylist);
+
+
+void __RPC_STUB IWMPCore3_newPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPCore3_newMedia_Proxy(
+ IWMPCore3 * This,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+
+void __RPC_STUB IWMPCore3_newMedia_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPCore3_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlayer4_INTERFACE_DEFINED__
+#define __IWMPPlayer4_INTERFACE_DEFINED__
+
+/* interface IWMPPlayer4 */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlayer4;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6C497D62-8919-413c-82DB-E935FB3EC584")
+ IWMPPlayer4 : public IWMPCore3
+ {
+ public:
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enabled(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enabled(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_fullScreen(
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_fullScreen(
+ VARIANT_BOOL bFullScreen) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_enableContextMenu(
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_enableContextMenu(
+ VARIANT_BOOL bEnableContextMenu) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_uiMode(
+ /* [in] */ BSTR bstrMode) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_uiMode(
+ /* [retval][out] */ BSTR *pbstrMode) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_stretchToFit(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_stretchToFit(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_windowlessVideo(
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled) = 0;
+
+ virtual /* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE put_windowlessVideo(
+ /* [in] */ VARIANT_BOOL bEnabled) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_isRemote(
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsRemote) = 0;
+
+ virtual /* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE get_playerApplication(
+ /* [retval][out] */ IWMPPlayerApplication **ppIWMPPlayerApplication) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE openPlayer(
+ /* [in] */ BSTR bstrURL) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlayer4Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlayer4 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlayer4 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlayer4 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IWMPPlayer4 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IWMPPlayer4 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IWMPPlayer4 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IWMPPlayer4 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *close )(
+ IWMPPlayer4 * This);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_URL )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ BSTR *pbstrURL);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_URL )(
+ IWMPPlayer4 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_openState )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ WMPOpenState *pwmpos);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playState )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ WMPPlayState *pwmpps);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_controls )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPControls **ppControl);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_settings )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPSettings **ppSettings);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentMedia )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ /* [propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentMedia )(
+ IWMPPlayer4 * This,
+ /* [in] */ IWMPMedia *pMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_mediaCollection )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPMediaCollection **ppMediaCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playlistCollection )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPPlaylistCollection **ppPlaylistCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_versionInfo )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ BSTR *pbstrVersionInfo);
+
+ /* [id] */ HRESULT ( STDMETHODCALLTYPE *launchURL )(
+ IWMPPlayer4 * This,
+ /* [in] */ BSTR bstrURL);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_network )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPNetwork **ppQNI);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_currentPlaylist )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPPlaylist **ppPL);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_currentPlaylist )(
+ IWMPPlayer4 * This,
+ /* [in] */ IWMPPlaylist *pPL);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_cdromCollection )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPCdromCollection **ppCdromCollection);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_closedCaption )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPClosedCaption **ppClosedCaption);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isOnline )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pfOnline);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_error )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPError **ppError);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_status )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ BSTR *pbstrStatus);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_dvd )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPDVD **ppDVD);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *newPlaylist )(
+ IWMPPlayer4 * This,
+ /* [in] */ BSTR bstrName,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPPlaylist **ppPlaylist);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *newMedia )(
+ IWMPPlayer4 * This,
+ /* [in] */ BSTR bstrURL,
+ /* [retval][out] */ IWMPMedia **ppMedia);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enabled )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enabled )(
+ IWMPPlayer4 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_fullScreen )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_fullScreen )(
+ IWMPPlayer4 * This,
+ VARIANT_BOOL bFullScreen);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_enableContextMenu )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_enableContextMenu )(
+ IWMPPlayer4 * This,
+ VARIANT_BOOL bEnableContextMenu);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_uiMode )(
+ IWMPPlayer4 * This,
+ /* [in] */ BSTR bstrMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_uiMode )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ BSTR *pbstrMode);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_stretchToFit )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_stretchToFit )(
+ IWMPPlayer4 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_windowlessVideo )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+ /* [helpstring][propput][id] */ HRESULT ( STDMETHODCALLTYPE *put_windowlessVideo )(
+ IWMPPlayer4 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_isRemote )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsRemote);
+
+ /* [helpstring][propget][id] */ HRESULT ( STDMETHODCALLTYPE *get_playerApplication )(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPPlayerApplication **ppIWMPPlayerApplication);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *openPlayer )(
+ IWMPPlayer4 * This,
+ /* [in] */ BSTR bstrURL);
+
+ END_INTERFACE
+ } IWMPPlayer4Vtbl;
+
+ interface IWMPPlayer4
+ {
+ CONST_VTBL struct IWMPPlayer4Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlayer4_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlayer4_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlayer4_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlayer4_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IWMPPlayer4_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IWMPPlayer4_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IWMPPlayer4_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IWMPPlayer4_close(This) \
+ (This)->lpVtbl -> close(This)
+
+#define IWMPPlayer4_get_URL(This,pbstrURL) \
+ (This)->lpVtbl -> get_URL(This,pbstrURL)
+
+#define IWMPPlayer4_put_URL(This,bstrURL) \
+ (This)->lpVtbl -> put_URL(This,bstrURL)
+
+#define IWMPPlayer4_get_openState(This,pwmpos) \
+ (This)->lpVtbl -> get_openState(This,pwmpos)
+
+#define IWMPPlayer4_get_playState(This,pwmpps) \
+ (This)->lpVtbl -> get_playState(This,pwmpps)
+
+#define IWMPPlayer4_get_controls(This,ppControl) \
+ (This)->lpVtbl -> get_controls(This,ppControl)
+
+#define IWMPPlayer4_get_settings(This,ppSettings) \
+ (This)->lpVtbl -> get_settings(This,ppSettings)
+
+#define IWMPPlayer4_get_currentMedia(This,ppMedia) \
+ (This)->lpVtbl -> get_currentMedia(This,ppMedia)
+
+#define IWMPPlayer4_put_currentMedia(This,pMedia) \
+ (This)->lpVtbl -> put_currentMedia(This,pMedia)
+
+#define IWMPPlayer4_get_mediaCollection(This,ppMediaCollection) \
+ (This)->lpVtbl -> get_mediaCollection(This,ppMediaCollection)
+
+#define IWMPPlayer4_get_playlistCollection(This,ppPlaylistCollection) \
+ (This)->lpVtbl -> get_playlistCollection(This,ppPlaylistCollection)
+
+#define IWMPPlayer4_get_versionInfo(This,pbstrVersionInfo) \
+ (This)->lpVtbl -> get_versionInfo(This,pbstrVersionInfo)
+
+#define IWMPPlayer4_launchURL(This,bstrURL) \
+ (This)->lpVtbl -> launchURL(This,bstrURL)
+
+#define IWMPPlayer4_get_network(This,ppQNI) \
+ (This)->lpVtbl -> get_network(This,ppQNI)
+
+#define IWMPPlayer4_get_currentPlaylist(This,ppPL) \
+ (This)->lpVtbl -> get_currentPlaylist(This,ppPL)
+
+#define IWMPPlayer4_put_currentPlaylist(This,pPL) \
+ (This)->lpVtbl -> put_currentPlaylist(This,pPL)
+
+#define IWMPPlayer4_get_cdromCollection(This,ppCdromCollection) \
+ (This)->lpVtbl -> get_cdromCollection(This,ppCdromCollection)
+
+#define IWMPPlayer4_get_closedCaption(This,ppClosedCaption) \
+ (This)->lpVtbl -> get_closedCaption(This,ppClosedCaption)
+
+#define IWMPPlayer4_get_isOnline(This,pfOnline) \
+ (This)->lpVtbl -> get_isOnline(This,pfOnline)
+
+#define IWMPPlayer4_get_error(This,ppError) \
+ (This)->lpVtbl -> get_error(This,ppError)
+
+#define IWMPPlayer4_get_status(This,pbstrStatus) \
+ (This)->lpVtbl -> get_status(This,pbstrStatus)
+
+
+#define IWMPPlayer4_get_dvd(This,ppDVD) \
+ (This)->lpVtbl -> get_dvd(This,ppDVD)
+
+
+#define IWMPPlayer4_newPlaylist(This,bstrName,bstrURL,ppPlaylist) \
+ (This)->lpVtbl -> newPlaylist(This,bstrName,bstrURL,ppPlaylist)
+
+#define IWMPPlayer4_newMedia(This,bstrURL,ppMedia) \
+ (This)->lpVtbl -> newMedia(This,bstrURL,ppMedia)
+
+
+#define IWMPPlayer4_get_enabled(This,pbEnabled) \
+ (This)->lpVtbl -> get_enabled(This,pbEnabled)
+
+#define IWMPPlayer4_put_enabled(This,bEnabled) \
+ (This)->lpVtbl -> put_enabled(This,bEnabled)
+
+#define IWMPPlayer4_get_fullScreen(This,pbFullScreen) \
+ (This)->lpVtbl -> get_fullScreen(This,pbFullScreen)
+
+#define IWMPPlayer4_put_fullScreen(This,bFullScreen) \
+ (This)->lpVtbl -> put_fullScreen(This,bFullScreen)
+
+#define IWMPPlayer4_get_enableContextMenu(This,pbEnableContextMenu) \
+ (This)->lpVtbl -> get_enableContextMenu(This,pbEnableContextMenu)
+
+#define IWMPPlayer4_put_enableContextMenu(This,bEnableContextMenu) \
+ (This)->lpVtbl -> put_enableContextMenu(This,bEnableContextMenu)
+
+#define IWMPPlayer4_put_uiMode(This,bstrMode) \
+ (This)->lpVtbl -> put_uiMode(This,bstrMode)
+
+#define IWMPPlayer4_get_uiMode(This,pbstrMode) \
+ (This)->lpVtbl -> get_uiMode(This,pbstrMode)
+
+#define IWMPPlayer4_get_stretchToFit(This,pbEnabled) \
+ (This)->lpVtbl -> get_stretchToFit(This,pbEnabled)
+
+#define IWMPPlayer4_put_stretchToFit(This,bEnabled) \
+ (This)->lpVtbl -> put_stretchToFit(This,bEnabled)
+
+#define IWMPPlayer4_get_windowlessVideo(This,pbEnabled) \
+ (This)->lpVtbl -> get_windowlessVideo(This,pbEnabled)
+
+#define IWMPPlayer4_put_windowlessVideo(This,bEnabled) \
+ (This)->lpVtbl -> put_windowlessVideo(This,bEnabled)
+
+#define IWMPPlayer4_get_isRemote(This,pvarfIsRemote) \
+ (This)->lpVtbl -> get_isRemote(This,pvarfIsRemote)
+
+#define IWMPPlayer4_get_playerApplication(This,ppIWMPPlayerApplication) \
+ (This)->lpVtbl -> get_playerApplication(This,ppIWMPPlayerApplication)
+
+#define IWMPPlayer4_openPlayer(This,bstrURL) \
+ (This)->lpVtbl -> openPlayer(This,bstrURL)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_get_enabled_Proxy(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer4_get_enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_put_enabled_Proxy(
+ IWMPPlayer4 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer4_put_enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_get_fullScreen_Proxy(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbFullScreen);
+
+
+void __RPC_STUB IWMPPlayer4_get_fullScreen_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_put_fullScreen_Proxy(
+ IWMPPlayer4 * This,
+ VARIANT_BOOL bFullScreen);
+
+
+void __RPC_STUB IWMPPlayer4_put_fullScreen_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_get_enableContextMenu_Proxy(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnableContextMenu);
+
+
+void __RPC_STUB IWMPPlayer4_get_enableContextMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_put_enableContextMenu_Proxy(
+ IWMPPlayer4 * This,
+ VARIANT_BOOL bEnableContextMenu);
+
+
+void __RPC_STUB IWMPPlayer4_put_enableContextMenu_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_put_uiMode_Proxy(
+ IWMPPlayer4 * This,
+ /* [in] */ BSTR bstrMode);
+
+
+void __RPC_STUB IWMPPlayer4_put_uiMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_get_uiMode_Proxy(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ BSTR *pbstrMode);
+
+
+void __RPC_STUB IWMPPlayer4_get_uiMode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_get_stretchToFit_Proxy(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer4_get_stretchToFit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_put_stretchToFit_Proxy(
+ IWMPPlayer4 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer4_put_stretchToFit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_get_windowlessVideo_Proxy(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pbEnabled);
+
+
+void __RPC_STUB IWMPPlayer4_get_windowlessVideo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_put_windowlessVideo_Proxy(
+ IWMPPlayer4 * This,
+ /* [in] */ VARIANT_BOOL bEnabled);
+
+
+void __RPC_STUB IWMPPlayer4_put_windowlessVideo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_get_isRemote_Proxy(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ VARIANT_BOOL *pvarfIsRemote);
+
+
+void __RPC_STUB IWMPPlayer4_get_isRemote_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_get_playerApplication_Proxy(
+ IWMPPlayer4 * This,
+ /* [retval][out] */ IWMPPlayerApplication **ppIWMPPlayerApplication);
+
+
+void __RPC_STUB IWMPPlayer4_get_playerApplication_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IWMPPlayer4_openPlayer_Proxy(
+ IWMPPlayer4 * This,
+ /* [in] */ BSTR bstrURL);
+
+
+void __RPC_STUB IWMPPlayer4_openPlayer_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlayer4_INTERFACE_DEFINED__ */
+
+
+#ifndef __IWMPPlayerServices_INTERFACE_DEFINED__
+#define __IWMPPlayerServices_INTERFACE_DEFINED__
+
+/* interface IWMPPlayerServices */
+/* [unique][helpstring][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPPlayerServices;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("1D01FBDB-ADE2-4c8d-9842-C190B95C3306")
+ IWMPPlayerServices : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE activateUIPlugin(
+ /* [in] */ BSTR bstrPlugin) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setTaskPane(
+ /* [in] */ BSTR bstrTaskPane) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setTaskPaneURL(
+ /* [in] */ BSTR bstrTaskPane,
+ /* [in] */ BSTR bstrURL,
+ /* [in] */ BSTR bstrFriendlyName) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPPlayerServicesVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPPlayerServices * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPPlayerServices * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPPlayerServices * This);
+
+ HRESULT ( STDMETHODCALLTYPE *activateUIPlugin )(
+ IWMPPlayerServices * This,
+ /* [in] */ BSTR bstrPlugin);
+
+ HRESULT ( STDMETHODCALLTYPE *setTaskPane )(
+ IWMPPlayerServices * This,
+ /* [in] */ BSTR bstrTaskPane);
+
+ HRESULT ( STDMETHODCALLTYPE *setTaskPaneURL )(
+ IWMPPlayerServices * This,
+ /* [in] */ BSTR bstrTaskPane,
+ /* [in] */ BSTR bstrURL,
+ /* [in] */ BSTR bstrFriendlyName);
+
+ END_INTERFACE
+ } IWMPPlayerServicesVtbl;
+
+ interface IWMPPlayerServices
+ {
+ CONST_VTBL struct IWMPPlayerServicesVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPPlayerServices_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPPlayerServices_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPPlayerServices_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPPlayerServices_activateUIPlugin(This,bstrPlugin) \
+ (This)->lpVtbl -> activateUIPlugin(This,bstrPlugin)
+
+#define IWMPPlayerServices_setTaskPane(This,bstrTaskPane) \
+ (This)->lpVtbl -> setTaskPane(This,bstrTaskPane)
+
+#define IWMPPlayerServices_setTaskPaneURL(This,bstrTaskPane,bstrURL,bstrFriendlyName) \
+ (This)->lpVtbl -> setTaskPaneURL(This,bstrTaskPane,bstrURL,bstrFriendlyName)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+HRESULT STDMETHODCALLTYPE IWMPPlayerServices_activateUIPlugin_Proxy(
+ IWMPPlayerServices * This,
+ /* [in] */ BSTR bstrPlugin);
+
+
+void __RPC_STUB IWMPPlayerServices_activateUIPlugin_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IWMPPlayerServices_setTaskPane_Proxy(
+ IWMPPlayerServices * This,
+ /* [in] */ BSTR bstrTaskPane);
+
+
+void __RPC_STUB IWMPPlayerServices_setTaskPane_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+HRESULT STDMETHODCALLTYPE IWMPPlayerServices_setTaskPaneURL_Proxy(
+ IWMPPlayerServices * This,
+ /* [in] */ BSTR bstrTaskPane,
+ /* [in] */ BSTR bstrURL,
+ /* [in] */ BSTR bstrFriendlyName);
+
+
+void __RPC_STUB IWMPPlayerServices_setTaskPaneURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPPlayerServices_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_wmp_0292 */
+/* [local] */
+
+struct DECLSPEC_UUID("6BF52A50-394A-11d3-B153-00C04F79FAA6") WMPLib;
+struct DECLSPEC_UUID("DF333473-2CF7-4be2-907F-9AAD5661364F") WMPRemoteMediaServices;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_wmp_0292_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_wmp_0292_v0_0_s_ifspec;
+
+
+#ifndef __WMPLib_LIBRARY_DEFINED__
+#define __WMPLib_LIBRARY_DEFINED__
+
+/* library WMPLib */
+/* [helpstring][version][uuid] */
+
+
+EXTERN_C const IID LIBID_WMPLib;
+
+#ifndef __IWMPEvents_INTERFACE_DEFINED__
+#define __IWMPEvents_INTERFACE_DEFINED__
+
+/* interface IWMPEvents */
+/* [unique][helpstring][uuid][object] */
+
+
+EXTERN_C const IID IID_IWMPEvents;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("19A6627B-DA9E-47c1-BB23-00B5E668236A")
+ IWMPEvents : public IUnknown
+ {
+ public:
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE OpenStateChange(
+ /* [in] */ long NewState) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PlayStateChange(
+ /* [in] */ long NewState) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE AudioLanguageChange(
+ /* [in] */ long LangID) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE StatusChange( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE ScriptCommand(
+ /* [in] */ BSTR scType,
+ /* [in] */ BSTR Param) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE NewStream( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE Disconnect(
+ /* [in] */ long Result) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE Buffering(
+ /* [in] */ VARIANT_BOOL Start) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE Error( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE Warning(
+ /* [in] */ long WarningType,
+ /* [in] */ long Param,
+ /* [in] */ BSTR Description) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE EndOfStream(
+ /* [in] */ long Result) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PositionChange(
+ /* [in] */ double oldPosition,
+ /* [in] */ double newPosition) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MarkerHit(
+ /* [in] */ long MarkerNum) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE DurationUnitChange(
+ /* [in] */ long NewDurationUnit) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE CdromMediaChange(
+ /* [in] */ long CdromNum) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PlaylistChange(
+ /* [in] */ IDispatch *Playlist,
+ /* [in] */ WMPPlaylistChangeEventType change) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE CurrentPlaylistChange(
+ /* [in] */ WMPPlaylistChangeEventType change) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE CurrentPlaylistItemAvailable(
+ /* [in] */ BSTR bstrItemName) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MediaChange(
+ /* [in] */ IDispatch *Item) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE CurrentMediaItemAvailable(
+ /* [in] */ BSTR bstrItemName) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE CurrentItemChange(
+ /* [in] */ IDispatch *pdispMedia) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MediaCollectionChange( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MediaCollectionAttributeStringAdded(
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrAttribVal) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MediaCollectionAttributeStringRemoved(
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrAttribVal) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MediaCollectionAttributeStringChanged(
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrOldAttribVal,
+ /* [in] */ BSTR bstrNewAttribVal) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PlaylistCollectionChange( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PlaylistCollectionPlaylistAdded(
+ /* [in] */ BSTR bstrPlaylistName) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PlaylistCollectionPlaylistRemoved(
+ /* [in] */ BSTR bstrPlaylistName) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PlaylistCollectionPlaylistSetAsDeleted(
+ /* [in] */ BSTR bstrPlaylistName,
+ /* [in] */ VARIANT_BOOL varfIsDeleted) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE ModeChange(
+ /* [in] */ BSTR ModeName,
+ /* [in] */ VARIANT_BOOL NewValue) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MediaError(
+ /* [in] */ IDispatch *pMediaObject) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE OpenPlaylistSwitch(
+ /* [in] */ IDispatch *pItem) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE DomainChange(
+ /* [in] */ BSTR strDomain) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE SwitchedToPlayerApplication( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE SwitchedToControl( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PlayerDockedStateChange( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE PlayerReconnect( void) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE Click(
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE DoubleClick(
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE KeyDown(
+ /* [in] */ short nKeyCode,
+ /* [in] */ short nShiftState) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE KeyPress(
+ /* [in] */ short nKeyAscii) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE KeyUp(
+ /* [in] */ short nKeyCode,
+ /* [in] */ short nShiftState) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MouseDown(
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MouseMove(
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY) = 0;
+
+ virtual /* [helpstring][id] */ void STDMETHODCALLTYPE MouseUp(
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IWMPEventsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IWMPEvents * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IWMPEvents * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *OpenStateChange )(
+ IWMPEvents * This,
+ /* [in] */ long NewState);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PlayStateChange )(
+ IWMPEvents * This,
+ /* [in] */ long NewState);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *AudioLanguageChange )(
+ IWMPEvents * This,
+ /* [in] */ long LangID);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *StatusChange )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *ScriptCommand )(
+ IWMPEvents * This,
+ /* [in] */ BSTR scType,
+ /* [in] */ BSTR Param);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *NewStream )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *Disconnect )(
+ IWMPEvents * This,
+ /* [in] */ long Result);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *Buffering )(
+ IWMPEvents * This,
+ /* [in] */ VARIANT_BOOL Start);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *Error )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *Warning )(
+ IWMPEvents * This,
+ /* [in] */ long WarningType,
+ /* [in] */ long Param,
+ /* [in] */ BSTR Description);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *EndOfStream )(
+ IWMPEvents * This,
+ /* [in] */ long Result);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PositionChange )(
+ IWMPEvents * This,
+ /* [in] */ double oldPosition,
+ /* [in] */ double newPosition);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MarkerHit )(
+ IWMPEvents * This,
+ /* [in] */ long MarkerNum);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *DurationUnitChange )(
+ IWMPEvents * This,
+ /* [in] */ long NewDurationUnit);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *CdromMediaChange )(
+ IWMPEvents * This,
+ /* [in] */ long CdromNum);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PlaylistChange )(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *Playlist,
+ /* [in] */ WMPPlaylistChangeEventType change);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *CurrentPlaylistChange )(
+ IWMPEvents * This,
+ /* [in] */ WMPPlaylistChangeEventType change);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *CurrentPlaylistItemAvailable )(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrItemName);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MediaChange )(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *Item);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *CurrentMediaItemAvailable )(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrItemName);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *CurrentItemChange )(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *pdispMedia);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MediaCollectionChange )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MediaCollectionAttributeStringAdded )(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrAttribVal);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MediaCollectionAttributeStringRemoved )(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrAttribVal);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MediaCollectionAttributeStringChanged )(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrOldAttribVal,
+ /* [in] */ BSTR bstrNewAttribVal);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PlaylistCollectionChange )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PlaylistCollectionPlaylistAdded )(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrPlaylistName);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PlaylistCollectionPlaylistRemoved )(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrPlaylistName);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PlaylistCollectionPlaylistSetAsDeleted )(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrPlaylistName,
+ /* [in] */ VARIANT_BOOL varfIsDeleted);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *ModeChange )(
+ IWMPEvents * This,
+ /* [in] */ BSTR ModeName,
+ /* [in] */ VARIANT_BOOL NewValue);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MediaError )(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *pMediaObject);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *OpenPlaylistSwitch )(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *pItem);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *DomainChange )(
+ IWMPEvents * This,
+ /* [in] */ BSTR strDomain);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *SwitchedToPlayerApplication )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *SwitchedToControl )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PlayerDockedStateChange )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *PlayerReconnect )(
+ IWMPEvents * This);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *Click )(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *DoubleClick )(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *KeyDown )(
+ IWMPEvents * This,
+ /* [in] */ short nKeyCode,
+ /* [in] */ short nShiftState);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *KeyPress )(
+ IWMPEvents * This,
+ /* [in] */ short nKeyAscii);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *KeyUp )(
+ IWMPEvents * This,
+ /* [in] */ short nKeyCode,
+ /* [in] */ short nShiftState);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MouseDown )(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MouseMove )(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+ /* [helpstring][id] */ void ( STDMETHODCALLTYPE *MouseUp )(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+ END_INTERFACE
+ } IWMPEventsVtbl;
+
+ interface IWMPEvents
+ {
+ CONST_VTBL struct IWMPEventsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IWMPEvents_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IWMPEvents_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IWMPEvents_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IWMPEvents_OpenStateChange(This,NewState) \
+ (This)->lpVtbl -> OpenStateChange(This,NewState)
+
+#define IWMPEvents_PlayStateChange(This,NewState) \
+ (This)->lpVtbl -> PlayStateChange(This,NewState)
+
+#define IWMPEvents_AudioLanguageChange(This,LangID) \
+ (This)->lpVtbl -> AudioLanguageChange(This,LangID)
+
+#define IWMPEvents_StatusChange(This) \
+ (This)->lpVtbl -> StatusChange(This)
+
+#define IWMPEvents_ScriptCommand(This,scType,Param) \
+ (This)->lpVtbl -> ScriptCommand(This,scType,Param)
+
+#define IWMPEvents_NewStream(This) \
+ (This)->lpVtbl -> NewStream(This)
+
+#define IWMPEvents_Disconnect(This,Result) \
+ (This)->lpVtbl -> Disconnect(This,Result)
+
+#define IWMPEvents_Buffering(This,Start) \
+ (This)->lpVtbl -> Buffering(This,Start)
+
+#define IWMPEvents_Error(This) \
+ (This)->lpVtbl -> Error(This)
+
+#define IWMPEvents_Warning(This,WarningType,Param,Description) \
+ (This)->lpVtbl -> Warning(This,WarningType,Param,Description)
+
+#define IWMPEvents_EndOfStream(This,Result) \
+ (This)->lpVtbl -> EndOfStream(This,Result)
+
+#define IWMPEvents_PositionChange(This,oldPosition,newPosition) \
+ (This)->lpVtbl -> PositionChange(This,oldPosition,newPosition)
+
+#define IWMPEvents_MarkerHit(This,MarkerNum) \
+ (This)->lpVtbl -> MarkerHit(This,MarkerNum)
+
+#define IWMPEvents_DurationUnitChange(This,NewDurationUnit) \
+ (This)->lpVtbl -> DurationUnitChange(This,NewDurationUnit)
+
+#define IWMPEvents_CdromMediaChange(This,CdromNum) \
+ (This)->lpVtbl -> CdromMediaChange(This,CdromNum)
+
+#define IWMPEvents_PlaylistChange(This,Playlist,change) \
+ (This)->lpVtbl -> PlaylistChange(This,Playlist,change)
+
+#define IWMPEvents_CurrentPlaylistChange(This,change) \
+ (This)->lpVtbl -> CurrentPlaylistChange(This,change)
+
+#define IWMPEvents_CurrentPlaylistItemAvailable(This,bstrItemName) \
+ (This)->lpVtbl -> CurrentPlaylistItemAvailable(This,bstrItemName)
+
+#define IWMPEvents_MediaChange(This,Item) \
+ (This)->lpVtbl -> MediaChange(This,Item)
+
+#define IWMPEvents_CurrentMediaItemAvailable(This,bstrItemName) \
+ (This)->lpVtbl -> CurrentMediaItemAvailable(This,bstrItemName)
+
+#define IWMPEvents_CurrentItemChange(This,pdispMedia) \
+ (This)->lpVtbl -> CurrentItemChange(This,pdispMedia)
+
+#define IWMPEvents_MediaCollectionChange(This) \
+ (This)->lpVtbl -> MediaCollectionChange(This)
+
+#define IWMPEvents_MediaCollectionAttributeStringAdded(This,bstrAttribName,bstrAttribVal) \
+ (This)->lpVtbl -> MediaCollectionAttributeStringAdded(This,bstrAttribName,bstrAttribVal)
+
+#define IWMPEvents_MediaCollectionAttributeStringRemoved(This,bstrAttribName,bstrAttribVal) \
+ (This)->lpVtbl -> MediaCollectionAttributeStringRemoved(This,bstrAttribName,bstrAttribVal)
+
+#define IWMPEvents_MediaCollectionAttributeStringChanged(This,bstrAttribName,bstrOldAttribVal,bstrNewAttribVal) \
+ (This)->lpVtbl -> MediaCollectionAttributeStringChanged(This,bstrAttribName,bstrOldAttribVal,bstrNewAttribVal)
+
+#define IWMPEvents_PlaylistCollectionChange(This) \
+ (This)->lpVtbl -> PlaylistCollectionChange(This)
+
+#define IWMPEvents_PlaylistCollectionPlaylistAdded(This,bstrPlaylistName) \
+ (This)->lpVtbl -> PlaylistCollectionPlaylistAdded(This,bstrPlaylistName)
+
+#define IWMPEvents_PlaylistCollectionPlaylistRemoved(This,bstrPlaylistName) \
+ (This)->lpVtbl -> PlaylistCollectionPlaylistRemoved(This,bstrPlaylistName)
+
+#define IWMPEvents_PlaylistCollectionPlaylistSetAsDeleted(This,bstrPlaylistName,varfIsDeleted) \
+ (This)->lpVtbl -> PlaylistCollectionPlaylistSetAsDeleted(This,bstrPlaylistName,varfIsDeleted)
+
+#define IWMPEvents_ModeChange(This,ModeName,NewValue) \
+ (This)->lpVtbl -> ModeChange(This,ModeName,NewValue)
+
+#define IWMPEvents_MediaError(This,pMediaObject) \
+ (This)->lpVtbl -> MediaError(This,pMediaObject)
+
+#define IWMPEvents_OpenPlaylistSwitch(This,pItem) \
+ (This)->lpVtbl -> OpenPlaylistSwitch(This,pItem)
+
+#define IWMPEvents_DomainChange(This,strDomain) \
+ (This)->lpVtbl -> DomainChange(This,strDomain)
+
+#define IWMPEvents_SwitchedToPlayerApplication(This) \
+ (This)->lpVtbl -> SwitchedToPlayerApplication(This)
+
+#define IWMPEvents_SwitchedToControl(This) \
+ (This)->lpVtbl -> SwitchedToControl(This)
+
+#define IWMPEvents_PlayerDockedStateChange(This) \
+ (This)->lpVtbl -> PlayerDockedStateChange(This)
+
+#define IWMPEvents_PlayerReconnect(This) \
+ (This)->lpVtbl -> PlayerReconnect(This)
+
+#define IWMPEvents_Click(This,nButton,nShiftState,fX,fY) \
+ (This)->lpVtbl -> Click(This,nButton,nShiftState,fX,fY)
+
+#define IWMPEvents_DoubleClick(This,nButton,nShiftState,fX,fY) \
+ (This)->lpVtbl -> DoubleClick(This,nButton,nShiftState,fX,fY)
+
+#define IWMPEvents_KeyDown(This,nKeyCode,nShiftState) \
+ (This)->lpVtbl -> KeyDown(This,nKeyCode,nShiftState)
+
+#define IWMPEvents_KeyPress(This,nKeyAscii) \
+ (This)->lpVtbl -> KeyPress(This,nKeyAscii)
+
+#define IWMPEvents_KeyUp(This,nKeyCode,nShiftState) \
+ (This)->lpVtbl -> KeyUp(This,nKeyCode,nShiftState)
+
+#define IWMPEvents_MouseDown(This,nButton,nShiftState,fX,fY) \
+ (This)->lpVtbl -> MouseDown(This,nButton,nShiftState,fX,fY)
+
+#define IWMPEvents_MouseMove(This,nButton,nShiftState,fX,fY) \
+ (This)->lpVtbl -> MouseMove(This,nButton,nShiftState,fX,fY)
+
+#define IWMPEvents_MouseUp(This,nButton,nShiftState,fX,fY) \
+ (This)->lpVtbl -> MouseUp(This,nButton,nShiftState,fX,fY)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_OpenStateChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long NewState);
+
+
+void __RPC_STUB IWMPEvents_OpenStateChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PlayStateChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long NewState);
+
+
+void __RPC_STUB IWMPEvents_PlayStateChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_AudioLanguageChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long LangID);
+
+
+void __RPC_STUB IWMPEvents_AudioLanguageChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_StatusChange_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_StatusChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_ScriptCommand_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR scType,
+ /* [in] */ BSTR Param);
+
+
+void __RPC_STUB IWMPEvents_ScriptCommand_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_NewStream_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_NewStream_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_Disconnect_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long Result);
+
+
+void __RPC_STUB IWMPEvents_Disconnect_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_Buffering_Proxy(
+ IWMPEvents * This,
+ /* [in] */ VARIANT_BOOL Start);
+
+
+void __RPC_STUB IWMPEvents_Buffering_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_Error_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_Error_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_Warning_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long WarningType,
+ /* [in] */ long Param,
+ /* [in] */ BSTR Description);
+
+
+void __RPC_STUB IWMPEvents_Warning_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_EndOfStream_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long Result);
+
+
+void __RPC_STUB IWMPEvents_EndOfStream_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PositionChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ double oldPosition,
+ /* [in] */ double newPosition);
+
+
+void __RPC_STUB IWMPEvents_PositionChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MarkerHit_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long MarkerNum);
+
+
+void __RPC_STUB IWMPEvents_MarkerHit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_DurationUnitChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long NewDurationUnit);
+
+
+void __RPC_STUB IWMPEvents_DurationUnitChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_CdromMediaChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ long CdromNum);
+
+
+void __RPC_STUB IWMPEvents_CdromMediaChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PlaylistChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *Playlist,
+ /* [in] */ WMPPlaylistChangeEventType change);
+
+
+void __RPC_STUB IWMPEvents_PlaylistChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_CurrentPlaylistChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ WMPPlaylistChangeEventType change);
+
+
+void __RPC_STUB IWMPEvents_CurrentPlaylistChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_CurrentPlaylistItemAvailable_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrItemName);
+
+
+void __RPC_STUB IWMPEvents_CurrentPlaylistItemAvailable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MediaChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *Item);
+
+
+void __RPC_STUB IWMPEvents_MediaChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_CurrentMediaItemAvailable_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrItemName);
+
+
+void __RPC_STUB IWMPEvents_CurrentMediaItemAvailable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_CurrentItemChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *pdispMedia);
+
+
+void __RPC_STUB IWMPEvents_CurrentItemChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MediaCollectionChange_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_MediaCollectionChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MediaCollectionAttributeStringAdded_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrAttribVal);
+
+
+void __RPC_STUB IWMPEvents_MediaCollectionAttributeStringAdded_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MediaCollectionAttributeStringRemoved_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrAttribVal);
+
+
+void __RPC_STUB IWMPEvents_MediaCollectionAttributeStringRemoved_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MediaCollectionAttributeStringChanged_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrAttribName,
+ /* [in] */ BSTR bstrOldAttribVal,
+ /* [in] */ BSTR bstrNewAttribVal);
+
+
+void __RPC_STUB IWMPEvents_MediaCollectionAttributeStringChanged_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PlaylistCollectionChange_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_PlaylistCollectionChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PlaylistCollectionPlaylistAdded_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrPlaylistName);
+
+
+void __RPC_STUB IWMPEvents_PlaylistCollectionPlaylistAdded_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PlaylistCollectionPlaylistRemoved_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrPlaylistName);
+
+
+void __RPC_STUB IWMPEvents_PlaylistCollectionPlaylistRemoved_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PlaylistCollectionPlaylistSetAsDeleted_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR bstrPlaylistName,
+ /* [in] */ VARIANT_BOOL varfIsDeleted);
+
+
+void __RPC_STUB IWMPEvents_PlaylistCollectionPlaylistSetAsDeleted_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_ModeChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR ModeName,
+ /* [in] */ VARIANT_BOOL NewValue);
+
+
+void __RPC_STUB IWMPEvents_ModeChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MediaError_Proxy(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *pMediaObject);
+
+
+void __RPC_STUB IWMPEvents_MediaError_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_OpenPlaylistSwitch_Proxy(
+ IWMPEvents * This,
+ /* [in] */ IDispatch *pItem);
+
+
+void __RPC_STUB IWMPEvents_OpenPlaylistSwitch_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_DomainChange_Proxy(
+ IWMPEvents * This,
+ /* [in] */ BSTR strDomain);
+
+
+void __RPC_STUB IWMPEvents_DomainChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_SwitchedToPlayerApplication_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_SwitchedToPlayerApplication_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_SwitchedToControl_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_SwitchedToControl_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PlayerDockedStateChange_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_PlayerDockedStateChange_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_PlayerReconnect_Proxy(
+ IWMPEvents * This);
+
+
+void __RPC_STUB IWMPEvents_PlayerReconnect_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_Click_Proxy(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+
+void __RPC_STUB IWMPEvents_Click_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_DoubleClick_Proxy(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+
+void __RPC_STUB IWMPEvents_DoubleClick_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_KeyDown_Proxy(
+ IWMPEvents * This,
+ /* [in] */ short nKeyCode,
+ /* [in] */ short nShiftState);
+
+
+void __RPC_STUB IWMPEvents_KeyDown_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_KeyPress_Proxy(
+ IWMPEvents * This,
+ /* [in] */ short nKeyAscii);
+
+
+void __RPC_STUB IWMPEvents_KeyPress_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_KeyUp_Proxy(
+ IWMPEvents * This,
+ /* [in] */ short nKeyCode,
+ /* [in] */ short nShiftState);
+
+
+void __RPC_STUB IWMPEvents_KeyUp_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MouseDown_Proxy(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+
+void __RPC_STUB IWMPEvents_MouseDown_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MouseMove_Proxy(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+
+void __RPC_STUB IWMPEvents_MouseMove_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ void STDMETHODCALLTYPE IWMPEvents_MouseUp_Proxy(
+ IWMPEvents * This,
+ /* [in] */ short nButton,
+ /* [in] */ short nShiftState,
+ /* [in] */ long fX,
+ /* [in] */ long fY);
+
+
+void __RPC_STUB IWMPEvents_MouseUp_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IWMPEvents_INTERFACE_DEFINED__ */
+
+
+#ifndef ___WMPOCXEvents_DISPINTERFACE_DEFINED__
+#define ___WMPOCXEvents_DISPINTERFACE_DEFINED__
+
+/* dispinterface _WMPOCXEvents */
+/* [hidden][helpstring][uuid] */
+
+
+EXTERN_C const IID DIID__WMPOCXEvents;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6BF52A51-394A-11d3-B153-00C04F79FAA6")
+ _WMPOCXEvents : public IDispatch
+ {
+ };
+
+#else /* C style interface */
+
+ typedef struct _WMPOCXEventsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ _WMPOCXEvents * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ _WMPOCXEvents * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ _WMPOCXEvents * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ _WMPOCXEvents * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ _WMPOCXEvents * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ _WMPOCXEvents * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ _WMPOCXEvents * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ END_INTERFACE
+ } _WMPOCXEventsVtbl;
+
+ interface _WMPOCXEvents
+ {
+ CONST_VTBL struct _WMPOCXEventsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define _WMPOCXEvents_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define _WMPOCXEvents_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define _WMPOCXEvents_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define _WMPOCXEvents_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define _WMPOCXEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define _WMPOCXEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define _WMPOCXEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+#endif /* ___WMPOCXEvents_DISPINTERFACE_DEFINED__ */
+
+
+EXTERN_C const CLSID CLSID_WindowsMediaPlayer;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("6BF52A52-394A-11d3-B153-00C04F79FAA6")
+WindowsMediaPlayer;
+#endif
+#endif /* __WMPLib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
+unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
+unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
+void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
+
+unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * );
+unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * );
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
+void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * );
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/Plugins/listeningto/players/WMP/wmp.idl b/Plugins/listeningto/players/WMP/wmp.idl new file mode 100644 index 0000000..6ca0c64 --- /dev/null +++ b/Plugins/listeningto/players/WMP/wmp.idl @@ -0,0 +1,1529 @@ +//*****************************************************************************
+//
+// Microsoft Windows Media Technologies
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+// FileName: wmp.idl
+//
+// Abstract: Interface definitions for all public Windows Media
+// Player interfaces
+//
+//*****************************************************************************
+cpp_quote( "//=========================================================================" )
+cpp_quote( "//" )
+cpp_quote( "// Microsoft Windows Media Technologies" )
+cpp_quote( "// Copyright (C) Microsoft Corporation. All Rights Reserved." )
+cpp_quote( "//" )
+cpp_quote( "//=========================================================================" )
+
+#include <olectl.h>
+#include "wmpids.h"
+
+import "oaidl.idl";
+import "ocidl.idl";
+
+//////////////////////////////////////////////////////////////////////
+// PUBLIC ENUM TYPES
+//////////////////////////////////////////////////////////////////////
+
+typedef
+[
+ helpstring( "State of opening process" ),
+ public
+]
+enum WMPOpenState // wmpos
+{
+ [ helpstring( "Undefined" ) ] wmposUndefined,
+ [ helpstring( "New Playlist is about to be loaded" ) ] wmposPlaylistChanging,
+ [ helpstring( "Locating the playlist" ) ] wmposPlaylistLocating,
+ [ helpstring( "Connecting to the server holding a playlist" ) ] wmposPlaylistConnecting,
+ [ helpstring( "Loading a playlist" ) ] wmposPlaylistLoading,
+ [ helpstring( "Opening a playlist" ) ] wmposPlaylistOpening,
+ [ helpstring( "Playlist is open" ) ] wmposPlaylistOpenNoMedia,
+ [ helpstring( "Playlist has changed" ) ] wmposPlaylistChanged,
+ [ helpstring( "New media is about to be loaded" ) ] wmposMediaChanging,
+ [ helpstring( "Locating the media" ) ] wmposMediaLocating,
+ [ helpstring( "Connecting to the server holding media" ) ] wmposMediaConnecting,
+ [ helpstring( "Loading media" ) ] wmposMediaLoading,
+ [ helpstring( "Opening a media" ) ] wmposMediaOpening,
+ [ helpstring( "Media is open" ) ] wmposMediaOpen,
+ [ helpstring( "Starting codec acquisition" ) ] wmposBeginCodecAcquisition,
+ [ helpstring( "End codec acquisition" ) ] wmposEndCodecAcquisition,
+ [ helpstring( "Starting license acquisition" ) ] wmposBeginLicenseAcquisition,
+ [ helpstring( "End license acquisition" ) ] wmposEndLicenseAcquisition,
+ [ helpstring( "Starting individualization" ) ] wmposBeginIndividualization,
+ [ helpstring( "End individualization" ) ] wmposEndIndividualization,
+ [ helpstring( "Waiting for media" ) ] wmposMediaWaiting,
+ [ helpstring( "Opening an URL whose type is not known" ) ] wmposOpeningUnknownURL,
+} WMPOpenState;
+
+typedef
+[
+ helpstring( "State of playback" ),
+ public
+]
+enum WMPPlayState
+{
+ [ helpstring( "State is undefined" ) ] wmppsUndefined,
+ [ helpstring( "Playback is stopped" ) ] wmppsStopped,
+ [ helpstring( "Playback is paused" ) ] wmppsPaused,
+ [ helpstring( "Stream is playing" ) ] wmppsPlaying,
+ [ helpstring( "Stream is Scanning forward" ) ] wmppsScanForward,
+ [ helpstring( "Stream is Scanning in reverse" ) ] wmppsScanReverse,
+ [ helpstring( "Media is being buffered" ) ] wmppsBuffering,
+ [ helpstring( "Waiting for streaming data" ) ] wmppsWaiting,
+ [ helpstring( "End of media reached" ) ] wmppsMediaEnded,
+ [ helpstring( "Preparing new media" ) ] wmppsTransitioning,
+ [ helpstring( "Ready to begin playing" ) ] wmppsReady,
+ [ helpstring( "Trying to reconnect for streaming data" ) ] wmppsReconnecting,
+ [ helpstring( "Last playstate" ) ] wmppsLast
+} WMPPlayState;
+
+
+typedef
+[
+ helpstring("WMP Playlist Change Event Type"),
+ public
+]
+enum WMPPlaylistChangeEventType
+{
+ [ helpstring( "Unknown" ) ] wmplcUnknown = 0,
+ [ helpstring( "Clear" ) ] wmplcClear,
+ [ helpstring( "InfoChange" ) ] wmplcInfoChange,
+ [ helpstring( "Move" ) ] wmplcMove,
+ [ helpstring( "Delete" ) ] wmplcDelete,
+ [ helpstring( "Insert" ) ] wmplcInsert,
+ [ helpstring( "Append" ) ] wmplcAppend,
+ [ helpstring( "Private" ) ] wmplcPrivate,
+ [ helpstring( "NameChange" ) ] wmplcNameChange,
+ [ helpstring( "Morph" ) ] wmplcMorph,
+ [ helpstring( "Sort" ) ] wmplcSort,
+ [ helpstring( "Last" ) ] wmplcLast
+} WMPPlaylistChangeEventType;
+
+
+
+
+
+//////////////////////////////////////////////////////////////////////
+// Forward interface declarations
+//////////////////////////////////////////////////////////////////////
+
+interface IWMPPlaylist;
+
+
+//////////////////////////////////////////////////////////////////////
+// PUBLIC INTERFACES
+//////////////////////////////////////////////////////////////////////
+
+
+//////////////////////////////////////////////////////////////////////
+// Error Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(3614C646-3B3B-4de7-A81E-930E3F2127B3),
+ dual,
+ helpstring("IWMPErrorItem: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPErrorItem : IDispatch
+{
+ [ id(DISPID_WMPERRORITEM_ERRORCODE), propget, helpstring("Returns the error code") ]
+ HRESULT errorCode( [out, retval] long * phr );
+ [ id(DISPID_WMPERRORITEM_ERRORDESCRIPTION), propget, helpstring("Returns a description of the error") ]
+ HRESULT errorDescription( [out, retval] BSTR * pbstrDescription );
+ [ id(DISPID_WMPERRORITEM_ERRORCONTEXT), propget, helpstring("Returns context information for the error") ]
+ HRESULT errorContext( [out, retval] VARIANT * pvarContext );
+ [ id(DISPID_WMPERRORITEM_REMEDY), propget, helpstring("Returns remedy code for the error") ]
+ HRESULT remedy( [out, retval] long * plRemedy );
+ [ id(DISPID_WMPERRORITEM_CUSTOMURL), propget, helpstring("Returns a custom url for this error (if avail)") ]
+ HRESULT customUrl( [out, retval] BSTR * pbstrCustomUrl );
+}
+
+[
+ object,
+ uuid(A12DCF7D-14AB-4c1b-A8CD-63909F06025B),
+ dual,
+ helpstring("IWMPError: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPError : IDispatch
+{
+ [ id(DISPID_WMPERROR_CLEARERRORQUEUE), helpstring("Clears the error queue") ]
+ HRESULT clearErrorQueue();
+ [ id(DISPID_WMPERROR_ERRORCOUNT), propget, helpstring("Returns the number of error items") ]
+ HRESULT errorCount( [out, retval] long * plNumErrors );
+ [ id(DISPID_WMPERROR_ITEM), propget, helpstring("Returns an error item object") ]
+ HRESULT item( [in] long dwIndex, [out, retval] IWMPErrorItem ** ppErrorItem );
+ [ id(DISPID_WMPERROR_WEBHELP), helpstring("Launches WebHelp") ]
+ HRESULT webHelp();
+}
+
+//////////////////////////////////////////////////////////////////////
+// Media Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(94D55E95-3FAC-11d3-B155-00C04F79FAA6),
+ dual,
+ helpstring("IWMPMedia: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPMedia : IDispatch
+{
+ [ id( DISPID_WMPMEDIA_ISIDENTICAL ), propget, helpstring( "Determines if the supplied object is the same as the this one" ) ]
+ HRESULT isIdentical([in] IWMPMedia *pIWMPMedia, [out, retval] VARIANT_BOOL *pvbool );
+ [
+ id( DISPID_WMPMEDIA_SOURCEURL ), propget, helpstring( "Returns the media URL" ) ]
+ HRESULT sourceURL( [out, retval] BSTR *pbstrSourceURL );
+ [
+ id( DISPID_WMPMEDIA_NAME ), propget, helpstring( "Returns the name of the media" ) ]
+ HRESULT name( [out, retval] BSTR *pbstrName);
+ [
+ id( DISPID_WMPMEDIA_NAME ), propput, helpstring( "Sets the name of the media" ) ]
+ HRESULT name( [in] BSTR bstrName);
+ [
+ id( DISPID_WMPMEDIA_IMAGESOURCEWIDTH ), propget, helpstring( "Returns the original width of the source images" ) ]
+ HRESULT imageSourceWidth( [out, retval] long *pWidth );
+ [
+ id( DISPID_WMPMEDIA_IMAGESOURCEHEIGHT ), propget, helpstring( "Returns the original height of the source images" ) ]
+ HRESULT imageSourceHeight( [out, retval] long *pHeight );
+ [
+ id( DISPID_WMPMEDIA_MARKERCOUNT ), propget, helpstring( "Returns the number of markers in the file" ) ]
+ HRESULT markerCount( [out, retval] long *pMarkerCount );
+ [
+ id( DISPID_WMPMEDIA_GETMARKERTIME ), helpstring( "Returns the time of a marker" ) ]
+ HRESULT getMarkerTime( [in] long MarkerNum, [out, retval] double *pMarkerTime );
+ [
+ id( DISPID_WMPMEDIA_GETMARKERNAME ), helpstring( "Returns the name of a marker" ) ]
+ HRESULT getMarkerName( [in] long MarkerNum, [out, retval] BSTR *pbstrMarkerName );
+ [
+ id( DISPID_WMPMEDIA_DURATION ), propget, helpstring( "Returns duration of current media" ) ]
+ HRESULT duration( [out, retval] double * pDuration );
+ [
+ id( DISPID_WMPMEDIA_DURATIONSTRING ), propget, helpstring( "Returns duration of current media as a string" ) ]
+ HRESULT durationString( [out, retval] BSTR * pbstrDuration );
+ [
+ id( DISPID_WMPMEDIA_ATTRIBUTECOUNT ), propget, helpstring( "Returns the count of the attributes associated with this media" ) ]
+ HRESULT attributeCount( [out, retval] long *plCount );
+ [
+ id( DISPID_WMPMEDIA_GETATTRIBUTENAME ), helpstring( "Returns the name of the attribute whose index has been specified" ) ]
+ HRESULT getAttributeName( [in] long lIndex, [out, retval] BSTR *pbstrItemName );
+ [
+ id( DISPID_WMPMEDIA_GETITEMINFO ), helpstring( "Returns the value of specified attribute for this media" ) ]
+ HRESULT getItemInfo( [in] BSTR bstrItemName, [out, retval] BSTR *pbstrVal );
+ [
+ id( DISPID_WMPMEDIA_SETITEMINFO ), helpstring( "Sets the value of specified attribute for this media" ) ]
+ HRESULT setItemInfo( [in] BSTR bstrItemName, [in] BSTR bstrVal );
+ [
+ id( DISPID_WMPMEDIA_GETITEMINFOBYATOM ), helpstring( "Gets an item info by atom" ) ]
+ HRESULT getItemInfoByAtom( [in] long lAtom, [out, retval] BSTR* pbstrVal );
+ [
+ id( DISPID_WMPMEDIA_ISMEMBEROF ), helpstring( "Is the media a member of the given playlist" ) ]
+ HRESULT isMemberOf( [in] IWMPPlaylist* pPlaylist, [out, retval] VARIANT_BOOL* pvarfIsMemberOf );
+ [
+ id( DISPID_WMPMEDIA_ISREADONLYITEM ), helpstring( "Is the attribute read only" ) ]
+ HRESULT isReadOnlyItem( [in] BSTR bstrItemName, [out, retval] VARIANT_BOOL* pvarfIsReadOnly);
+}
+
+//////////////////////////////////////////////////////////////////////
+// Control Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(74C09E02-F828-11d2-A74B-00A0C905F36E),
+ dual,
+ helpstring("IWMPControls: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPControls : IDispatch
+{
+ [ id( DISPID_WMPCONTROLS_ISAVAILABLE ), propget, helpstring( "Returns whether or not the specified media functionality is available" ) ]
+ HRESULT isAvailable( [in] BSTR bstrItem, [out, retval] VARIANT_BOOL *pIsAvailable );
+ [ id( DISPID_WMPCONTROLS_PLAY ),helpstring( "Begins playing media" ) ]
+ HRESULT play();
+ [ id( DISPID_WMPCONTROLS_STOP ),helpstring( "Stops play of media" ) ]
+ HRESULT stop();
+ [ id( DISPID_WMPCONTROLS_PAUSE ), helpstring( "Pauses play of media" ) ]
+ HRESULT pause();
+ [ id( DISPID_WMPCONTROLS_FASTFORWARD ), helpstring( "Fast play of media in forward direction" ) ]
+ HRESULT fastForward();
+ [ id( DISPID_WMPCONTROLS_FASTREVERSE ),helpstring( "Fast play of media in reverse direction" ) ]
+ HRESULT fastReverse();
+ [ id( DISPID_WMPCONTROLS_CURRENTPOSITION ), propget, helpstring( "Returns the current position in media" ) ]
+ HRESULT currentPosition( [out, retval] double * pdCurrentPosition );
+ [ id( DISPID_WMPCONTROLS_CURRENTPOSITION ), propput, helpstring( "sets the current position in media" ) ]
+ HRESULT currentPosition( [in] double dCurrentPosition );
+ [ id( DISPID_WMPCONTROLS_CURRENTPOSITIONSTRING ), propget, helpstring( "Returns the current position in media as a string" ) ]
+ HRESULT currentPositionString( [out, retval] BSTR * pbstrCurrentPosition );
+ [ id( DISPID_WMPCONTROLS_NEXT ), helpstring( "Sets the current item to the next item in the playlist" ) ]
+ HRESULT next();
+ [ id( DISPID_WMPCONTROLS_PREVIOUS ), helpstring( "Sets the current item to the previous item in the playlist" ) ]
+ HRESULT previous();
+ [ id( DISPID_WMPCONTROLS_CURRENTITEM ), propget, helpstring( "Returns/Sets the play item" ) ]
+ HRESULT currentItem( [out, retval] IWMPMedia **ppIWMPMedia);
+ [ id( DISPID_WMPCONTROLS_CURRENTITEM ), propput ]
+ HRESULT currentItem( [in] IWMPMedia *pIWMPMedia );
+ [ id( DISPID_WMPCONTROLS_CURRENTMARKER ), propget, helpstring( "Returns the current marker" ) ]
+ HRESULT currentMarker( [out, retval] long *plMarker);
+ [ id( DISPID_WMPCONTROLS_CURRENTMARKER ), propput, helpstring( "Sets the current marker" ) ]
+ HRESULT currentMarker( [in] long lMarker);
+ [ id( DISPID_WMPCONTROLS_PLAYITEM ), helpstring( "Sets the current item and plays it" )]
+ HRESULT playItem( [in] IWMPMedia *pIWMPMedia );
+}
+
+//////////////////////////////////////////////////////////////////////
+// Settings Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(9104D1AB-80C9-4fed-ABF0-2E6417A6DF14),
+ dual,
+ helpstring("IWMPSettings: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPSettings : IDispatch
+{
+ [ id( DISPID_WMPSETTINGS_ISAVAILABLE ), propget, helpstring( "Returns whether or not the specified media functionality is available" ) ]
+ HRESULT isAvailable( [in] BSTR bstrItem, [out, retval] VARIANT_BOOL *pIsAvailable );
+ [ id( DISPID_WMPSETTINGS_AUTOSTART ), propget, helpstring( "Returns whether media should automatically begin playing" ) ]
+ HRESULT autoStart( [out, retval] VARIANT_BOOL *pfAutoStart );
+ [ id( DISPID_WMPSETTINGS_AUTOSTART ), propput, helpstring( "Sets whether media should automatically begin playing" ) ]
+ HRESULT autoStart( [in] VARIANT_BOOL fAutoStart );
+
+ [ id( DISPID_WMPSETTINGS_BASEURL ), propget, helpstring( "Returns the base URL used for relative path resolution" ) ]
+ HRESULT baseURL( [out, retval] BSTR * pbstrBaseURL );
+ [ id( DISPID_WMPSETTINGS_BASEURL ), propput, helpstring( "Sets the base URL used for relative path resolution" ) ]
+ HRESULT baseURL( [in] BSTR bstrBaseURL );
+
+ [ id( DISPID_WMPSETTINGS_DEFAULTFRAME ), propget, helpstring( "Returns the frame location that changes when a URL flip occurs" ) ]
+ HRESULT defaultFrame( [out, retval] BSTR * pbstrDefaultFrame );
+ [ id( DISPID_WMPSETTINGS_DEFAULTFRAME ), propput, helpstring( "Sets the frame location that changes when a URL flip occurs" ) ]
+ HRESULT defaultFrame( [in] BSTR bstrDefaultFrame );
+
+ [ id( DISPID_WMPSETTINGS_INVOKEURLS ), propget, helpstring( "Returns whether URL events should spawn a browser." ) ]
+ HRESULT invokeURLs( [out, retval] VARIANT_BOOL *pfInvokeURLs );
+ [ id( DISPID_WMPSETTINGS_INVOKEURLS ), propput, helpstring( "Sets whether URL events should spawn a browser." ) ]
+ HRESULT invokeURLs( [in] VARIANT_BOOL fInvokeURLs );
+
+ [ id( DISPID_WMPSETTINGS_MUTE ), propget, helpstring( "Returns whether audio should be muted." ) ]
+ HRESULT mute( [out, retval] VARIANT_BOOL *pfMute );
+ [ id( DISPID_WMPSETTINGS_MUTE ), propput, helpstring( "Sets audio mute." ) ]
+ HRESULT mute( [in] VARIANT_BOOL fMute );
+
+ [ id( DISPID_WMPSETTINGS_PLAYCOUNT ), propget, helpstring( "Returns how many times media should play" ) ]
+ HRESULT playCount( [out, retval] long *plCount );
+ [ id( DISPID_WMPSETTINGS_PLAYCOUNT ), propput, helpstring( "Sets whether media should automatically begin playing" ) ]
+ HRESULT playCount( [in] long lCount );
+
+ [ id( DISPID_WMPSETTINGS_RATE ), propget, helpstring( "Returns current playback rate" ) ]
+ HRESULT rate( [out, retval] double * pdRate );
+ [ id( DISPID_WMPSETTINGS_RATE ), propput, helpstring( "Sets current playback rate" ) ]
+ HRESULT rate( [in] double dRate );
+
+ [ id( DISPID_WMPSETTINGS_BALANCE ), propget, helpstring( "Returns current audio Balance" ) ]
+ HRESULT balance( [out, retval] long * plBalance );
+ [ id( DISPID_WMPSETTINGS_BALANCE ), propput, helpstring( "Sets audio Balance" ) ]
+ HRESULT balance( [in] long lBalance );
+
+ [ id( DISPID_WMPSETTINGS_VOLUME ), propget, helpstring( "Returns current audio volume" ) ]
+ HRESULT volume( [out, retval] long * plVolume );
+ [ id( DISPID_WMPSETTINGS_VOLUME ), propput, helpstring( "Sets audio volume" ) ]
+ HRESULT volume( [in] long lVolume );
+
+ [ id( DISPID_WMPSETTINGS_GETMODE ), helpstring( "Returns the mode of the playlist" ) ]
+ HRESULT getMode( [in] BSTR bstrMode, [out,retval] VARIANT_BOOL *pvarfMode );
+ [ id( DISPID_WMPSETTINGS_SETMODE ), helpstring( "Sets the mode of the playlist" ) ]
+ HRESULT setMode( [in] BSTR bstrMode, [in] VARIANT_BOOL varfMode );
+
+ [ id( DISPID_WMPSETTINGS_ENABLEERRORDIALOGS ), propget, helpstring( "Returns whether error dialogs are shown by default when embedded" ) ]
+ HRESULT enableErrorDialogs( [out, retval] VARIANT_BOOL *pfEnableErrorDialogs );
+ [ id( DISPID_WMPSETTINGS_ENABLEERRORDIALOGS ), propput, helpstring( "Returns whether error dialogs are shown by default when embedded" ) ]
+ HRESULT enableErrorDialogs( [in] VARIANT_BOOL fEnableErrorDialogs );
+
+}
+
+//////////////////////////////////////////////////////////////////////
+// ClosedCaption Interfaces
+//////////////////////////////////////////////////////////////////////
+[
+ object,
+ uuid(4F2DF574-C588-11d3-9ED0-00C04FB6E937),
+ dual,
+ helpstring("IWMPClosedCaption: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPClosedCaption : IDispatch
+{
+ [ id( DISPID_WMPCLOSEDCAPTION_SAMISTYLE ), propget, helpstring( "Returns the previously set SAMI style" ) ]
+ HRESULT SAMIStyle( [out, retval] BSTR * pbstrSAMIStyle );
+ [ id( DISPID_WMPCLOSEDCAPTION_SAMISTYLE ), propput, helpstring( "Sets the SAMI style" ) ]
+ HRESULT SAMIStyle( [in] BSTR bstrSAMIStyle );
+
+ [ id( DISPID_WMPCLOSEDCAPTION_SAMILANG ), propget, helpstring( "Returns the previously set SAMI language" ) ]
+ HRESULT SAMILang( [out, retval] BSTR * pbstrSAMILang );
+ [ id( DISPID_WMPCLOSEDCAPTION_SAMILANG ), propput, helpstring( "Sets the SAMI language" ) ]
+ HRESULT SAMILang( [in] BSTR bstrSAMILang );
+
+ [ id( DISPID_WMPCLOSEDCAPTION_SAMIFILENAME ), propget, helpstring( "Returns the previously set SAMI file name" ) ]
+ HRESULT SAMIFileName( [out, retval] BSTR * pbstrSAMIFileName );
+ [ id( DISPID_WMPCLOSEDCAPTION_SAMIFILENAME ), propput, helpstring( "Sets the SAMI file name" ) ]
+ HRESULT SAMIFileName( [in] BSTR bstrSAMIFileName );
+
+ [ id( DISPID_WMPCLOSEDCAPTION_CAPTIONINGID ), propget, helpstring( "Returns the previously set Captioning ID" ) ]
+ HRESULT captioningId( [out, retval] BSTR * pbstrCaptioningID );
+ [ id( DISPID_WMPCLOSEDCAPTION_CAPTIONINGID ), propput, helpstring( "Sets the Captioning ID" ) ]
+ HRESULT captioningId( [in] BSTR bstrCaptioningID );
+
+}
+
+//////////////////////////////////////////////////////////////////////
+// Playlist Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(D5F0F4F1-130C-11d3-B14E-00C04F79FAA6),
+ dual,
+ helpstring("IWMPPlaylist: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPPlaylist : IDispatch
+{
+ // properties
+ [
+ id( DISPID_WMPPLAYLIST_COUNT ), propget, helpstring( "Returns the number of items in the playlist" ) ]
+ HRESULT count( [out, retval] long *plCount );
+ [
+ id( DISPID_WMPPLAYLIST_NAME ), propget, helpstring( "Returns the name of the playlist" ) ]
+ HRESULT name( [out, retval] BSTR *pbstrName);
+ [
+ id( DISPID_WMPPLAYLIST_NAME ), propput, helpstring( "Sets the name of the playlist" ) ]
+ HRESULT name( [in] BSTR bstrName);
+ [
+ id( DISPID_WMPPLAYLIST_ATTRIBUTECOUNT ), propget, helpstring( "Returns the number of attributes associated with the playlist" ) ]
+ HRESULT attributeCount( [out, retval] long *plCount);
+ [
+ id( DISPID_WMPPLAYLIST_ATTRIBUTENAME ), propget, helpstring( "Returns the name of an attribute specified by an index") ]
+ HRESULT attributeName( [in] long lIndex, [out, retval] BSTR *pbstrAttributeName);
+ [
+ id( DISPID_WMPPLAYLIST_ITEM ), propget, helpstring( "Returns the item at the specified index" ) ]
+ HRESULT item( long lIndex, [out, retval] IWMPMedia **ppIWMPMedia );
+ [
+ id( DISPID_WMPPLAYLIST_GETITEMINFO ), helpstring( "Returns the value of a playlist attribute" ) ]
+ HRESULT getItemInfo( [in] BSTR bstrName, [out, retval] BSTR *pbstrVal );
+ [
+ id( DISPID_WMPPLAYLIST_SETITEMINFO ), helpstring( "Sets the value of a playlist attribute" ) ]
+ HRESULT setItemInfo( [in] BSTR bstrName, [in] BSTR bstrValue );
+
+ // methods
+ [ id( DISPID_WMPPLAYLIST_ISIDENTICAL ), propget, helpstring( "Determines if the supplied object is the same as the this one" ) ]
+ HRESULT isIdentical([in] IWMPPlaylist *pIWMPPlaylist, [out, retval] VARIANT_BOOL *pvbool );
+ [
+ id( DISPID_WMPPLAYLIST_CLEAR ), helpstring( "Removes all items from the playlist" ) ]
+ HRESULT clear();
+ [
+ id( DISPID_WMPPLAYLIST_INSERTITEM ), helpstring( "Inserts an item into the playlist at the specified location" ) ]
+ HRESULT insertItem( [in] long lIndex, [in] IWMPMedia *pIWMPMedia );
+ [
+ id( DISPID_WMPPLAYLIST_APPENDITEM ), helpstring( "Adds an item to the end of the playlist" ) ]
+ HRESULT appendItem( [in] IWMPMedia *pIWMPMedia );
+ [
+ id( DISPID_WMPPLAYLIST_REMOVEITEM ), helpstring( "Removes the specified item from the playlist" ) ]
+ HRESULT removeItem([in] IWMPMedia *pIWMPMedia );
+ [
+ id( DISPID_WMPPLAYLIST_MOVEITEM ), helpstring( "Changes the location of an item in the playlist" ) ]
+ HRESULT moveItem(long lIndexOld, long lIndexNew );
+
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// CDROM Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(cfab6e98-8730-11d3-b388-00c04f68574b),
+ dual,
+ helpstring("IWMPCdrom: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPCdrom : IDispatch
+{
+ // properties
+ [ id( DISPID_WMPCDROM_DRIVESPECIFIER ), propget, helpstring( "Returns the CDROM drive specifier" ) ]
+ HRESULT driveSpecifier ([out, retval] BSTR* pbstrDrive);
+
+ [ id( DISPID_WMPCDROM_PLAYLIST ), propget, helpstring( "Returns the playlist of tracks currently in the CDROM drive" ) ]
+ HRESULT playlist ([out, retval] IWMPPlaylist** ppPlaylist);
+
+ // methods
+ [ id( DISPID_WMPCDROM_EJECT ), helpstring( "Eject the CD in the CDROM drive" ) ]
+ HRESULT eject ();
+}
+
+[
+ object,
+ uuid(EE4C8FE2-34B2-11d3-A3BF-006097C9B344),
+ dual,
+ helpstring("IWMPCdromCollection: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPCdromCollection : IDispatch
+{
+ // properties
+ [ id( DISPID_WMPCDROMCOLLECTION_COUNT ), propget, helpstring( "Returns the number of items in the cdrom collection" ) ]
+ HRESULT count( [out, retval] long *plCount );
+
+ // methods
+ [ id( DISPID_WMPCDROMCOLLECTION_ITEM ), helpstring( "Returns the CDROM object at the given index" ) ]
+ HRESULT item( [in] long lIndex, [out, retval] IWMPCdrom **ppItem );
+
+ [ id( DISPID_WMPCDROMCOLLECTION_GETBYDRIVESPECIFIER ), helpstring( "Returns the CDROM object associated with a particular drive specifier, e.g. F:" ) ]
+ HRESULT getByDriveSpecifier( [in] BSTR bstrDriveSpecifier, [out, retval] IWMPCdrom** ppCdrom );
+}
+
+//////////////////////////////////////////////////////////////////////
+// MediaCollection Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(4a976298-8c0d-11d3-b389-00c04f68574b),
+ dual,
+ helpstring("IWMPStringCollection: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPStringCollection : IDispatch
+{
+ // properties
+ [ id( DISPID_WMPSTRINGCOLLECTION_COUNT ), propget, helpstring( "Returns the number of items in the string collection" ) ]
+ HRESULT count( [out, retval] long* plCount );
+
+ // methods
+ [ id( DISPID_WMPSTRINGCOLLECTION_ITEM ), helpstring( "Returns the string at the given index" ) ]
+ HRESULT item( [in] long lIndex, [out, retval] BSTR* pbstrString );
+}
+
+[
+ object,
+ uuid(8363BC22-B4B4-4b19-989D-1CD765749DD1),
+ dual,
+ helpstring("IWMPMediaCollection: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPMediaCollection : IDispatch
+{
+ // methods
+ [ id( DISPID_WMPMEDIACOLLECTION_ADD ), helpstring( "Creates a new media object" ) ]
+ HRESULT add( [in] BSTR bstrURL, [out, retval] IWMPMedia **ppItem );
+ [ id( DISPID_WMPMEDIACOLLECTION_GETALL ), helpstring( "Returns a collection of all the items" ) ]
+ HRESULT getAll( [out, retval] IWMPPlaylist** ppMediaItems );
+ [ id( DISPID_WMPMEDIACOLLECTION_GETBYNAME ), helpstring( "Returns a collection of items with the given name" ) ]
+ HRESULT getByName( [in] BSTR bstrName, [out, retval] IWMPPlaylist **ppMediaItems );
+ [ id( DISPID_WMPMEDIACOLLECTION_GETBYGENRE ), helpstring( "Returns a collection of items with the given genre" ) ]
+ HRESULT getByGenre( [in] BSTR bstrGenre, [out, retval] IWMPPlaylist **ppMediaItems );
+ [ id( DISPID_WMPMEDIACOLLECTION_GETBYAUTHOR ), helpstring( "Returns a collection of items by a given author" ) ]
+ HRESULT getByAuthor( [in] BSTR bstrAuthor, [out, retval] IWMPPlaylist **ppMediaItems );
+ [ id( DISPID_WMPMEDIACOLLECTION_GETBYALBUM ), helpstring( "Returns a collection of items from the given album" ) ]
+ HRESULT getByAlbum( [in] BSTR bstrAlbum, [out, retval] IWMPPlaylist **ppMediaItems );
+ [ id( DISPID_WMPMEDIACOLLECTION_GETBYATTRIBUTE ), helpstring( "Returns a collection of items with the given attribute" ) ]
+ HRESULT getByAttribute( [in] BSTR bstrAttribute, [in] BSTR bstrValue, [out, retval] IWMPPlaylist **ppMediaItems );
+ [ id( DISPID_WMPMEDIACOLLECTION_REMOVE ), helpstring( "Removes an item from the media collection" ) ]
+ HRESULT remove( [in] IWMPMedia *pItem, [in] VARIANT_BOOL varfDeleteFile );
+ [ id( DISPID_WMPMEDIACOLLECTION_GETATTRIBUTESTRINGCOLLECTION ), helpstring( "Returns the string collection associated with an attribute" ) ]
+ HRESULT getAttributeStringCollection( [in] BSTR bstrAttribute, [in] BSTR bstrMediaType, [out, retval] IWMPStringCollection** ppStringCollection );
+ [ id( DISPID_WMPMEDIACOLLECTION_GETMEDIAATOM ), helpstring( "Gets an atom associated with an item name which can be requested from an IWMPMedia out of this collection via getItemInfoByAtom" ) ]
+ HRESULT getMediaAtom( [in] BSTR bstrItemName, [out, retval] long* plAtom);
+ [ id( DISPID_WMPMEDIACOLLECTION_SETDELETED ), helpstring( "Sets the deleted flag on a media object" ) ]
+ HRESULT setDeleted( [in] IWMPMedia* pItem, [in] VARIANT_BOOL varfIsDeleted );
+ [ id( DISPID_WMPMEDIACOLLECTION_ISDELETED ), helpstring( "Gets the deleted flag on a media object" ) ]
+ HRESULT isDeleted( [in] IWMPMedia* pItem, [out, retval] VARIANT_BOOL* pvarfIsDeleted );
+}
+
+//////////////////////////////////////////////////////////////////////
+// PlaylistCollection Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(679409c0-99f7-11d3-9fb7-00105aa620bb),
+ dual,
+ helpstring("IWMPPlaylistArray: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPPlaylistArray : IDispatch
+{
+ // properties
+ [ id( DISPID_WMPPLAYLISTARRAY_COUNT ), propget, helpstring( "Returns the number of items in the playlist array" ) ]
+ HRESULT count( [out, retval] long *plCount );
+
+ // methods
+ [ id( DISPID_WMPPLAYLISTARRAY_ITEM ), helpstring( "Returns the playlist object at the given index" ) ]
+ HRESULT item( [in] long lIndex, [out, retval] IWMPPlaylist **ppItem );
+}
+
+[
+ object,
+ uuid(10A13217-23A7-439b-B1C0-D847C79B7774),
+ dual,
+ helpstring("IWMPPlaylistCollection: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPPlaylistCollection : IDispatch
+{
+ // methods
+ [ id( DISPID_WMPPLAYLISTCOLLECTION_NEWPLAYLIST ), helpstring( "Creates a new playlist object" ) ]
+ HRESULT newPlaylist( [in] BSTR bstrName, [out, retval] IWMPPlaylist **ppItem );
+ [ id( DISPID_WMPPLAYLISTCOLLECTION_GETALL ), helpstring( "Returns a playlist array with all the playlists" ) ]
+ HRESULT getAll( [out, retval] IWMPPlaylistArray **ppPlaylistArray );
+ [ id( DISPID_WMPPLAYLISTCOLLECTION_GETBYNAME ), helpstring( "Returns a playlist array with playlists matching the given name" ) ]
+ HRESULT getByName( [in] BSTR bstrName, [out, retval] IWMPPlaylistArray **ppPlaylistArray );
+ [ id( DISPID_WMPPLAYLISTCOLLECTION_REMOVE ), helpstring( "Removes an item from the playlist collection" ) ]
+ HRESULT remove( [in] IWMPPlaylist *pItem );
+ [ id( DISPID_WMPPLAYLISTCOLLECTION_SETDELETED ), helpstring( "Sets the deleted flag on a playlist object" ) ]
+ HRESULT setDeleted( [in] IWMPPlaylist* pItem, [in] VARIANT_BOOL varfIsDeleted );
+ [ id( DISPID_WMPPLAYLISTCOLLECTION_ISDELETED ), helpstring( "Gets the deleted flag on a playlist object" ) ]
+ HRESULT isDeleted( [in] IWMPPlaylist* pItem, [out, retval] VARIANT_BOOL* pvarfIsDeleted );
+ [ id( DISPID_WMPPLAYLISTCOLLECTION_IMPORTPLAYLIST ), helpstring( "Imports a playlist object into the library" ) ]
+ HRESULT importPlaylist( [in] IWMPPlaylist* pItem, [out, retval] IWMPPlaylist** ppImportedItem );
+}
+
+//////////////////////////////////////////////////////////////////////
+// Network Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(EC21B779-EDEF-462d-BBA4-AD9DDE2B29A7),
+ dual,
+ helpstring("IWMPNetwork: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPNetwork : IDispatch
+{
+ // properties
+ [ id( DISPID_WMPNETWORK_BANDWIDTH ), propget, helpstring( "Returns the current bandwidth of the clip." ) ]
+ HRESULT bandWidth( [out, retval] long *plBandwidth );
+ [ id( DISPID_WMPNETWORK_RECOVEREDPACKETS ), propget, helpstring( "Returns the number of recovered packets" ) ]
+ HRESULT recoveredPackets( [out, retval] long *plRecoveredPackets );
+ [ id( DISPID_WMPNETWORK_SOURCEPROTOCOL ), propget, helpstring( "Returns the source protocol used to receive data." ) ]
+ HRESULT sourceProtocol( [out, retval] BSTR *pbstrSourceProtocol );
+ [ id( DISPID_WMPNETWORK_RECEIVEDPACKETS ), propget, helpstring( "Returns the number of packets received." ) ]
+ HRESULT receivedPackets( [out, retval] long *plReceivedPackets );
+ [ id( DISPID_WMPNETWORK_LOSTPACKETS ), propget, helpstring( "Returns the number of packets lost." ) ]
+ HRESULT lostPackets( [out, retval] long *plLostPackets );
+ [ id( DISPID_WMPNETWORK_RECEPTIONQUALITY ), propget, helpstring( "Returns the percentage of packets received in the last 15 seconds." ) ]
+ HRESULT receptionQuality( [out, retval] long *plReceptionQuality );
+ [ id( DISPID_WMPNETWORK_BUFFERINGCOUNT ), propget, helpstring( "Returns the number of times buffering occurred during clip playback." ) ]
+ HRESULT bufferingCount( [out, retval] long *plBufferingCount );
+ [ id( DISPID_WMPNETWORK_BUFFERINGPROGRESS ), propget, helpstring( "Returns the percentage of buffering completed." ) ]
+ HRESULT bufferingProgress( [out, retval] long *plBufferingProgress );
+ [ id( DISPID_WMPNETWORK_BUFFERINGTIME ), propget, helpstring( "Returns the number of seconds allocated for buffering for this media type." ) ]
+ HRESULT bufferingTime( [out, retval] long *plBufferingTime );
+ [ id( DISPID_WMPNETWORK_BUFFERINGTIME ), propput, helpstring( "Sets the amount of time in milliseconds that the player allocates for buffering incoming data." ) ]
+ HRESULT bufferingTime( [in] long lBufferingTime );
+ [ id( DISPID_WMPNETWORK_FRAMERATE ), propget, helpstring( "Current video frame rate in frames/second" ) ]
+ HRESULT frameRate( [out, retval] long *plFrameRate );
+ [ id( DISPID_WMPNETWORK_MAXBITRATE ), propget, helpstring( "Maximum possible video bit rate" ) ]
+ HRESULT maxBitRate( [out, retval] long *plBitRate );
+ [ id( DISPID_WMPNETWORK_BITRATE ), propget, helpstring( "Current video bit rate" ) ]
+ HRESULT bitRate( [out, retval] long *plBitRate );
+ [ id( DISPID_WMPNETWORK_GETPROXYSETTINGS ), helpstring( "Returns the proxy settings for the specified protocol" ) ]
+ HRESULT getProxySettings( [in] BSTR bstrProtocol, [out, retval] long *plProxySetting );
+ [ id( DISPID_WMPNETWORK_SETPROXYSETTINGS ), helpstring( "Sets the proxy settings for the specified protocol" ) ]
+ HRESULT setProxySettings( [in] BSTR bstrProtocol, [in] long lProxySetting );
+ [ id( DISPID_WMPNETWORK_GETPROXYNAME ), helpstring( "Returns the proxy name for the specified protocol" ) ]
+ HRESULT getProxyName( [in] BSTR bstrProtocol, [out, retval] BSTR *pbstrProxyName );
+ [ id( DISPID_WMPNETWORK_SETPROXYNAME ), helpstring( "Sets the proxy name for the specified protocol" ) ]
+ HRESULT setProxyName( [in] BSTR bstrProtocol, [in] BSTR bstrProxyName );
+ [ id( DISPID_WMPNETWORK_GETPROXYPORT ), helpstring( "Returns the proxy port for the specified protocol" ) ]
+ HRESULT getProxyPort( [in] BSTR bstrProtocol, [out, retval] long * lProxyPort );
+ [ id( DISPID_WMPNETWORK_SETPROXYPORT ), helpstring( "Sets the proxy port for the specified protocol" ) ]
+ HRESULT setProxyPort( [in] BSTR bstrProtocol, [in] long lProxyPort );
+ [ id( DISPID_WMPNETWORK_GETPROXYEXCEPTIONLIST ), helpstring( "Returns the proxy exception list for the specified protocol" ) ]
+ HRESULT getProxyExceptionList( [in] BSTR bstrProtocol, [out, retval] BSTR *pbstrExceptionList );
+ [ id( DISPID_WMPNETWORK_SETPROXYEXCEPTIONLIST ), helpstring( "Sets the proxy exception list for the specified protocol" ) ]
+ HRESULT setProxyExceptionList( [in] BSTR bstrProtocol, [in] BSTR pbstrExceptionList );
+ [ id( DISPID_WMPNETWORK_GETPROXYBYPASSFORLOCAL ), helpstring( "Returns whether or not to bypass the proxy for local addresses" ) ]
+ HRESULT getProxyBypassForLocal( [in] BSTR bstrProtocol, [out, retval] VARIANT_BOOL *pfBypassForLocal );
+ [ id( DISPID_WMPNETWORK_SETPROXYBYPASSFORLOCAL ), helpstring( "Sets whether or not to by pass the proxy for local addresses" ) ]
+ HRESULT setProxyBypassForLocal( [in] BSTR bstrProtocol, [in] VARIANT_BOOL fBypassForLocal );
+ [ id( DISPID_WMPNETWORK_MAXBANDWIDTH ), propget, helpstring( "Returns or sets maximum allowed bandwidth" ) ]
+ HRESULT maxBandwidth( [out, retval] long * lMaxBandwidth );
+ [ id( DISPID_WMPNETWORK_MAXBANDWIDTH ), propput ]
+ HRESULT maxBandwidth( [in] long lMaxBandwidth );
+ [ id( DISPID_WMPNETWORK_DOWNLOADPROGRESS ), propget, helpstring( "Returns the percentage of download completed." ) ]
+ HRESULT downloadProgress( [out, retval] long *plDownloadProgress );
+ [ id( DISPID_WMPNETWORK_ENCODEDFRAMERATE ), propget, helpstring( "Returns the video frame rate, in frames/second, that the file was encoded in" ) ]
+ HRESULT encodedFrameRate( [out, retval] long *plFrameRate );
+ [ id( DISPID_WMPNETWORK_FRAMESSKIPPED ), propget, helpstring( "Returns the number of skipped frames" ) ]
+ HRESULT framesSkipped( [out, retval] long *plFrames );
+}
+
+//////////////////////////////////////////////////////////////////////
+// Core Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(D84CCA99-CCE2-11d2-9ECC-0000F8085981),
+ dual,
+ helpstring("IWMPCore: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPCore : IDispatch
+{
+ // methods
+
+ [ id(DISPID_WMPCORE_CLOSE), helpstring("Closes the media") ]
+ HRESULT close();
+
+ // properties
+
+ [ id( DISPID_WMPCORE_URL ), propget, helpstring( "Returns or sets the URL" ) ]
+ HRESULT URL( [out, retval] BSTR *pbstrURL );
+ [ id( DISPID_WMPCORE_URL ), propput ]
+ HRESULT URL( [in] BSTR bstrURL );
+ [ id( DISPID_WMPCORE_OPENSTATE ), propget, helpstring( "Returns the open state of the player" ) ]
+ HRESULT openState( [out, retval] WMPOpenState *pwmpos );
+ [ id( DISPID_WMPCORE_PLAYSTATE ), propget, helpstring( "Returns the play state of the player" ) ]
+ HRESULT playState( [out, retval] WMPPlayState *pwmpps );
+ [ id(DISPID_WMPCORE_CONTROLS), propget, helpstring("Returns the control handler")]
+ HRESULT controls([out, retval] IWMPControls **ppControl);
+ [ id(DISPID_WMPCORE_SETTINGS), propget, helpstring("Returns the settings handler")]
+ HRESULT settings([out, retval] IWMPSettings **ppSettings);
+ [ id(DISPID_WMPCORE_CURRENTMEDIA), propget, helpstring("Returns or sets the current media object")]
+ HRESULT currentMedia([out, retval] IWMPMedia **ppMedia);
+ [ id(DISPID_WMPCORE_CURRENTMEDIA), propput]
+ HRESULT currentMedia([in] IWMPMedia *pMedia);
+ [ id(DISPID_WMPCORE_MEDIACOLLECTION), propget, helpstring("Returns the media collection handler")]
+ HRESULT mediaCollection([out, retval] IWMPMediaCollection **ppMediaCollection);
+ [ id(DISPID_WMPCORE_PLAYLISTCOLLECTION), propget, helpstring("Returns the playlist collection handler")]
+ HRESULT playlistCollection([out, retval] IWMPPlaylistCollection **ppPlaylistCollection);
+ [ id( DISPID_WMPCORE_VERSIONINFO ), propget, helpstring( "Returns the version information for the player" ) ]
+ HRESULT versionInfo( [out, retval] BSTR * pbstrVersionInfo );
+
+ [id ( DISPID_WMPCORE_LAUNCHURL)]
+ HRESULT launchURL([in] BSTR bstrURL);
+
+ [propget, id(DISPID_WMPCORE_NETWORK), helpstring("Returns the network information handler")]
+ HRESULT network([out, retval] IWMPNetwork **ppQNI);
+ [ id( DISPID_WMPCORE_CURRENTPLAYLIST), propget, helpstring( "Returns/sets the current playlist" ) ]
+ HRESULT currentPlaylist( [out, retval] IWMPPlaylist **ppPL );
+ [ id( DISPID_WMPCORE_CURRENTPLAYLIST), propput, helpstring( "Returns the playlist handler" ) ]
+ HRESULT currentPlaylist( [in] IWMPPlaylist *pPL );
+ [ id( DISPID_WMPCORE_CDROMCOLLECTION ), propget, helpstring("Get the CDROM drive collection") ]
+ HRESULT cdromCollection ([out, retval] IWMPCdromCollection** ppCdromCollection);
+ [ id(DISPID_WMPCORE_CLOSEDCAPTION), propget, helpstring("Returns the closed caption handler")]
+ HRESULT closedCaption([out, retval] IWMPClosedCaption **ppClosedCaption);
+ [ id(DISPID_WMPCORE_ISONLINE), propget, helpstring( "Returns whether the machine is online." ) ]
+ HRESULT isOnline( [out, retval] VARIANT_BOOL *pfOnline );
+ [ id(DISPID_WMPCORE_ERROR), propget, helpstring("Returns the error object")]
+ HRESULT error([out, retval] IWMPError **ppError);
+ [ id(DISPID_WMPCORE_STATUS), propget, helpstring("Returns status string")]
+ HRESULT status([out, retval] BSTR *pbstrStatus);
+}
+
+//////////////////////////////////////////////////////////////////////
+// Player Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(6BF52A4F-394A-11d3-B153-00C04F79FAA6),
+ dual,
+ helpstring("IWMPPlayer: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPPlayer : IWMPCore
+{
+ [ id(DISPID_WMPOCX_ENABLED), propget, helpstring("Returns a boolen value specifying whether or not the control is enabled")]
+ HRESULT enabled([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX_ENABLED), propput, helpstring("Sets a boolean value specifying whether or not the control is enabled")]
+ HRESULT enabled([in] VARIANT_BOOL bEnabled);
+ [ id(DISPID_WMPOCX_FULLSCREEN), propget, helpstring("Returns a boolean value specifying whether or not the control is in full screen mode")]
+ HRESULT fullScreen([out, retval] VARIANT_BOOL *pbFullScreen);
+ [ id(DISPID_WMPOCX_FULLSCREEN), propput, helpstring("Sets a boolean value specifying whether or not the control is in full screen mode")]
+ HRESULT fullScreen(VARIANT_BOOL bFullScreen);
+ [ id(DISPID_WMPOCX_ENABLECONTEXTMENU), propget, helpstring("Returns a boolean value specifying whether or not the context menu is enabled on the control")]
+ HRESULT enableContextMenu([out, retval] VARIANT_BOOL *pbEnableContextMenu);
+ [ id(DISPID_WMPOCX_ENABLECONTEXTMENU), propput, helpstring("Sets a boolean value specifying whether or not the context menu is enabled on the control")]
+ HRESULT enableContextMenu(VARIANT_BOOL bEnableContextMenu);
+ [ id(DISPID_WMPOCX_UIMODE), propput, helpstring("Specifies the ui mode to select")]
+ HRESULT uiMode([in] BSTR bstrMode);
+ [ id(DISPID_WMPOCX_UIMODE), propget, helpstring("Returns the currently selected ui mode")]
+ HRESULT uiMode([out, retval] BSTR *pbstrMode);
+}
+
+
+
+
+//////////////////////////////////////////////////////////////////////
+// Player2 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(0E6B01D1-D407-4c85-BF5F-1C01F6150280),
+ dual,
+ helpstring("IWMPPlayer2: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPPlayer2 : IWMPCore
+{
+ [ id(DISPID_WMPOCX_ENABLED), propget, helpstring("Returns a boolen value specifying whether or not the control is enabled")]
+ HRESULT enabled([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX_ENABLED), propput, helpstring("Sets a boolean value specifying whether or not the control is enabled")]
+ HRESULT enabled([in] VARIANT_BOOL bEnabled);
+ [ id(DISPID_WMPOCX_FULLSCREEN), propget, helpstring("Returns a boolean value specifying whether or not the control is in full screen mode")]
+ HRESULT fullScreen([out, retval] VARIANT_BOOL *pbFullScreen);
+ [ id(DISPID_WMPOCX_FULLSCREEN), propput, helpstring("Sets a boolean value specifying whether or not the control is in full screen mode")]
+ HRESULT fullScreen(VARIANT_BOOL bFullScreen);
+ [ id(DISPID_WMPOCX_ENABLECONTEXTMENU), propget, helpstring("Returns a boolean value specifying whether or not the context menu is enabled on the control")]
+ HRESULT enableContextMenu([out, retval] VARIANT_BOOL *pbEnableContextMenu);
+ [ id(DISPID_WMPOCX_ENABLECONTEXTMENU), propput, helpstring("Sets a boolean value specifying whether or not the context menu is enabled on the control")]
+ HRESULT enableContextMenu(VARIANT_BOOL bEnableContextMenu);
+ [ id(DISPID_WMPOCX_UIMODE), propput, helpstring("Specifies the ui mode to select")]
+ HRESULT uiMode([in] BSTR bstrMode);
+ [ id(DISPID_WMPOCX_UIMODE), propget, helpstring("Returns the currently selected ui mode")]
+ HRESULT uiMode([out, retval] BSTR *pbstrMode);
+ [ id(DISPID_WMPOCX2_STRETCHTOFIT), propget, helpstring("Returns a boolen value specifying whether or not video is stretched")]
+ HRESULT stretchToFit([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX2_STRETCHTOFIT), propput, helpstring("Sets a boolean value specifying whether or not video is stretched")]
+ HRESULT stretchToFit([in] VARIANT_BOOL bEnabled);
+ [ id(DISPID_WMPOCX2_WINDOWLESSVIDEO), propget, helpstring("Returns a boolen value specifying whether or not video is windowless")]
+ HRESULT windowlessVideo([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX2_WINDOWLESSVIDEO), propput, helpstring("Sets a boolean value specifying whether or not video is windowless")]
+ HRESULT windowlessVideo([in] VARIANT_BOOL bEnabled);
+}
+
+
+
+
+//////////////////////////////////////////////////////////////////////
+// Media2 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(AB7C88BB-143E-4ea4-ACC3-E4350B2106C3),
+ dual,
+ helpstring("IWMPMedia2: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPMedia2 : IWMPMedia
+{
+ [ id( DISPID_WMPMEDIA2_ERROR ), propget, helpstring( "Returns an error item pointer for a media specific error" ) ]
+ HRESULT error( [out, retval] IWMPErrorItem **ppIWMPErrorItem );
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// Control2 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(6F030D25-0890-480f-9775-1F7E40AB5B8E),
+ dual,
+ helpstring("IWMPControls2: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPControls2 : IWMPControls
+{
+ [ id( DISPID_WMPCONTROLS2_STEP ), helpstring( "Advances the video one frame" )]
+ HRESULT step([in] long lStep );
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// DVD Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(8DA61686-4668-4a5c-AE5D-803193293DBE),
+ dual,
+ helpstring("IWMPDVD: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPDVD : IDispatch
+{
+ [ id( DISPID_WMPDVD_ISAVAILABLE ), propget, helpstring( "Returns whether or not the specified DVD functionality is available" ) ]
+ HRESULT isAvailable( [in] BSTR bstrItem, [out, retval] VARIANT_BOOL *pIsAvailable );
+ [ id( DISPID_WMPDVD_DOMAIN ), propget, helpstring( "Returns the current DVD domain" ) ]
+ HRESULT domain( [out, retval] BSTR * strDomain );
+ [ id( DISPID_WMPDVD_TOPMENU ), helpstring( "Displays the top menu of the DVD" ) ]
+ HRESULT topMenu();
+ [ id( DISPID_WMPDVD_TITLEMENU ), helpstring( "Displays the title menu of the current DVD title" ) ]
+ HRESULT titleMenu();
+ [ id( DISPID_WMPDVD_BACK ), helpstring( "Navigates back one menu" ) ]
+ HRESULT back();
+ [ id( DISPID_WMPDVD_RESUME ), helpstring( "Removes the menu from the screen and returns to playing the DVD" ) ]
+ HRESULT resume();
+}
+
+//////////////////////////////////////////////////////////////////////
+// Core2 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(BC17E5B7-7561-4c18-BB90-17D485775659),
+ dual,
+ helpstring("IWMPCore2: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPCore2 : IWMPCore
+{
+ [ id(DISPID_WMPCORE2_DVD), propget, helpstring("Returns the DVD handler")]
+ HRESULT dvd([out, retval] IWMPDVD ** ppDVD);
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// Player3 Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(54062B68-052A-4c25-A39F-8B63346511D4),
+ dual,
+ helpstring("IWMPPlayer3: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPPlayer3 : IWMPCore2
+{
+ [ id(DISPID_WMPOCX_ENABLED), propget, helpstring("Returns a boolen value specifying whether or not the control is enabled")]
+ HRESULT enabled([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX_ENABLED), propput, helpstring("Sets a boolean value specifying whether or not the control is enabled")]
+ HRESULT enabled([in] VARIANT_BOOL bEnabled);
+ [ id(DISPID_WMPOCX_FULLSCREEN), propget, helpstring("Returns a boolean value specifying whether or not the control is in full screen mode")]
+ HRESULT fullScreen([out, retval] VARIANT_BOOL *pbFullScreen);
+ [ id(DISPID_WMPOCX_FULLSCREEN), propput, helpstring("Sets a boolean value specifying whether or not the control is in full screen mode")]
+ HRESULT fullScreen(VARIANT_BOOL bFullScreen);
+ [ id(DISPID_WMPOCX_ENABLECONTEXTMENU), propget, helpstring("Returns a boolean value specifying whether or not the context menu is enabled on the control")]
+ HRESULT enableContextMenu([out, retval] VARIANT_BOOL *pbEnableContextMenu);
+ [ id(DISPID_WMPOCX_ENABLECONTEXTMENU), propput, helpstring("Sets a boolean value specifying whether or not the context menu is enabled on the control")]
+ HRESULT enableContextMenu(VARIANT_BOOL bEnableContextMenu);
+ [ id(DISPID_WMPOCX_UIMODE), propput, helpstring("Specifies the ui mode to select")]
+ HRESULT uiMode([in] BSTR bstrMode);
+ [ id(DISPID_WMPOCX_UIMODE), propget, helpstring("Returns the currently selected ui mode")]
+ HRESULT uiMode([out, retval] BSTR *pbstrMode);
+ [ id(DISPID_WMPOCX2_STRETCHTOFIT), propget, helpstring("Returns a boolen value specifying whether or not video is stretched")]
+ HRESULT stretchToFit([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX2_STRETCHTOFIT), propput, helpstring("Sets a boolean value specifying whether or not video is stretched")]
+ HRESULT stretchToFit([in] VARIANT_BOOL bEnabled);
+ [ id(DISPID_WMPOCX2_WINDOWLESSVIDEO), propget, helpstring("Returns a boolen value specifying whether or not video is windowless")]
+ HRESULT windowlessVideo([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX2_WINDOWLESSVIDEO), propput, helpstring("Sets a boolean value specifying whether or not video is windowless")]
+ HRESULT windowlessVideo([in] VARIANT_BOOL bEnabled);
+}
+
+
+
+[
+ object,
+ uuid(F75CCEC0-C67C-475c-931E-8719870BEE7D),
+ dual,
+ helpstring("IWMPErrorItem2: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPErrorItem2 : IWMPErrorItem
+{
+ // properties
+ [ id(DISPID_WMPERRORITEM2_CONDITION), propget, helpstring("Returns condition for the error") ]
+ HRESULT condition( [out, retval] long * plCondition );
+}
+
+[
+ object,
+ uuid(CBB92747-741F-44fe-AB5B-F1A48F3B2A59),
+ helpstring("IWMPRemoteMediaServices: Public interface for Windows Media Player SDK."),
+ pointer_default(unique)
+]
+interface IWMPRemoteMediaServices : IUnknown
+{
+ // methods
+ HRESULT GetServiceType( [out] BSTR * pbstrType );
+ HRESULT GetApplicationName( [out] BSTR * pbstrName );
+ HRESULT GetScriptableObject( [out] BSTR * pbstrName, [out] IDispatch ** ppDispatch );
+ HRESULT GetCustomUIMode( [out] BSTR * pbstrFile);
+}
+
+// {B2A7FD52-301F-4348-B93A-638C6DE49229}
+cpp_quote("EXTERN_GUID( CLSID_WMPSkinManager, 0xB2A7FD52,0x301F,0x4348, 0xB9, 0x3A, 0x63, 0x8C, 0x6D, 0xE4, 0x92, 0x29 );")
+
+[
+ object,
+ uuid(076F2FA6-ED30-448B-8CC5-3F3EF3529C7A),
+ helpstring("IWMPSkinManager: Public interface for Windows Media Player SDK."),
+ pointer_default(unique)
+]
+interface IWMPSkinManager : IUnknown
+{
+ HRESULT SetVisualStyle([in] BSTR bstrPath);
+};
+
+//////////////////////////////////////////////////////////////////////
+// IWMPMetadata Interfaces
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(5C29BBE0-F87D-4c45-AA28-A70F0230FFA9),
+ dual,
+ helpstring("IWMPMetadataPicture: Not Public. Internal interface used by Windows Media Player."),
+ pointer_default(unique)
+]
+interface IWMPMetadataPicture : IDispatch
+{
+ [ id(DISPID_WMPMETADATA_PICTURE_MIMETYPE), propget]
+ HRESULT mimeType([out, retval] BSTR *pbstrMimeType);
+ [ id(DISPID_WMPMETADATA_PICTURE_PICTURETYPE), propget]
+ HRESULT pictureType([out, retval] BSTR *pbstrPictureType);
+ [ id(DISPID_WMPMETADATA_PICTURE_DESCRIPTION), propget]
+ HRESULT description([out, retval] BSTR *pbstrDescription);
+ [ id(DISPID_WMPMETADATA_PICTURE_URL), propget]
+ HRESULT URL([out, retval] BSTR *pbstrURL);
+}
+
+[
+ object,
+ uuid(769A72DB-13D2-45e2-9C48-53CA9D5B7450),
+ dual,
+ helpstring("IWMPMetadataText: Not Public. Internal interface used by Windows Media Player."),
+ pointer_default(unique)
+]
+interface IWMPMetadataText : IDispatch
+{
+ [ id(DISPID_WMPMETADATA_TEXT_DESCRIPTION), propget]
+ HRESULT description([out, retval] BSTR *pbstrDescription);
+ [ id(DISPID_WMPMETADATA_TEXT_TEXT), propget]
+ HRESULT text([out, retval] BSTR *pbstrText);
+}
+
+//////////////////////////////////////////////////////////////////////
+// IWMPMedia3 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(F118EFC7-F03A-4fb4-99C9-1C02A5C1065B),
+ dual,
+ helpstring("IWMPMedia3: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPMedia3 : IWMPMedia2
+{
+ [
+ id(DISPID_WMPMEDIA3_GETATTRIBUTECOUNTBYTYPE)]
+ HRESULT getAttributeCountByType([in] BSTR bstrType, [in] BSTR bstrLanguage, [out, retval] long *plCount);
+ [
+ id(DISPID_WMPMEDIA3_GETITEMINFOBYTYPE)]
+ HRESULT getItemInfoByType([in] BSTR bstrType, [in] BSTR bstrLanguage, [in] long lIndex, [out, retval] VARIANT *pvarValue);
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// IWMPSettings2 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(FDA937A4-EECE-4da5-A0B6-39BF89ADE2C2),
+ dual,
+ helpstring("IWMPSettings2: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPSettings2 : IWMPSettings
+{
+ [ id(DISPID_WMPSETTINGS2_DEFAULTAUDIOLANGUAGE), propget, helpstring("Returns the LCID of default audio language")]
+ HRESULT defaultAudioLanguage( [out, retval] long *plLangID );
+ [ id(DISPID_WMPSETTINGS2_LIBRARYACCESSRIGHTS), propget]
+ HRESULT mediaAccessRights( [out, retval] BSTR * pbstrRights );
+ [ id(DISPID_WMPSETTINGS2_REQUESTLIBRARYACCESSRIGHTS)]
+ HRESULT requestMediaAccessRights( [in] BSTR bstrDesiredAccess, [out, retval] VARIANT_BOOL * pvbAccepted );
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// IWMPControls3 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(A1D1110E-D545-476a-9A78-AC3E4CB1E6BD),
+ dual,
+ helpstring("IWMPControls3: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPControls3 : IWMPControls2
+{
+ [ id(DISPID_WMPCONTROLS3_AUDIOLANGUAGECOUNT), propget, helpstring("Returns the count of supported audio languages")]
+ HRESULT audioLanguageCount( [out, retval] long *plCount );
+ [ id(DISPID_WMPCONTROLS3_GETAUDIOLANGUAGEID), helpstring("Returns the LCID corresponding to the index")]
+ HRESULT getAudioLanguageID( [in] long lIndex, [out, retval] long *plLangID );
+ [ id(DISPID_WMPCONTROLS3_GETAUDIOLANGUAGEDESC), helpstring("Returns the desription corresponding to the index")]
+ HRESULT getAudioLanguageDescription( [in] long lIndex, [out, retval] BSTR *pbstrLangDesc );
+ [ id(DISPID_WMPCONTROLS3_CURRENTAUDIOLANGUAGE), propget, helpstring("Gets the current audio language setting for playback")]
+ HRESULT currentAudioLanguage( [out, retval] long *plLangID );
+ [ id(DISPID_WMPCONTROLS3_CURRENTAUDIOLANGUAGE), propput, helpstring("Sets the current audio language setting for playback")]
+ HRESULT currentAudioLanguage( [in] long lLangID );
+ [ id(DISPID_WMPCONTROLS3_CURRENTAUDIOLANGUAGEINDEX), propget, helpstring("Gets the current audio language index setting for playback")]
+ HRESULT currentAudioLanguageIndex( [out, retval] long *plIndex );
+ [ id(DISPID_WMPCONTROLS3_CURRENTAUDIOLANGUAGEINDEX), propput, helpstring("Sets the current audio language index setting for playback")]
+ HRESULT currentAudioLanguageIndex( [in] long lIndex );
+ [ id(DISPID_WMPCONTROLS3_GETLANGUAGENAME), helpstring("Returns the human-readable name of language specified by LCID")]
+ HRESULT getLanguageName( [in] long lLangID, [out, retval] BSTR *pbstrLangName );
+ [ id(DISPID_WMPCONTROLS3_CURRENTPOSITIONTIMECODE), propget, helpstring( "Returns the current timecode position in media" ) ]
+ HRESULT currentPositionTimecode( [out, retval] BSTR * bstrTimecode );
+ [ id(DISPID_WMPCONTROLS3_CURRENTPOSITIONTIMECODE), propput, helpstring( "Sets the current timecode position in media" ) ]
+ HRESULT currentPositionTimecode( [in] BSTR bstrTimecode );
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// IWMPClosedCaption2 Interface
+//////////////////////////////////////////////////////////////////////
+[
+ object,
+ uuid(350BA78B-6BC8-4113-A5F5-312056934EB6),
+ dual,
+ helpstring("IWMPClosedCaption2: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPClosedCaption2 : IWMPClosedCaption
+{
+ [ id( DISPID_WMPCLOSEDCAPTION2_GETLANGCOUNT ), propget, helpstring( "Returns the count of SAMI languages" ) ]
+ HRESULT SAMILangCount( [out, retval] long * plCount );
+ [ id( DISPID_WMPCLOSEDCAPTION2_GETLANGNAME ), helpstring( "Returns the name of a SAMI language by index" ) ]
+ HRESULT getSAMILangName( [in] long nIndex, [out, retval] BSTR * pbstrName );
+ [ id( DISPID_WMPCLOSEDCAPTION2_GETLANGID ), helpstring( "Returns the ID of a SAMI language by index" ) ]
+ HRESULT getSAMILangID( [in] long nIndex, [out, retval] long * plLangID );
+ [ id( DISPID_WMPCLOSEDCAPTION2_GETSTYLECOUNT ), propget, helpstring( "Returns the count of SAMI styles" ) ]
+ HRESULT SAMIStyleCount( [out, retval] long * plCount );
+ [ id( DISPID_WMPCLOSEDCAPTION2_GETSTYLENAME ), helpstring( "Returns the name of a SAMI style by index" ) ]
+ HRESULT getSAMIStyleName( [in] long nIndex, [out, retval] BSTR * pbstrName );
+}
+
+
+//////////////////////////////////////////////////////////////////////
+// IWMPPlayerApplication Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(40897764-CEAB-47be-AD4A-8E28537F9BBF),
+ dual,
+ helpstring("IWMPPlayerApplication: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPPlayerApplication : IDispatch
+{
+ [ id(DISPID_WMPPLAYERAPP_SWITCHTOPLAYERAPPLICATION), helpstring("Switches the display to player application")]
+ HRESULT switchToPlayerApplication();
+ [ id(DISPID_WMPPLAYERAPP_SWITCHTOCONTROL), helpstring("Switches the display to control")]
+ HRESULT switchToControl();
+ [ id(DISPID_WMPPLAYERAPP_PLAYERDOCKED), propget, helpstring("Returns a boolean value specifying whether or not the player is docked")]
+ HRESULT playerDocked([out, retval] VARIANT_BOOL *pbPlayerDocked);
+ [ id(DISPID_WMPPLAYERAPP_HASDISPLAY), propget, helpstring("Returns a boolean value specifying whether or not the control has display")]
+ HRESULT hasDisplay([out, retval] VARIANT_BOOL *pbHasDisplay);
+}
+
+//////////////////////////////////////////////////////////////////////
+// IWMPCore3 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(7587C667-628F-499f-88E7-6A6F4E888464),
+ dual,
+ helpstring("IWMPCore3: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPCore3 : IWMPCore2
+{
+ // methods
+ [ id( DISPID_WMPCORE3_NEWPLAYLIST ), helpstring( "Creates a new playlist object" ) ]
+ HRESULT newPlaylist( [in] BSTR bstrName, [in] BSTR bstrURL, [out, retval] IWMPPlaylist **ppPlaylist );
+ [ id( DISPID_WMPCORE3_NEWMEDIA ), helpstring( "Creates a new media object" ) ]
+ HRESULT newMedia( [in] BSTR bstrURL, [out, retval] IWMPMedia **ppMedia );
+}
+
+//////////////////////////////////////////////////////////////////////
+// IWMPPlayer4 Interface
+//////////////////////////////////////////////////////////////////////
+
+[
+ object,
+ uuid(6C497D62-8919-413c-82DB-E935FB3EC584),
+ dual,
+ helpstring("IWMPPlayer4: Public interface."),
+ pointer_default(unique)
+]
+interface IWMPPlayer4 : IWMPCore3
+{
+ [ id(DISPID_WMPOCX_ENABLED), propget, helpstring("Returns a boolean value specifying whether or not the control is enabled")]
+ HRESULT enabled([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX_ENABLED), propput, helpstring("Sets a boolean value specifying whether or not the control is enabled")]
+ HRESULT enabled([in] VARIANT_BOOL bEnabled);
+ [ id(DISPID_WMPOCX_FULLSCREEN), propget, helpstring("Returns a boolean value specifying whether or not the control is in full screen mode")]
+ HRESULT fullScreen([out, retval] VARIANT_BOOL *pbFullScreen);
+ [ id(DISPID_WMPOCX_FULLSCREEN), propput, helpstring("Sets a boolean value specifying whether or not the control is in full screen mode")]
+ HRESULT fullScreen(VARIANT_BOOL bFullScreen);
+ [ id(DISPID_WMPOCX_ENABLECONTEXTMENU), propget, helpstring("Returns a boolean value specifying whether or not the context menu is enabled on the control")]
+ HRESULT enableContextMenu([out, retval] VARIANT_BOOL *pbEnableContextMenu);
+ [ id(DISPID_WMPOCX_ENABLECONTEXTMENU), propput, helpstring("Sets a boolean value specifying whether or not the context menu is enabled on the control")]
+ HRESULT enableContextMenu(VARIANT_BOOL bEnableContextMenu);
+ [ id(DISPID_WMPOCX_UIMODE), propput, helpstring("Specifies the ui mode to select")]
+ HRESULT uiMode([in] BSTR bstrMode);
+ [ id(DISPID_WMPOCX_UIMODE), propget, helpstring("Returns the currently selected ui mode")]
+ HRESULT uiMode([out, retval] BSTR *pbstrMode);
+ [ id(DISPID_WMPOCX2_STRETCHTOFIT), propget, helpstring("Returns a boolean value specifying whether or not video is stretched")]
+ HRESULT stretchToFit([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX2_STRETCHTOFIT), propput, helpstring("Sets a boolean value specifying whether or not video is stretched")]
+ HRESULT stretchToFit([in] VARIANT_BOOL bEnabled);
+ [ id(DISPID_WMPOCX2_WINDOWLESSVIDEO), propget, helpstring("Returns a boolean value specifying whether or not video is windowless")]
+ HRESULT windowlessVideo([out, retval] VARIANT_BOOL *pbEnabled);
+ [ id(DISPID_WMPOCX2_WINDOWLESSVIDEO), propput, helpstring("Sets a boolean value specifying whether or not video is windowless")]
+ HRESULT windowlessVideo([in] VARIANT_BOOL bEnabled);
+ [ id(DISPID_WMPOCX4_ISREMOTE), propget, helpstring("Indicates whether the player is running remotely")]
+ HRESULT isRemote( [out, retval] VARIANT_BOOL *pvarfIsRemote );
+ [ id(DISPID_WMPOCX4_PLAYERAPPLICATION ), propget, helpstring( "Returns the player application handler" ) ]
+ HRESULT playerApplication( [out, retval] IWMPPlayerApplication **ppIWMPPlayerApplication );
+ [ id(DISPID_WMPOCX4_OPENPLAYER ), helpstring( "Opens the player with the specified URL" ) ]
+ HRESULT openPlayer( [in] BSTR bstrURL );
+}
+
+[
+ object,
+ uuid(1D01FBDB-ADE2-4c8d-9842-C190B95C3306),
+ helpstring("IWMPPlayerServices: Public interface for Windows Media Player SDK."),
+ pointer_default(unique)
+]
+interface IWMPPlayerServices : IUnknown
+{
+ HRESULT activateUIPlugin([in] BSTR bstrPlugin);
+ HRESULT setTaskPane([in] BSTR bstrTaskPane);
+ HRESULT setTaskPaneURL( [in] BSTR bstrTaskPane, [in] BSTR bstrURL, [in] BSTR bstrFriendlyName);
+}
+
+cpp_quote("struct DECLSPEC_UUID(\"6BF52A50-394A-11d3-B153-00C04F79FAA6\") WMPLib;")
+cpp_quote("struct DECLSPEC_UUID(\"DF333473-2CF7-4be2-907F-9AAD5661364F\") WMPRemoteMediaServices;")
+
+[
+ uuid(6BF52A50-394A-11d3-B153-00C04F79FAA6),
+ version(1.0),
+ helpstring("Windows Media Player")
+]
+library WMPLib
+{
+ importlib("stdole32.tlb");
+ importlib("stdole2.tlb");
+
+ //////////////////////////////////////////////////////////////////////
+ // Events
+ //////////////////////////////////////////////////////////////////////
+
+ [
+ object,
+ uuid(19A6627B-DA9E-47c1-BB23-00B5E668236A),
+ helpstring("IWMPEvents: Public interface."),
+ pointer_default(unique)
+ ]
+ interface IWMPEvents : IUnknown
+ {
+ // Graph creation
+ [ id( DISPID_WMPCOREEVENT_OPENSTATECHANGE ), helpstring( "Sent when the control changes OpenState" ) ]
+ void OpenStateChange( [in] long NewState );
+
+ // control
+ [ id( DISPID_WMPCOREEVENT_PLAYSTATECHANGE ), helpstring( "Sent when the control changes PlayState" ) ]
+ void PlayStateChange( [in] long NewState );
+ [ id( DISPID_WMPCOREEVENT_AUDIOLANGUAGECHANGE ), helpstring( "Sent when the current audio language has changed" ) ]
+ void AudioLanguageChange( [in] long LangID );
+
+ // Status
+ [ id( DISPID_WMPCOREEVENT_STATUSCHANGE ), helpstring( "Sent when the status string changes" ) ]
+ void StatusChange();
+
+ // content
+ [ id( DISPID_WMPCOREEVENT_SCRIPTCOMMAND ), helpstring( "Sent when a synchronized command or URL is received" ) ]
+ void ScriptCommand( [in] BSTR scType, [in] BSTR Param );
+
+ // network
+ [ id( DISPID_WMPCOREEVENT_NEWSTREAM ), helpstring( "Sent when a new stream is started in a channel" ) ]
+ void NewStream();
+ [ id( DISPID_WMPCOREEVENT_DISCONNECT ), helpstring( "Sent when the control is disconnected from the server" ) ]
+ void Disconnect( [in] long Result );
+ [ id( DISPID_WMPCOREEVENT_BUFFERING ), helpstring( "Sent when the control begins or ends buffering" ) ]
+ void Buffering( [in] VARIANT_BOOL Start );
+
+ // error
+ [ id( DISPID_WMPCOREEVENT_ERROR ), helpstring( "Sent when the control has an error condition" ) ]
+ void Error();
+
+ // warning
+ [ id( DISPID_WMPCOREEVENT_WARNING ), helpstring( "Sent when the control encounters a problem" ) ]
+ void Warning( [in] long WarningType, [in] long Param, [in] BSTR Description );
+
+ // seek
+ [ id( DISPID_WMPCOREEVENT_ENDOFSTREAM ), helpstring( "Sent when the end of file is reached" ) ]
+ void EndOfStream( [in] long Result );
+ [ id( DISPID_WMPCOREEVENT_POSITIONCHANGE), helpstring("Indicates that the current position of the movie has changed")]
+ void PositionChange([in] double oldPosition, [in] double newPosition);
+ [ id( DISPID_WMPCOREEVENT_MARKERHIT ), helpstring( "Sent when a marker is reached" ) ]
+ void MarkerHit( [in] long MarkerNum );
+ [ id( DISPID_WMPCOREEVENT_DURATIONUNITCHANGE), helpstring("Indicates that the unit used to express duration and position has changed")]
+ void DurationUnitChange( [in] long NewDurationUnit );
+
+ // cdrom
+ [ id( DISPID_WMPCOREEVENT_CDROMMEDIACHANGE), helpstring("Indicates that the CD ROM media has changed") ]
+ void CdromMediaChange( [in] long CdromNum );
+
+ // playlist
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCHANGE), helpstring("Sent when a playlist changes") ]
+ void PlaylistChange( [in] IDispatch * Playlist, [in] WMPPlaylistChangeEventType change );
+ [ id( DISPID_WMPCOREEVENT_CURRENTPLAYLISTCHANGE), helpstring("Sent when the current playlist changes") ]
+ void CurrentPlaylistChange( [in] WMPPlaylistChangeEventType change );
+ [ id( DISPID_WMPCOREEVENT_CURRENTPLAYLISTITEMAVAILABLE), helpstring("Sent when a current playlist item becomes available") ]
+ void CurrentPlaylistItemAvailable( [in] BSTR bstrItemName );
+ [ id( DISPID_WMPCOREEVENT_MEDIACHANGE), helpstring("Sent when a media object changes") ]
+ void MediaChange( [in] IDispatch * Item );
+ [ id( DISPID_WMPCOREEVENT_CURRENTMEDIAITEMAVAILABLE), helpstring("Sent when a current media item becomes available") ]
+ void CurrentMediaItemAvailable( [in] BSTR bstrItemName );
+ [ id( DISPID_WMPCOREEVENT_CURRENTITEMCHANGE), helpstring("Sent when the item selection on the current playlist changes") ]
+ void CurrentItemChange( [in] IDispatch *pdispMedia);
+ [ id( DISPID_WMPCOREEVENT_MEDIACOLLECTIONCHANGE), helpstring("Sent when the media collection needs to be requeried") ]
+ void MediaCollectionChange();
+ [ id( DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGADDED), helpstring("Sent when an attribute string is added in the media collection") ]
+ void MediaCollectionAttributeStringAdded( [in] BSTR bstrAttribName, [in] BSTR bstrAttribVal );
+ [ id( DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGREMOVED), helpstring("Sent when an attribute string is removed from the media collection") ]
+ void MediaCollectionAttributeStringRemoved( [in] BSTR bstrAttribName, [in] BSTR bstrAttribVal );
+ [ id( DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGCHANGED), helpstring("Sent when an attribute string is changed in the media collection") ]
+ void MediaCollectionAttributeStringChanged([in] BSTR bstrAttribName, [in] BSTR bstrOldAttribVal, [in] BSTR bstrNewAttribVal);
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONCHANGE), helpstring("Sent when playlist collection needs to be requeried") ]
+ void PlaylistCollectionChange();
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTADDED), helpstring("Sent when a playlist is added to the playlist collection") ]
+ void PlaylistCollectionPlaylistAdded([in] BSTR bstrPlaylistName);
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTREMOVED), helpstring("Sent when a playlist is removed from the playlist collection") ]
+ void PlaylistCollectionPlaylistRemoved([in] BSTR bstrPlaylistName);
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTSETASDELETED), helpstring("Sent when a playlist has been set or reset as deleted")]
+ void PlaylistCollectionPlaylistSetAsDeleted([in] BSTR bstrPlaylistName, [in] VARIANT_BOOL varfIsDeleted);
+ [ id( DISPID_WMPCOREEVENT_MODECHANGE), helpstring("Playlist playback mode has changed")]
+ void ModeChange([in] BSTR ModeName, [in] VARIANT_BOOL NewValue);
+ [ id( DISPID_WMPCOREEVENT_MEDIAERROR ), helpstring( "Sent when the media object has an error condition" ) ]
+ void MediaError( [in] IDispatch * pMediaObject);
+ [ id( DISPID_WMPCOREEVENT_OPENPLAYLISTSWITCH), helpstring("Current playlist switch with no open state change") ]
+ void OpenPlaylistSwitch( [in] IDispatch *pItem );
+
+ // dvd
+ [ id( DISPID_WMPCOREEVENT_DOMAINCHANGE ), helpstring( "Send a current domain" ) ]
+ void DomainChange([in] BSTR strDomain);
+
+ // OCX
+ [ id( DISPID_WMPOCXEVENT_SWITCHEDTOPLAYERAPPLICATION ), helpstring( "Sent when display switches to player application" ) ]
+ void SwitchedToPlayerApplication();
+ [ id( DISPID_WMPOCXEVENT_SWITCHEDTOCONTROL ), helpstring( "Sent when display switches to control" ) ]
+ void SwitchedToControl();
+ [ id( DISPID_WMPOCXEVENT_PLAYERDOCKEDSTATECHANGE ), helpstring( "Sent when the player docks or undocks" ) ]
+ void PlayerDockedStateChange();
+ [ id( DISPID_WMPOCXEVENT_PLAYERRECONNECT ), helpstring( "Sent when the OCX reconnects to the player" ) ]
+ void PlayerReconnect();
+ [ id( DISPID_WMPOCXEVENT_CLICK ), helpstring( "Occurs when a user clicks the mouse" ) ]
+ void Click( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ [ id( DISPID_WMPOCXEVENT_DOUBLECLICK ), helpstring( "Occurs when a user double-clicks the mouse" ) ]
+ void DoubleClick( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ [ id( DISPID_WMPOCXEVENT_KEYDOWN ), helpstring( "Occurs when a key is pressed" ) ]
+ void KeyDown( [in] short nKeyCode, [in] short nShiftState );
+ [ id( DISPID_WMPOCXEVENT_KEYPRESS ), helpstring( "Occurs when a key is pressed and released" ) ]
+ void KeyPress( [in] short nKeyAscii );
+ [ id( DISPID_WMPOCXEVENT_KEYUP ), helpstring( "Occurs when a key is released" ) ]
+ void KeyUp( [in] short nKeyCode, [in] short nShiftState );
+ [ id( DISPID_WMPOCXEVENT_MOUSEDOWN ), helpstring( "Occurs when a mouse button is pressed" ) ]
+ void MouseDown( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ [ id( DISPID_WMPOCXEVENT_MOUSEMOVE ), helpstring( "Occurs when a mouse pointer is moved" ) ]
+ void MouseMove( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ [ id( DISPID_WMPOCXEVENT_MOUSEUP ), helpstring( "Occurs when a mouse button is released" ) ]
+ void MouseUp( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ };
+
+
+ [
+ uuid(6BF52A51-394A-11d3-B153-00C04F79FAA6),
+ helpstring("_WMPOCXEvents: Public interface."),
+ hidden
+ ]
+ dispinterface _WMPOCXEvents
+ {
+ properties:
+ methods:
+ // Graph creation
+ [ id( DISPID_WMPCOREEVENT_OPENSTATECHANGE ), helpstring( "Sent when the control changes OpenState" ) ]
+ void OpenStateChange( [in] long NewState );
+
+ // control
+ [ id( DISPID_WMPCOREEVENT_PLAYSTATECHANGE ), helpstring( "Sent when the control changes PlayState" ) ]
+ void PlayStateChange( [in] long NewState );
+ [ id( DISPID_WMPCOREEVENT_AUDIOLANGUAGECHANGE ), helpstring( "Sent when the current audio language has changed" ) ]
+ void AudioLanguageChange( [in] long LangID );
+
+ // Status
+ [ id( DISPID_WMPCOREEVENT_STATUSCHANGE ), helpstring( "Sent when the status string changes" ) ]
+ void StatusChange();
+
+ // content
+ [ id( DISPID_WMPCOREEVENT_SCRIPTCOMMAND ), helpstring( "Sent when a synchronized command or URL is received" ) ]
+ void ScriptCommand( [in] BSTR scType, [in] BSTR Param );
+
+ // network
+ [ id( DISPID_WMPCOREEVENT_NEWSTREAM ), helpstring( "Sent when a new stream is started in a channel" ) ]
+ void NewStream();
+ [ id( DISPID_WMPCOREEVENT_DISCONNECT ), helpstring( "Sent when the control is disconnected from the server" ) ]
+ void Disconnect( [in] long Result );
+ [ id( DISPID_WMPCOREEVENT_BUFFERING ), helpstring( "Sent when the control begins or ends buffering" ) ]
+ void Buffering( [in] VARIANT_BOOL Start );
+
+ // error
+ [ id( DISPID_WMPCOREEVENT_ERROR ), helpstring( "Sent when the control has an error condition" ) ]
+ void Error();
+
+ // warning
+ [ id( DISPID_WMPCOREEVENT_WARNING ), helpstring( "Sent when the control encounters a problem" ) ]
+ void Warning( [in] long WarningType, [in] long Param, [in] BSTR Description );
+
+ // seek
+ [ id( DISPID_WMPCOREEVENT_ENDOFSTREAM ), helpstring( "Sent when the end of file is reached" ) ]
+ void EndOfStream( [in] long Result );
+ [ id( DISPID_WMPCOREEVENT_POSITIONCHANGE), helpstring("Indicates that the current position of the movie has changed")]
+ void PositionChange([in] double oldPosition, [in] double newPosition);
+ [ id( DISPID_WMPCOREEVENT_MARKERHIT ), helpstring( "Sent when a marker is reached" ) ]
+ void MarkerHit( [in] long MarkerNum );
+ [ id( DISPID_WMPCOREEVENT_DURATIONUNITCHANGE), helpstring("Indicates that the unit used to express duration and position has changed")]
+ void DurationUnitChange( [in] long NewDurationUnit );
+
+ // cdrom
+ [ id( DISPID_WMPCOREEVENT_CDROMMEDIACHANGE), helpstring("Indicates that the CD ROM media has changed") ]
+ void CdromMediaChange( [in] long CdromNum );
+
+ // playlist
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCHANGE), helpstring("Sent when a playlist changes") ]
+ void PlaylistChange( [in] IDispatch * Playlist, [in] WMPPlaylistChangeEventType change );
+ [ id( DISPID_WMPCOREEVENT_CURRENTPLAYLISTCHANGE), helpstring("Sent when the current playlist changes") ]
+ void CurrentPlaylistChange( [in] WMPPlaylistChangeEventType change );
+ [ id( DISPID_WMPCOREEVENT_CURRENTPLAYLISTITEMAVAILABLE), helpstring("Sent when a current playlist item becomes available") ]
+ void CurrentPlaylistItemAvailable( [in] BSTR bstrItemName );
+ [ id( DISPID_WMPCOREEVENT_MEDIACHANGE), helpstring("Sent when a media object changes") ]
+ void MediaChange( [in] IDispatch * Item );
+ [ id( DISPID_WMPCOREEVENT_CURRENTMEDIAITEMAVAILABLE), helpstring("Sent when a current media item becomes available") ]
+ void CurrentMediaItemAvailable( [in] BSTR bstrItemName );
+ [ id( DISPID_WMPCOREEVENT_CURRENTITEMCHANGE), helpstring("Sent when the item selection on the current playlist changes") ]
+ void CurrentItemChange( [in] IDispatch *pdispMedia);
+ [ id( DISPID_WMPCOREEVENT_MEDIACOLLECTIONCHANGE), helpstring("Sent when the media collection needs to be requeried") ]
+ void MediaCollectionChange();
+ [ id( DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGADDED), helpstring("Sent when an attribute string is added in the media collection") ]
+ void MediaCollectionAttributeStringAdded( [in] BSTR bstrAttribName, [in] BSTR bstrAttribVal );
+ [ id( DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGREMOVED), helpstring("Sent when an attribute string is removed from the media collection") ]
+ void MediaCollectionAttributeStringRemoved( [in] BSTR bstrAttribName, [in] BSTR bstrAttribVal );
+ [ id( DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGCHANGED), helpstring("Sent when an attribute string is changed in the media collection") ]
+ void MediaCollectionAttributeStringChanged([in] BSTR bstrAttribName, [in] BSTR bstrOldAttribVal, [in] BSTR bstrNewAttribVal);
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONCHANGE), helpstring("Sent when playlist collection needs to be requeried") ]
+ void PlaylistCollectionChange();
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTADDED), helpstring("Sent when a playlist is added to the playlist collection") ]
+ void PlaylistCollectionPlaylistAdded([in] BSTR bstrPlaylistName);
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTREMOVED), helpstring("Sent when a playlist is removed from the playlist collection") ]
+ void PlaylistCollectionPlaylistRemoved([in] BSTR bstrPlaylistName);
+ [ id( DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTSETASDELETED), helpstring("Sent when a playlist has been set or reset as deleted")]
+ void PlaylistCollectionPlaylistSetAsDeleted([in] BSTR bstrPlaylistName, [in] VARIANT_BOOL varfIsDeleted);
+ [ id( DISPID_WMPCOREEVENT_MODECHANGE), helpstring("Playlist playback mode has changed")]
+ void ModeChange([in] BSTR ModeName, [in] VARIANT_BOOL NewValue);
+ [ id( DISPID_WMPCOREEVENT_MEDIAERROR ), helpstring( "Sent when the media object has an error condition" ) ]
+ void MediaError( [in] IDispatch * pMediaObject);
+ [ id( DISPID_WMPCOREEVENT_OPENPLAYLISTSWITCH), helpstring("Current playlist switch with no open state change") ]
+ void OpenPlaylistSwitch( [in] IDispatch *pItem );
+
+ // dvd
+ [ id( DISPID_WMPCOREEVENT_DOMAINCHANGE ), helpstring( "Send a current domain" ) ]
+ void DomainChange([in] BSTR strDomain);
+
+ // OCX
+ [ id( DISPID_WMPOCXEVENT_SWITCHEDTOPLAYERAPPLICATION ), helpstring( "Sent when display switches to player application" ) ]
+ void SwitchedToPlayerApplication();
+ [ id( DISPID_WMPOCXEVENT_SWITCHEDTOCONTROL ), helpstring( "Sent when display switches to control" ) ]
+ void SwitchedToControl();
+ [ id( DISPID_WMPOCXEVENT_PLAYERDOCKEDSTATECHANGE ), helpstring( "Sent when the player docks or undocks" ) ]
+ void PlayerDockedStateChange();
+ [ id( DISPID_WMPOCXEVENT_PLAYERRECONNECT ), helpstring( "Sent when the OCX reconnects to the player" ) ]
+ void PlayerReconnect();
+ [ id( DISPID_WMPOCXEVENT_CLICK ), helpstring( "Occurs when a user clicks the mouse" ) ]
+ void Click( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ [ id( DISPID_WMPOCXEVENT_DOUBLECLICK ), helpstring( "Occurs when a user double-clicks the mouse" ) ]
+ void DoubleClick( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ [ id( DISPID_WMPOCXEVENT_KEYDOWN ), helpstring( "Occurs when a key is pressed" ) ]
+ void KeyDown( [in] short nKeyCode, [in] short nShiftState );
+ [ id( DISPID_WMPOCXEVENT_KEYPRESS ), helpstring( "Occurs when a key is pressed and released" ) ]
+ void KeyPress( [in] short nKeyAscii );
+ [ id( DISPID_WMPOCXEVENT_KEYUP ), helpstring( "Occurs when a key is released" ) ]
+ void KeyUp( [in] short nKeyCode, [in] short nShiftState );
+ [ id( DISPID_WMPOCXEVENT_MOUSEDOWN ), helpstring( "Occurs when a mouse button is pressed" ) ]
+ void MouseDown( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ [ id( DISPID_WMPOCXEVENT_MOUSEMOVE ), helpstring( "Occurs when a mouse pointer is moved" ) ]
+ void MouseMove( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ [ id( DISPID_WMPOCXEVENT_MOUSEUP ), helpstring( "Occurs when a mouse button is released" ) ]
+ void MouseUp( [in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY );
+ }
+
+
+ //////////////////////////////////////////////////////////////////////
+ // OCX Class
+ //////////////////////////////////////////////////////////////////////
+ [
+ uuid(6BF52A52-394A-11d3-B153-00C04F79FAA6),
+ helpstring("Windows Media Player ActiveX Control")
+ ]
+ coclass WindowsMediaPlayer
+ {
+ [default] interface IWMPPlayer4;
+ interface IWMPPlayer3;
+ interface IWMPPlayer2;
+ interface IWMPPlayer;
+ interface IWMPControls;
+ interface IWMPSettings;
+ interface IWMPPlaylist;
+ interface IWMPMedia;
+ interface IWMPMediaCollection;
+ interface IWMPPlaylistCollection;
+ interface IWMPCdromCollection;
+ interface IWMPError;
+ interface IWMPErrorItem;
+ interface IWMPErrorItem2;
+ interface IWMPClosedCaption;
+ interface IWMPDVD;
+ interface IWMPControls2;
+ interface IWMPMedia2;
+ interface IWMPMedia3;
+ interface IWMPMetadataPicture;
+ interface IWMPMetadataText;
+ interface IWMPSettings2;
+ interface IWMPControls3;
+ interface IWMPClosedCaption2;
+ [default, source] dispinterface _WMPOCXEvents;
+
+ };
+
+};
+
+//*****************************************************************************
+//
+// End of File
+//
+//*****************************************************************************
+
diff --git a/Plugins/listeningto/players/WMP/wmpids.h b/Plugins/listeningto/players/WMP/wmpids.h new file mode 100644 index 0000000..8679f92 --- /dev/null +++ b/Plugins/listeningto/players/WMP/wmpids.h @@ -0,0 +1,471 @@ +//*****************************************************************************
+//
+// Microsoft Windows Media Technologies
+// Copyright (C) Microsoft Corporation. All Rights Reserved.
+//
+// FileName: wmpids.h
+//
+// Abstract: Dispatch ID definitions for all public Windows Media
+// Player Interfaces
+//
+//*****************************************************************************
+
+
+
+//////////////////////////////////////////////////////////////////////
+// Definitions
+//////////////////////////////////////////////////////////////////////
+#define DISPID_DELTA 50
+
+
+//////////////////////////////////////////////////////////////////////
+// IWMPCore
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPCORE_BASE 0
+#define DISPID_WMPCORE_URL DISPID_WMPCORE_BASE + 1
+#define DISPID_WMPCORE_OPENSTATE DISPID_WMPCORE_BASE + 2
+#define DISPID_WMPCORE_CLOSE DISPID_WMPCORE_BASE + 3
+#define DISPID_WMPCORE_CONTROLS DISPID_WMPCORE_BASE + 4
+#define DISPID_WMPCORE_SETTINGS DISPID_WMPCORE_BASE + 5
+#define DISPID_WMPCORE_CURRENTMEDIA DISPID_WMPCORE_BASE + 6
+#define DISPID_WMPCORE_NETWORK DISPID_WMPCORE_BASE + 7
+#define DISPID_WMPCORE_MEDIACOLLECTION DISPID_WMPCORE_BASE + 8
+#define DISPID_WMPCORE_PLAYLISTCOLLECTION DISPID_WMPCORE_BASE + 9
+#define DISPID_WMPCORE_PLAYSTATE DISPID_WMPCORE_BASE + 10
+#define DISPID_WMPCORE_VERSIONINFO DISPID_WMPCORE_BASE + 11
+#define DISPID_WMPCORE_LAUNCHURL DISPID_WMPCORE_BASE + 12
+#define DISPID_WMPCORE_CURRENTPLAYLIST DISPID_WMPCORE_BASE + 13
+#define DISPID_WMPCORE_CDROMCOLLECTION DISPID_WMPCORE_BASE + 14
+#define DISPID_WMPCORE_CLOSEDCAPTION DISPID_WMPCORE_BASE + 15
+#define DISPID_WMPCORE_ISONLINE DISPID_WMPCORE_BASE + 16
+#define DISPID_WMPCORE_ERROR DISPID_WMPCORE_BASE + 17
+#define DISPID_WMPCORE_STATUS DISPID_WMPCORE_BASE + 18
+#define DISPID_WMPCORE_LAST DISPID_WMPCORE_STATUS
+
+//////////////////////////////////////////////////////////////////////
+// IPlayer
+//////////////////////////////////////////////////////////////////////
+
+#define DISPID_WMPOCX_BASE (DISPID_WMPCORE_LAST)
+#define DISPID_WMPOCX_ENABLED (DISPID_WMPOCX_BASE + 1)
+#define DISPID_WMPOCX_TRANSPARENTATSTART (DISPID_WMPOCX_BASE + 2)
+#define DISPID_WMPOCX_FULLSCREEN (DISPID_WMPOCX_BASE + 3)
+#define DISPID_WMPOCX_ENABLECONTEXTMENU (DISPID_WMPOCX_BASE + 4)
+#define DISPID_WMPOCX_UIMODE (DISPID_WMPOCX_BASE + 5)
+#define DISPID_WMPOCX_LAST DISPID_WMPOCX_UIMODE
+
+#define DISPID_WMPOCX2_BASE (DISPID_WMPOCX_LAST)
+#define DISPID_WMPOCX2_STRETCHTOFIT (DISPID_WMPOCX2_BASE + 1)
+#define DISPID_WMPOCX2_WINDOWLESSVIDEO (DISPID_WMPOCX2_BASE + 2)
+#define DISPID_WMPOCX4_ISREMOTE (DISPID_WMPOCX2_BASE + 3)
+#define DISPID_WMPOCX4_PLAYERAPPLICATION (DISPID_WMPOCX2_BASE + 4)
+#define DISPID_WMPOCX4_OPENPLAYER (DISPID_WMPOCX2_BASE + 5)
+
+
+//////////////////////////////////////////////////////////////////////
+// IWMPCore2
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPCORE2_BASE (DISPID_WMPCORE_BASE + 39)
+#define DISPID_WMPCORE2_DVD (DISPID_WMPCORE2_BASE + 1)
+#define DISPID_WMPCORE3_NEWPLAYLIST (DISPID_WMPCORE2_BASE + 2)
+#define DISPID_WMPCORE3_NEWMEDIA (DISPID_WMPCORE2_BASE + 3)
+
+//////////////////////////////////////////////////////////////////////
+// IWMPControl
+//////////////////////////////////////////////////////////////////////
+//
+// Note: These DISPIDs need to be contiguous
+//
+#define DISPID_WMPCONTROLS_BASE DISPID_WMPCORE_BASE + DISPID_DELTA
+#define DISPID_WMPCONTROLS_PLAY DISPID_WMPCONTROLS_BASE + 1
+#define DISPID_WMPCONTROLS_STOP DISPID_WMPCONTROLS_BASE + 2
+#define DISPID_WMPCONTROLS_PAUSE DISPID_WMPCONTROLS_BASE + 3
+#define DISPID_WMPCONTROLS_FASTFORWARD DISPID_WMPCONTROLS_BASE + 4
+#define DISPID_WMPCONTROLS_FASTREVERSE DISPID_WMPCONTROLS_BASE + 5
+#define DISPID_WMPCONTROLS_CURRENTPOSITION DISPID_WMPCONTROLS_BASE + 6
+#define DISPID_WMPCONTROLS_CURRENTPOSITIONSTRING DISPID_WMPCONTROLS_BASE + 7
+#define DISPID_WMPCONTROLS_NEXT DISPID_WMPCONTROLS_BASE + 8
+#define DISPID_WMPCONTROLS_PREVIOUS DISPID_WMPCONTROLS_BASE + 9
+#define DISPID_WMPCONTROLS_CURRENTITEM DISPID_WMPCONTROLS_BASE + 10
+#define DISPID_WMPCONTROLS_CURRENTMARKER DISPID_WMPCONTROLS_BASE + 11
+#define DISPID_WMPCONTROLS_ISAVAILABLE DISPID_WMPCONTROLS_BASE + 12
+#define DISPID_WMPCONTROLS_PLAYITEM DISPID_WMPCONTROLS_BASE + 13
+#define DISPID_WMPCONTROLS2_STEP DISPID_WMPCONTROLS_BASE + 14
+#define DISPID_WMPCONTROLS3_AUDIOLANGUAGECOUNT DISPID_WMPCONTROLS_BASE + 15
+#define DISPID_WMPCONTROLS3_GETAUDIOLANGUAGEID DISPID_WMPCONTROLS_BASE + 16
+#define DISPID_WMPCONTROLS3_GETAUDIOLANGUAGEDESC DISPID_WMPCONTROLS_BASE + 17
+#define DISPID_WMPCONTROLS3_CURRENTAUDIOLANGUAGE DISPID_WMPCONTROLS_BASE + 18
+#define DISPID_WMPCONTROLS3_CURRENTAUDIOLANGUAGEINDEX DISPID_WMPCONTROLS_BASE + 19
+#define DISPID_WMPCONTROLS3_GETLANGUAGENAME DISPID_WMPCONTROLS_BASE + 20
+#define DISPID_WMPCONTROLS3_CURRENTPOSITIONTIMECODE DISPID_WMPCONTROLS_BASE + 21
+#define DISPID_WMPCONTROLSFAKE_TIMECOMPRESSION DISPID_WMPCONTROLS_BASE + 22
+
+//////////////////////////////////////////////////////////////////////
+// IWMPSettings
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPSETTINGS_BASE DISPID_WMPCONTROLS_BASE + DISPID_DELTA
+#define DISPID_WMPSETTINGS_AUTOSTART DISPID_WMPSETTINGS_BASE + 1
+#define DISPID_WMPSETTINGS_BALANCE DISPID_WMPSETTINGS_BASE + 2
+#define DISPID_WMPSETTINGS_INVOKEURLS DISPID_WMPSETTINGS_BASE + 3
+#define DISPID_WMPSETTINGS_MUTE DISPID_WMPSETTINGS_BASE + 4
+#define DISPID_WMPSETTINGS_PLAYCOUNT DISPID_WMPSETTINGS_BASE + 5
+#define DISPID_WMPSETTINGS_RATE DISPID_WMPSETTINGS_BASE + 6
+#define DISPID_WMPSETTINGS_VOLUME DISPID_WMPSETTINGS_BASE + 7
+#define DISPID_WMPSETTINGS_BASEURL DISPID_WMPSETTINGS_BASE + 8
+#define DISPID_WMPSETTINGS_DEFAULTFRAME DISPID_WMPSETTINGS_BASE + 9
+#define DISPID_WMPSETTINGS_GETMODE DISPID_WMPSETTINGS_BASE + 10
+#define DISPID_WMPSETTINGS_SETMODE DISPID_WMPSETTINGS_BASE + 11
+#define DISPID_WMPSETTINGS_ENABLEERRORDIALOGS DISPID_WMPSETTINGS_BASE + 12
+#define DISPID_WMPSETTINGS_ISAVAILABLE DISPID_WMPSETTINGS_BASE + 13
+#define DISPID_WMPSETTINGS2_DEFAULTAUDIOLANGUAGE DISPID_WMPSETTINGS_BASE + 14
+#define DISPID_WMPSETTINGS2_LIBRARYACCESSRIGHTS DISPID_WMPSETTINGS_BASE + 15
+#define DISPID_WMPSETTINGS2_REQUESTLIBRARYACCESSRIGHTS DISPID_WMPSETTINGS_BASE + 16
+
+//////////////////////////////////////////////////////////////////////
+// IWMPPlayList
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPPLAYLIST_BASE DISPID_WMPSETTINGS_BASE + DISPID_DELTA + DISPID_DELTA
+#define DISPID_WMPPLAYLIST_COUNT DISPID_WMPPLAYLIST_BASE + 1
+#define DISPID_WMPPLAYLIST_NAME DISPID_WMPPLAYLIST_BASE + 2
+#define DISPID_WMPPLAYLIST_GETITEMINFO DISPID_WMPPLAYLIST_BASE + 3
+#define DISPID_WMPPLAYLIST_SETITEMINFO DISPID_WMPPLAYLIST_BASE + 4
+#define DISPID_WMPPLAYLIST_CLEAR DISPID_WMPPLAYLIST_BASE + 5
+#define DISPID_WMPPLAYLIST_INSERTITEM DISPID_WMPPLAYLIST_BASE + 6
+#define DISPID_WMPPLAYLIST_APPENDITEM DISPID_WMPPLAYLIST_BASE + 7
+#define DISPID_WMPPLAYLIST_REMOVEITEM DISPID_WMPPLAYLIST_BASE + 8
+#define DISPID_WMPPLAYLIST_MOVEITEM DISPID_WMPPLAYLIST_BASE + 9
+#define DISPID_WMPPLAYLIST_ATTRIBUTECOUNT DISPID_WMPPLAYLIST_BASE + 10
+#define DISPID_WMPPLAYLIST_ATTRIBUTENAME DISPID_WMPPLAYLIST_BASE + 11
+#define DISPID_WMPPLAYLIST_ITEM DISPID_WMPPLAYLIST_BASE + 12
+#define DISPID_WMPPLAYLIST_ISIDENTICAL DISPID_WMPPLAYLIST_BASE + 13
+
+//////////////////////////////////////////////////////////////////////
+// IWMPCdrom
+//////////////////////////////////////////////////////////////////////
+
+#define DISPID_WMPCDROM_BASE DISPID_WMPPLAYLIST_BASE + DISPID_DELTA
+#define DISPID_WMPCDROM_DRIVESPECIFIER DISPID_WMPCDROM_BASE + 1
+#define DISPID_WMPCDROM_PLAYLIST DISPID_WMPCDROM_BASE + 2
+#define DISPID_WMPCDROM_EJECT DISPID_WMPCDROM_BASE + 3
+
+//////////////////////////////////////////////////////////////////////
+// IWMPCdromCollection
+//////////////////////////////////////////////////////////////////////
+
+#define DISPID_WMPCDROMCOLLECTION_BASE DISPID_WMPCDROM_BASE + DISPID_DELTA
+#define DISPID_WMPCDROMCOLLECTION_COUNT DISPID_WMPCDROMCOLLECTION_BASE + 1
+#define DISPID_WMPCDROMCOLLECTION_ITEM DISPID_WMPCDROMCOLLECTION_BASE + 2
+#define DISPID_WMPCDROMCOLLECTION_GETBYDRIVESPECIFIER DISPID_WMPCDROMCOLLECTION_BASE + 3
+#define DISPID_WMPCDROMCOLLECTION_STARTMONITORINGCDROMS DISPID_WMPCDROMCOLLECTION_BASE + 4
+#define DISPID_WMPCDROMCOLLECTION_STOPMONITORINGCDROMS DISPID_WMPCDROMCOLLECTION_BASE + 5
+
+//////////////////////////////////////////////////////////////////////
+// IWMPStringCollection
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPSTRINGCOLLECTION_BASE (DISPID_WMPCDROMCOLLECTION_BASE + DISPID_DELTA + DISPID_DELTA)
+#define DISPID_WMPSTRINGCOLLECTION_COUNT DISPID_WMPSTRINGCOLLECTION_BASE + 1
+#define DISPID_WMPSTRINGCOLLECTION_ITEM DISPID_WMPSTRINGCOLLECTION_BASE + 2
+
+//////////////////////////////////////////////////////////////////////
+// IWMPMediaCollection
+//////////////////////////////////////////////////////////////////////
+
+#define DISPID_WMPMEDIACOLLECTION_BASE DISPID_WMPSTRINGCOLLECTION_BASE + DISPID_DELTA
+#define DISPID_WMPMEDIACOLLECTION_ADD DISPID_WMPMEDIACOLLECTION_BASE + 2
+#define DISPID_WMPMEDIACOLLECTION_GETALL DISPID_WMPMEDIACOLLECTION_BASE + 3
+#define DISPID_WMPMEDIACOLLECTION_GETBYNAME DISPID_WMPMEDIACOLLECTION_BASE + 4
+#define DISPID_WMPMEDIACOLLECTION_GETBYGENRE DISPID_WMPMEDIACOLLECTION_BASE + 5
+#define DISPID_WMPMEDIACOLLECTION_GETBYAUTHOR DISPID_WMPMEDIACOLLECTION_BASE + 6
+#define DISPID_WMPMEDIACOLLECTION_GETBYALBUM DISPID_WMPMEDIACOLLECTION_BASE + 7
+#define DISPID_WMPMEDIACOLLECTION_GETBYATTRIBUTE DISPID_WMPMEDIACOLLECTION_BASE + 8
+#define DISPID_WMPMEDIACOLLECTION_REMOVE DISPID_WMPMEDIACOLLECTION_BASE + 9
+#define DISPID_WMPMEDIACOLLECTION_GETATTRIBUTESTRINGCOLLECTION DISPID_WMPMEDIACOLLECTION_BASE + 11
+#define DISPID_WMPMEDIACOLLECTION_NEWQUERY DISPID_WMPMEDIACOLLECTION_BASE + 12
+#define DISPID_WMPMEDIACOLLECTION_STARTMONITORING DISPID_WMPMEDIACOLLECTION_BASE + 13
+#define DISPID_WMPMEDIACOLLECTION_STOPMONITORING DISPID_WMPMEDIACOLLECTION_BASE + 14
+#define DISPID_WMPMEDIACOLLECTION_STARTCONTENTSCAN DISPID_WMPMEDIACOLLECTION_BASE + 15
+#define DISPID_WMPMEDIACOLLECTION_STOPCONTENTSCAN DISPID_WMPMEDIACOLLECTION_BASE + 16
+#define DISPID_WMPMEDIACOLLECTION_STARTSEARCH DISPID_WMPMEDIACOLLECTION_BASE + 17
+#define DISPID_WMPMEDIACOLLECTION_STOPSEARCH DISPID_WMPMEDIACOLLECTION_BASE + 18
+#define DISPID_WMPMEDIACOLLECTION_UPDATEMETADATA DISPID_WMPMEDIACOLLECTION_BASE + 19
+#define DISPID_WMPMEDIACOLLECTION_GETMEDIAATOM DISPID_WMPMEDIACOLLECTION_BASE + 20
+#define DISPID_WMPMEDIACOLLECTION_SETDELETED DISPID_WMPMEDIACOLLECTION_BASE + 21
+#define DISPID_WMPMEDIACOLLECTION_ISDELETED DISPID_WMPMEDIACOLLECTION_BASE + 22
+#define DISPID_WMPMEDIACOLLECTION_GETBYQUERYDESCRIPTION DISPID_WMPMEDIACOLLECTION_BASE + 23
+#define DISPID_WMPMEDIACOLLECTION_FREEZECOLLECTIONCHANGE DISPID_WMPMEDIACOLLECTION_BASE + 24
+#define DISPID_WMPMEDIACOLLECTION_UNFREEZECOLLECTIONCHANGE DISPID_WMPMEDIACOLLECTION_BASE + 25
+#define DISPID_WMPMEDIACOLLECTION_POSTCOLLECTIONCHANGE DISPID_WMPMEDIACOLLECTION_BASE + 26
+
+//////////////////////////////////////////////////////////////////////
+// IWMPPlaylistCollection
+//////////////////////////////////////////////////////////////////////
+
+#define DISPID_WMPPLAYLISTARRAY_BASE DISPID_WMPMEDIACOLLECTION_BASE + DISPID_DELTA
+#define DISPID_WMPPLAYLISTARRAY_COUNT DISPID_WMPPLAYLISTARRAY_BASE + 1
+#define DISPID_WMPPLAYLISTARRAY_ITEM DISPID_WMPPLAYLISTARRAY_BASE + 2
+
+//////////////////////////////////////////////////////////////////////
+// IWMPPlaylistCollection
+//////////////////////////////////////////////////////////////////////
+
+#define DISPID_WMPPLAYLISTCOLLECTION_BASE DISPID_WMPPLAYLISTARRAY_BASE + DISPID_DELTA
+#define DISPID_WMPPLAYLISTCOLLECTION_NEWPLAYLIST DISPID_WMPPLAYLISTCOLLECTION_BASE + 2
+#define DISPID_WMPPLAYLISTCOLLECTION_GETALL DISPID_WMPPLAYLISTCOLLECTION_BASE + 3
+#define DISPID_WMPPLAYLISTCOLLECTION_GETBYNAME DISPID_WMPPLAYLISTCOLLECTION_BASE + 4
+#define DISPID_WMPPLAYLISTCOLLECTION_GETBYQUERYDESCRIPTION DISPID_WMPPLAYLISTCOLLECTION_BASE + 5
+#define DISPID_WMPPLAYLISTCOLLECTION_REMOVE DISPID_WMPPLAYLISTCOLLECTION_BASE + 6
+#define DISPID_WMPPLAYLISTCOLLECTION_NEWQUERY DISPID_WMPPLAYLISTCOLLECTION_BASE + 7
+#define DISPID_WMPPLAYLISTCOLLECTION_STARTMONITORING DISPID_WMPPLAYLISTCOLLECTION_BASE + 8
+#define DISPID_WMPPLAYLISTCOLLECTION_STOPMONITORING DISPID_WMPPLAYLISTCOLLECTION_BASE + 9
+#define DISPID_WMPPLAYLISTCOLLECTION_SETDELETED DISPID_WMPPLAYLISTCOLLECTION_BASE + 10
+#define DISPID_WMPPLAYLISTCOLLECTION_ISDELETED DISPID_WMPPLAYLISTCOLLECTION_BASE + 11
+#define DISPID_WMPPLAYLISTCOLLECTION_IMPORTPLAYLIST DISPID_WMPPLAYLISTCOLLECTION_BASE + 12
+
+//////////////////////////////////////////////////////////////////////
+// IWMPMedia
+//////////////////////////////////////////////////////////////////////
+
+#define DISPID_WMPMEDIA_BASE (DISPID_WMPPLAYLISTCOLLECTION_BASE + (4 * DISPID_DELTA))
+#define DISPID_WMPMEDIA_SOURCEURL DISPID_WMPMEDIA_BASE + 1
+#define DISPID_WMPMEDIA_IMAGESOURCEWIDTH DISPID_WMPMEDIA_BASE + 2
+#define DISPID_WMPMEDIA_IMAGESOURCEHEIGHT DISPID_WMPMEDIA_BASE + 3
+#define DISPID_WMPMEDIA_MARKERCOUNT DISPID_WMPMEDIA_BASE + 4
+#define DISPID_WMPMEDIA_GETMARKERTIME DISPID_WMPMEDIA_BASE + 5
+#define DISPID_WMPMEDIA_GETMARKERNAME DISPID_WMPMEDIA_BASE + 6
+#define DISPID_WMPMEDIA_DURATION DISPID_WMPMEDIA_BASE + 7
+#define DISPID_WMPMEDIA_DURATIONSTRING DISPID_WMPMEDIA_BASE + 8
+#define DISPID_WMPMEDIA_ATTRIBUTECOUNT DISPID_WMPMEDIA_BASE + 9
+#define DISPID_WMPMEDIA_GETATTRIBUTENAME DISPID_WMPMEDIA_BASE + 10
+#define DISPID_WMPMEDIA_GETITEMINFO DISPID_WMPMEDIA_BASE + 11
+#define DISPID_WMPMEDIA_SETITEMINFO DISPID_WMPMEDIA_BASE + 12
+#define DISPID_WMPMEDIA_ISIDENTICAL DISPID_WMPMEDIA_BASE + 13
+#define DISPID_WMPMEDIA_NAME DISPID_WMPMEDIA_BASE + 14
+#define DISPID_WMPMEDIA_GETITEMINFOBYATOM DISPID_WMPMEDIA_BASE + 15
+#define DISPID_WMPMEDIA_ISMEMBEROF DISPID_WMPMEDIA_BASE + 16
+#define DISPID_WMPMEDIA_ISREADONLYITEM DISPID_WMPMEDIA_BASE + 17
+#define DISPID_WMPMEDIA2_ERROR DISPID_WMPMEDIA_BASE + 18
+#define DISPID_WMPMEDIA3_GETATTRIBUTECOUNTBYTYPE DISPID_WMPMEDIA_BASE + 19
+#define DISPID_WMPMEDIA3_GETITEMINFOBYTYPE DISPID_WMPMEDIA_BASE + 20
+
+//////////////////////////////////////////////////////////////////////
+// IWMPNetwork
+//////////////////////////////////////////////////////////////////////
+
+#define DISPID_WMPNETWORK_BASE DISPID_WMPMEDIA_BASE + DISPID_DELTA
+#define DISPID_WMPNETWORK_BANDWIDTH DISPID_WMPNETWORK_BASE + 1
+#define DISPID_WMPNETWORK_RECOVEREDPACKETS DISPID_WMPNETWORK_BASE + 2
+#define DISPID_WMPNETWORK_SOURCEPROTOCOL DISPID_WMPNETWORK_BASE + 3
+#define DISPID_WMPNETWORK_RECEIVEDPACKETS DISPID_WMPNETWORK_BASE + 4
+#define DISPID_WMPNETWORK_LOSTPACKETS DISPID_WMPNETWORK_BASE + 5
+#define DISPID_WMPNETWORK_RECEPTIONQUALITY DISPID_WMPNETWORK_BASE + 6
+#define DISPID_WMPNETWORK_BUFFERINGCOUNT DISPID_WMPNETWORK_BASE + 7
+#define DISPID_WMPNETWORK_BUFFERINGPROGRESS DISPID_WMPNETWORK_BASE + 8
+#define DISPID_WMPNETWORK_BUFFERINGTIME DISPID_WMPNETWORK_BASE + 9
+#define DISPID_WMPNETWORK_FRAMERATE DISPID_WMPNETWORK_BASE + 10
+#define DISPID_WMPNETWORK_MAXBITRATE DISPID_WMPNETWORK_BASE + 11
+#define DISPID_WMPNETWORK_BITRATE DISPID_WMPNETWORK_BASE + 12
+#define DISPID_WMPNETWORK_GETPROXYSETTINGS DISPID_WMPNETWORK_BASE + 13
+#define DISPID_WMPNETWORK_SETPROXYSETTINGS DISPID_WMPNETWORK_BASE + 14
+#define DISPID_WMPNETWORK_GETPROXYNAME DISPID_WMPNETWORK_BASE + 15
+#define DISPID_WMPNETWORK_SETPROXYNAME DISPID_WMPNETWORK_BASE + 16
+#define DISPID_WMPNETWORK_GETPROXYPORT DISPID_WMPNETWORK_BASE + 17
+#define DISPID_WMPNETWORK_SETPROXYPORT DISPID_WMPNETWORK_BASE + 18
+#define DISPID_WMPNETWORK_GETPROXYEXCEPTIONLIST DISPID_WMPNETWORK_BASE + 19
+#define DISPID_WMPNETWORK_SETPROXYEXCEPTIONLIST DISPID_WMPNETWORK_BASE + 20
+#define DISPID_WMPNETWORK_GETPROXYBYPASSFORLOCAL DISPID_WMPNETWORK_BASE + 21
+#define DISPID_WMPNETWORK_SETPROXYBYPASSFORLOCAL DISPID_WMPNETWORK_BASE + 22
+#define DISPID_WMPNETWORK_MAXBANDWIDTH DISPID_WMPNETWORK_BASE + 23
+#define DISPID_WMPNETWORK_DOWNLOADPROGRESS DISPID_WMPNETWORK_BASE + 24
+#define DISPID_WMPNETWORK_ENCODEDFRAMERATE DISPID_WMPNETWORK_BASE + 25
+#define DISPID_WMPNETWORK_FRAMESSKIPPED DISPID_WMPNETWORK_BASE + 26
+
+//////////////////////////////////////////////////////////////////////
+// IWMPError
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPERROR_BASE DISPID_WMPNETWORK_BASE + DISPID_DELTA
+#define DISPID_WMPERROR_CLEARERRORQUEUE DISPID_WMPERROR_BASE + 1
+#define DISPID_WMPERROR_ERRORCOUNT DISPID_WMPERROR_BASE + 2
+#define DISPID_WMPERROR_ITEM DISPID_WMPERROR_BASE + 3
+#define DISPID_WMPERROR_WEBHELP DISPID_WMPERROR_BASE + 4
+
+//////////////////////////////////////////////////////////////////////
+// IWMPErrorItem
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPERRORITEM_BASE DISPID_WMPERROR_BASE + DISPID_DELTA
+#define DISPID_WMPERRORITEM_ERRORCODE DISPID_WMPERRORITEM_BASE + 1
+#define DISPID_WMPERRORITEM_ERRORDESCRIPTION DISPID_WMPERRORITEM_BASE + 2
+#define DISPID_WMPERRORITEM_ERRORCONTEXT DISPID_WMPERRORITEM_BASE + 3
+#define DISPID_WMPERRORITEM_REMEDY DISPID_WMPERRORITEM_BASE + 4
+#define DISPID_WMPERRORITEM_CUSTOMURL DISPID_WMPERRORITEM_BASE + 5
+#define DISPID_WMPERRORITEM2_CONDITION DISPID_WMPERRORITEM_BASE + 6
+
+/////////////////////////////////////////////////////////////////////////
+// IWMPClosedCaption
+/////////////////////////////////////////////////////////////////////////
+#define DISPID_WMPCLOSEDCAPTION_BASE DISPID_WMPERRORITEM_BASE + DISPID_DELTA
+#define DISPID_WMPCLOSEDCAPTION_SAMISTYLE DISPID_WMPCLOSEDCAPTION_BASE + 1
+#define DISPID_WMPCLOSEDCAPTION_SAMILANG DISPID_WMPCLOSEDCAPTION_BASE + 2
+#define DISPID_WMPCLOSEDCAPTION_SAMIFILENAME DISPID_WMPCLOSEDCAPTION_BASE + 3
+#define DISPID_WMPCLOSEDCAPTION_CAPTIONINGID DISPID_WMPCLOSEDCAPTION_BASE + 4
+#define DISPID_WMPCLOSEDCAPTION2_GETLANGCOUNT DISPID_WMPCLOSEDCAPTION_BASE + 5
+#define DISPID_WMPCLOSEDCAPTION2_GETLANGNAME DISPID_WMPCLOSEDCAPTION_BASE + 6
+#define DISPID_WMPCLOSEDCAPTION2_GETLANGID DISPID_WMPCLOSEDCAPTION_BASE + 7
+#define DISPID_WMPCLOSEDCAPTION2_GETSTYLECOUNT DISPID_WMPCLOSEDCAPTION_BASE + 8
+#define DISPID_WMPCLOSEDCAPTION2_GETSTYLENAME DISPID_WMPCLOSEDCAPTION_BASE + 9
+
+/////////////////////////////////////////////////////////////////////////
+// IWMPDVD
+/////////////////////////////////////////////////////////////////////////
+#define DISPID_WMPDVD_BASE DISPID_WMPCLOSEDCAPTION_BASE + DISPID_DELTA
+#define DISPID_WMPDVD_ISAVAILABLE DISPID_WMPDVD_BASE + 1
+#define DISPID_WMPDVD_DOMAIN DISPID_WMPDVD_BASE + 2
+#define DISPID_WMPDVD_TOPMENU DISPID_WMPDVD_BASE + 3
+#define DISPID_WMPDVD_TITLEMENU DISPID_WMPDVD_BASE + 4
+#define DISPID_WMPDVD_BACK DISPID_WMPDVD_BASE + 5
+#define DISPID_WMPDVD_RESUME DISPID_WMPDVD_BASE + 6
+
+//////////////////////////////////////////////////////////////////////
+// IWMPMetadata* interfaces
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPMETADATA_BASE DISPID_WMPDVD_BASE + DISPID_DELTA
+#define DISPID_WMPMETADATA_PICTURE_MIMETYPE DISPID_WMPMETADATA_BASE + 1
+#define DISPID_WMPMETADATA_PICTURE_PICTURETYPE DISPID_WMPMETADATA_BASE + 2
+#define DISPID_WMPMETADATA_PICTURE_DESCRIPTION DISPID_WMPMETADATA_BASE + 3
+#define DISPID_WMPMETADATA_PICTURE_URL DISPID_WMPMETADATA_BASE + 4
+#define DISPID_WMPMETADATA_TEXT_TEXT DISPID_WMPMETADATA_BASE + 5
+#define DISPID_WMPMETADATA_TEXT_DESCRIPTION DISPID_WMPMETADATA_BASE + 6
+
+//////////////////////////////////////////////////////////////////////
+// IWMPPlayerApplication
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPPLAYERAPP_BASE DISPID_WMPMETADATA_BASE + DISPID_DELTA
+#define DISPID_WMPPLAYERAPP_SWITCHTOPLAYERAPPLICATION DISPID_WMPPLAYERAPP_BASE + 1
+#define DISPID_WMPPLAYERAPP_SWITCHTOCONTROL DISPID_WMPPLAYERAPP_BASE + 2
+#define DISPID_WMPPLAYERAPP_PLAYERDOCKED DISPID_WMPPLAYERAPP_BASE + 3
+#define DISPID_WMPPLAYERAPP_HASDISPLAY DISPID_WMPPLAYERAPP_BASE + 4
+
+//////////////////////////////////////////////////////////////////////
+// IWMPDownloadManager
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPDOWNLOADMANAGER_BASE DISPID_WMPPLAYERAPP_BASE + DISPID_DELTA
+#define DISPID_WMPDOWNLOADMANAGER_GETDOWNLOADCOLLECTION DISPID_WMPDOWNLOADMANAGER_BASE + 1
+#define DISPID_WMPDOWNLOADMANAGER_CREATEDOWNLOADCOLLECTION DISPID_WMPDOWNLOADMANAGER_BASE + 2
+
+//////////////////////////////////////////////////////////////////////
+// IWMPDownloadCollection
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPDOWNLOADCOLLECTION_BASE DISPID_WMPDOWNLOADMANAGER_BASE + DISPID_DELTA
+#define DISPID_WMPDOWNLOADCOLLECTION_ID DISPID_WMPDOWNLOADCOLLECTION_BASE + 1
+#define DISPID_WMPDOWNLOADCOLLECTION_COUNT DISPID_WMPDOWNLOADCOLLECTION_BASE + 2
+#define DISPID_WMPDOWNLOADCOLLECTION_ITEM DISPID_WMPDOWNLOADCOLLECTION_BASE + 3
+#define DISPID_WMPDOWNLOADCOLLECTION_STARTDOWNLOAD DISPID_WMPDOWNLOADCOLLECTION_BASE + 4
+#define DISPID_WMPDOWNLOADCOLLECTION_REMOVEITEM DISPID_WMPDOWNLOADCOLLECTION_BASE + 5
+#define DISPID_WMPDOWNLOADCOLLECTION_CLEAR DISPID_WMPDOWNLOADCOLLECTION_BASE + 6
+
+//////////////////////////////////////////////////////////////////////
+// IWMPDownloadItem
+//////////////////////////////////////////////////////////////////////
+#define DISPID_WMPDOWNLOADITEM_BASE DISPID_WMPDOWNLOADCOLLECTION_BASE + DISPID_DELTA
+#define DISPID_WMPDOWNLOADITEM_SOURCEURL DISPID_WMPDOWNLOADITEM_BASE + 1
+#define DISPID_WMPDOWNLOADITEM_SIZE DISPID_WMPDOWNLOADITEM_BASE + 2
+#define DISPID_WMPDOWNLOADITEM_TYPE DISPID_WMPDOWNLOADITEM_BASE + 3
+#define DISPID_WMPDOWNLOADITEM_PROGRESS DISPID_WMPDOWNLOADITEM_BASE + 4
+#define DISPID_WMPDOWNLOADITEM_DOWNLOADSTATE DISPID_WMPDOWNLOADITEM_BASE + 5
+#define DISPID_WMPDOWNLOADITEM_PAUSE DISPID_WMPDOWNLOADITEM_BASE + 6
+#define DISPID_WMPDOWNLOADITEM_RESUME DISPID_WMPDOWNLOADITEM_BASE + 7
+#define DISPID_WMPDOWNLOADITEM_CANCEL DISPID_WMPDOWNLOADITEM_BASE + 8
+
+/////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////
+#define DISPID_WMPCORE_MIN 1
+#define DISPID_WMPCORE_MAX DISPID_WMPDOWNLOADITEM_CANCEL
+
+
+//////////////////////////////////////////////////////////////////////
+// DIID_WMPCoreEvents
+//////////////////////////////////////////////////////////////////////
+#define WMPCOREEVENT_BASE 5000
+#define DISPID_WMPCOREEVENT_OPENSTATECHANGE (WMPCOREEVENT_BASE + 1)
+#define DISPID_WMPCOREEVENT_STATUSCHANGE (WMPCOREEVENT_BASE + 2)
+
+
+#define WMPCOREEVENT_CONTROL_BASE 5100
+#define DISPID_WMPCOREEVENT_PLAYSTATECHANGE (WMPCOREEVENT_CONTROL_BASE + 1)
+#define DISPID_WMPCOREEVENT_AUDIOLANGUAGECHANGE (WMPCOREEVENT_CONTROL_BASE + 2)
+
+#define WMPCOREEVENT_SEEK_BASE 5200
+#define DISPID_WMPCOREEVENT_ENDOFSTREAM (WMPCOREEVENT_SEEK_BASE + 1)
+#define DISPID_WMPCOREEVENT_POSITIONCHANGE (WMPCOREEVENT_SEEK_BASE + 2)
+#define DISPID_WMPCOREEVENT_MARKERHIT (WMPCOREEVENT_SEEK_BASE + 3)
+#define DISPID_WMPCOREEVENT_DURATIONUNITCHANGE (WMPCOREEVENT_SEEK_BASE + 4)
+
+#define WMPCOREEVENT_CONTENT_BASE 5300
+#define DISPID_WMPCOREEVENT_SCRIPTCOMMAND (WMPCOREEVENT_CONTENT_BASE + 1)
+
+#define WMPCOREEVENT_NETWORK_BASE 5400
+#define DISPID_WMPCOREEVENT_DISCONNECT (WMPCOREEVENT_NETWORK_BASE + 1)
+#define DISPID_WMPCOREEVENT_BUFFERING (WMPCOREEVENT_NETWORK_BASE + 2)
+#define DISPID_WMPCOREEVENT_NEWSTREAM (WMPCOREEVENT_NETWORK_BASE + 3)
+
+#define WMPCOREEVENT_ERROR_BASE 5500
+#define DISPID_WMPCOREEVENT_ERROR (WMPCOREEVENT_ERROR_BASE + 1)
+
+#define WMPCOREEVENT_WARNING_BASE 5600
+#define DISPID_WMPCOREEVENT_WARNING (WMPCOREEVENT_WARNING_BASE + 1)
+
+#define WMPCOREEVENT_CDROM_BASE 5700
+#define DISPID_WMPCOREEVENT_CDROMMEDIACHANGE (WMPCOREEVENT_CDROM_BASE + 1)
+
+#define WMPCOREEVENT_PLAYLIST_BASE 5800
+#define DISPID_WMPCOREEVENT_PLAYLISTCHANGE (WMPCOREEVENT_PLAYLIST_BASE + 1)
+#define DISPID_WMPCOREEVENT_MEDIACHANGE (WMPCOREEVENT_PLAYLIST_BASE + 2)
+#define DISPID_WMPCOREEVENT_CURRENTMEDIAITEMAVAILABLE (WMPCOREEVENT_PLAYLIST_BASE + 3)
+#define DISPID_WMPCOREEVENT_CURRENTPLAYLISTCHANGE (WMPCOREEVENT_PLAYLIST_BASE + 4)
+#define DISPID_WMPCOREEVENT_CURRENTPLAYLISTITEMAVAILABLE (WMPCOREEVENT_PLAYLIST_BASE + 5)
+#define DISPID_WMPCOREEVENT_CURRENTITEMCHANGE (WMPCOREEVENT_PLAYLIST_BASE + 6)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONCHANGE (WMPCOREEVENT_PLAYLIST_BASE + 7)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGADDED (WMPCOREEVENT_PLAYLIST_BASE + 8)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGREMOVED (WMPCOREEVENT_PLAYLIST_BASE + 9)
+#define DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONCHANGE (WMPCOREEVENT_PLAYLIST_BASE + 10)
+#define DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTADDED (WMPCOREEVENT_PLAYLIST_BASE + 11)
+#define DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTREMOVED (WMPCOREEVENT_PLAYLIST_BASE + 12)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONCONTENTSCANADDEDITEM (WMPCOREEVENT_PLAYLIST_BASE + 13)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONCONTENTSCANPROGRESS (WMPCOREEVENT_PLAYLIST_BASE + 14)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONSEARCHFOUNDITEM (WMPCOREEVENT_PLAYLIST_BASE + 15)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONSEARCHPROGRESS (WMPCOREEVENT_PLAYLIST_BASE + 16)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONSEARCHCOMPLETE (WMPCOREEVENT_PLAYLIST_BASE + 17)
+#define DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTSETASDELETED (WMPCOREEVENT_PLAYLIST_BASE + 18)
+#define DISPID_WMPCOREEVENT_MODECHANGE (WMPCOREEVENT_PLAYLIST_BASE + 19)
+#define DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGCHANGED (WMPCOREEVENT_PLAYLIST_BASE + 20)
+#define DISPID_WMPCOREEVENT_MEDIAERROR (WMPCOREEVENT_PLAYLIST_BASE + 21)
+#define DISPID_WMPCOREEVENT_DOMAINCHANGE (WMPCOREEVENT_PLAYLIST_BASE + 22)
+#define DISPID_WMPCOREEVENT_OPENPLAYLISTSWITCH (WMPCOREEVENT_PLAYLIST_BASE + 23)
+
+
+
+//////////////////////////////////////////////////////////////////////
+// DIID_WMPOCXEvents
+//
+// These are the events that will be fired from OCX itself
+//////////////////////////////////////////////////////////////////////
+#define WMPOCXEVENT_BASE 6500
+#define DISPID_WMPOCXEVENT_SWITCHEDTOPLAYERAPPLICATION (WMPOCXEVENT_BASE + 1)
+#define DISPID_WMPOCXEVENT_SWITCHEDTOCONTROL (WMPOCXEVENT_BASE + 2)
+#define DISPID_WMPOCXEVENT_PLAYERDOCKEDSTATECHANGE (WMPOCXEVENT_BASE + 3)
+#define DISPID_WMPOCXEVENT_PLAYERRECONNECT (WMPOCXEVENT_BASE + 4)
+#define DISPID_WMPOCXEVENT_CLICK (WMPOCXEVENT_BASE + 5)
+#define DISPID_WMPOCXEVENT_DOUBLECLICK (WMPOCXEVENT_BASE + 6)
+#define DISPID_WMPOCXEVENT_KEYDOWN (WMPOCXEVENT_BASE + 7)
+#define DISPID_WMPOCXEVENT_KEYPRESS (WMPOCXEVENT_BASE + 8)
+#define DISPID_WMPOCXEVENT_KEYUP (WMPOCXEVENT_BASE + 9)
+#define DISPID_WMPOCXEVENT_MOUSEDOWN (WMPOCXEVENT_BASE + 10)
+#define DISPID_WMPOCXEVENT_MOUSEMOVE (WMPOCXEVENT_BASE + 11)
+#define DISPID_WMPOCXEVENT_MOUSEUP (WMPOCXEVENT_BASE + 12)
+
+
+
+//*****************************************************************************
+//
+// End of File
+//
+//*****************************************************************************
diff --git a/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.h b/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.h new file mode 100644 index 0000000..3269e9e --- /dev/null +++ b/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.h @@ -0,0 +1,493 @@ +
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 6.00.0366 */
+/* at Mon Jul 31 12:23:07 2006
+ */
+/* Compiler settings for .\COMServer2Helper.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run)
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING( )
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __COMServer2Helper_h__
+#define __COMServer2Helper_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IClientHelper07_FWD_DEFINED__
+#define __IClientHelper07_FWD_DEFINED__
+typedef interface IClientHelper07 IClientHelper07;
+#endif /* __IClientHelper07_FWD_DEFINED__ */
+
+
+#ifndef __IServerHelper07_FWD_DEFINED__
+#define __IServerHelper07_FWD_DEFINED__
+typedef interface IServerHelper07 IServerHelper07;
+#endif /* __IServerHelper07_FWD_DEFINED__ */
+
+
+#ifndef ___IClientHelperEvents07_FWD_DEFINED__
+#define ___IClientHelperEvents07_FWD_DEFINED__
+typedef interface _IClientHelperEvents07 _IClientHelperEvents07;
+#endif /* ___IClientHelperEvents07_FWD_DEFINED__ */
+
+
+#ifndef __ApplicationHelper07_FWD_DEFINED__
+#define __ApplicationHelper07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class ApplicationHelper07 ApplicationHelper07;
+#else
+typedef struct ApplicationHelper07 ApplicationHelper07;
+#endif /* __cplusplus */
+
+#endif /* __ApplicationHelper07_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+void * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void * );
+
+#ifndef __IClientHelper07_INTERFACE_DEFINED__
+#define __IClientHelper07_INTERFACE_DEFINED__
+
+/* interface IClientHelper07 */
+/* [unique][helpstring][uuid][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IClientHelper07;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("D63D265A-88DB-4D95-8B1C-797B871CD6D1")
+ IClientHelper07 : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Running(
+ /* [retval][out] */ VARIANT_BOOL *pVal) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Server(
+ /* [retval][out] */ IDispatch **pVal) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IClientHelper07Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IClientHelper07 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IClientHelper07 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IClientHelper07 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IClientHelper07 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IClientHelper07 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IClientHelper07 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IClientHelper07 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Running )(
+ IClientHelper07 * This,
+ /* [retval][out] */ VARIANT_BOOL *pVal);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Server )(
+ IClientHelper07 * This,
+ /* [retval][out] */ IDispatch **pVal);
+
+ END_INTERFACE
+ } IClientHelper07Vtbl;
+
+ interface IClientHelper07
+ {
+ CONST_VTBL struct IClientHelper07Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IClientHelper07_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IClientHelper07_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IClientHelper07_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IClientHelper07_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IClientHelper07_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IClientHelper07_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IClientHelper07_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IClientHelper07_get_Running(This,pVal) \
+ (This)->lpVtbl -> get_Running(This,pVal)
+
+#define IClientHelper07_get_Server(This,pVal) \
+ (This)->lpVtbl -> get_Server(This,pVal)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IClientHelper07_get_Running_Proxy(
+ IClientHelper07 * This,
+ /* [retval][out] */ VARIANT_BOOL *pVal);
+
+
+void __RPC_STUB IClientHelper07_get_Running_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IClientHelper07_get_Server_Proxy(
+ IClientHelper07 * This,
+ /* [retval][out] */ IDispatch **pVal);
+
+
+void __RPC_STUB IClientHelper07_get_Server_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IClientHelper07_INTERFACE_DEFINED__ */
+
+
+#ifndef __IServerHelper07_INTERFACE_DEFINED__
+#define __IServerHelper07_INTERFACE_DEFINED__
+
+/* interface IServerHelper07 */
+/* [unique][helpstring][uuid][hidden][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IServerHelper07;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("623D88DD-8B7E-4ce7-A54A-C5FBD8A7031F")
+ IServerHelper07 : public IUnknown
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RegisterServerObject(
+ /* [in] */ IUnknown *pObj,
+ /* [retval][out] */ DWORD *pdwCookie) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE RevokeServerObject(
+ /* [in] */ DWORD dwCookie) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IServerHelper07Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IServerHelper07 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IServerHelper07 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IServerHelper07 * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RegisterServerObject )(
+ IServerHelper07 * This,
+ /* [in] */ IUnknown *pObj,
+ /* [retval][out] */ DWORD *pdwCookie);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *RevokeServerObject )(
+ IServerHelper07 * This,
+ /* [in] */ DWORD dwCookie);
+
+ END_INTERFACE
+ } IServerHelper07Vtbl;
+
+ interface IServerHelper07
+ {
+ CONST_VTBL struct IServerHelper07Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IServerHelper07_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IServerHelper07_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IServerHelper07_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IServerHelper07_RegisterServerObject(This,pObj,pdwCookie) \
+ (This)->lpVtbl -> RegisterServerObject(This,pObj,pdwCookie)
+
+#define IServerHelper07_RevokeServerObject(This,dwCookie) \
+ (This)->lpVtbl -> RevokeServerObject(This,dwCookie)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IServerHelper07_RegisterServerObject_Proxy(
+ IServerHelper07 * This,
+ /* [in] */ IUnknown *pObj,
+ /* [retval][out] */ DWORD *pdwCookie);
+
+
+void __RPC_STUB IServerHelper07_RegisterServerObject_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IServerHelper07_RevokeServerObject_Proxy(
+ IServerHelper07 * This,
+ /* [in] */ DWORD dwCookie);
+
+
+void __RPC_STUB IServerHelper07_RevokeServerObject_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IServerHelper07_INTERFACE_DEFINED__ */
+
+
+
+#ifndef __Foobar2000Helper_LIBRARY_DEFINED__
+#define __Foobar2000Helper_LIBRARY_DEFINED__
+
+/* library Foobar2000Helper */
+/* [helpstring][uuid][version] */
+
+
+EXTERN_C const IID LIBID_Foobar2000Helper;
+
+#ifndef ___IClientHelperEvents07_DISPINTERFACE_DEFINED__
+#define ___IClientHelperEvents07_DISPINTERFACE_DEFINED__
+
+/* dispinterface _IClientHelperEvents07 */
+/* [helpstring][uuid][hidden] */
+
+
+EXTERN_C const IID DIID__IClientHelperEvents07;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("112498DE-9039-4138-91E9-4B9386309966")
+ _IClientHelperEvents07 : public IDispatch
+ {
+ };
+
+#else /* C style interface */
+
+ typedef struct _IClientHelperEvents07Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ _IClientHelperEvents07 * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ _IClientHelperEvents07 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ _IClientHelperEvents07 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ _IClientHelperEvents07 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ _IClientHelperEvents07 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ _IClientHelperEvents07 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ _IClientHelperEvents07 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ END_INTERFACE
+ } _IClientHelperEvents07Vtbl;
+
+ interface _IClientHelperEvents07
+ {
+ CONST_VTBL struct _IClientHelperEvents07Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define _IClientHelperEvents07_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define _IClientHelperEvents07_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define _IClientHelperEvents07_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define _IClientHelperEvents07_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define _IClientHelperEvents07_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define _IClientHelperEvents07_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define _IClientHelperEvents07_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+#endif /* ___IClientHelperEvents07_DISPINTERFACE_DEFINED__ */
+
+
+EXTERN_C const CLSID CLSID_ApplicationHelper07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("23D75BD0-096D-49F7-83F8-EE21ACFC6A11")
+ApplicationHelper07;
+#endif
+#endif /* __Foobar2000Helper_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.idl b/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.idl new file mode 100644 index 0000000..2ee2f24 --- /dev/null +++ b/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.idl @@ -0,0 +1,63 @@ +import "oaidl.idl";
+import "ocidl.idl";
+
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ uuid(D63D265A-88DB-4D95-8B1C-797B871CD6D1),
+ helpstring("IClientHelper Interface"),
+ pointer_default(unique)
+]
+interface IClientHelper07 : IDispatch
+{
+ [propget,id(1),helpstring("property Running")] HRESULT Running([out,retval] VARIANT_BOOL *pVal);
+ [propget,id(2),helpstring("property Application")] HRESULT Server([out,retval] IDispatch **pVal );
+};
+
+[
+ object,
+ oleautomation,
+ hidden,
+ uuid(623D88DD-8B7E-4ce7-A54A-C5FBD8A7031F),
+ helpstring("IServerHelper07 Interface"),
+ pointer_default(unique)
+]
+interface IServerHelper07 : IUnknown
+{
+ [id(1),helpstring("method RegisterServerObject")] HRESULT RegisterServerObject([in] IUnknown *pObj, [out,retval] DWORD *pdwCookie);
+ [id(2),helpstring("method RevokeServerObject")] HRESULT RevokeServerObject([in] DWORD dwCookie);
+};
+
+[ version(1.0), uuid(332869AA-4769-46C5-BE50-88866927A23D), helpstring("Foobar2000 v0.9 Helper Type Library") ]
+library Foobar2000Helper
+{
+ importlib("stdole2.tlb");
+
+ [
+ hidden,
+ uuid(112498DE-9039-4138-91E9-4B9386309966),
+ helpstring("_IClientHelper Event Interface")
+ ]
+ dispinterface _IClientHelperEvents07
+ {
+ properties:
+
+ methods:
+ [id(1),helpstring("method ServerStateChanged")] HRESULT ServerStateChanged([in] VARIANT_BOOL bRunning);
+ };
+
+ [
+ uuid(23D75BD0-096D-49F7-83F8-EE21ACFC6A11),
+ helpstring("ApplicationHelper Class")
+ ]
+ coclass ApplicationHelper07
+ {
+ [default] interface IClientHelper07;
+ [default, source] interface _IClientHelperEvents07;
+ interface IServerHelper07;
+ };
+
+}
+
diff --git a/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.tlb b/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.tlb Binary files differnew file mode 100644 index 0000000..2c87a27 --- /dev/null +++ b/Plugins/listeningto/players/foo_comserver2/COMServer2Helper.tlb diff --git a/Plugins/listeningto/players/foo_comserver2/COMServer2Helper_i.c b/Plugins/listeningto/players/foo_comserver2/COMServer2Helper_i.c new file mode 100644 index 0000000..20b722c --- /dev/null +++ b/Plugins/listeningto/players/foo_comserver2/COMServer2Helper_i.c @@ -0,0 +1,91 @@ +
+
+/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+ /* File created by MIDL compiler version 6.00.0366 */
+/* at Mon Jul 31 12:23:07 2006
+ */
+/* Compiler settings for .\COMServer2Helper.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run)
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING( )
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else // !_MIDL_USE_GUIDDEF_
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+ unsigned long x;
+ unsigned short s1;
+ unsigned short s2;
+ unsigned char c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif !_MIDL_USE_GUIDDEF_
+
+MIDL_DEFINE_GUID(IID, IID_IClientHelper07,0xD63D265A,0x88DB,0x4D95,0x8B,0x1C,0x79,0x7B,0x87,0x1C,0xD6,0xD1);
+
+
+MIDL_DEFINE_GUID(IID, IID_IServerHelper07,0x623D88DD,0x8B7E,0x4ce7,0xA5,0x4A,0xC5,0xFB,0xD8,0xA7,0x03,0x1F);
+
+
+MIDL_DEFINE_GUID(IID, LIBID_Foobar2000Helper,0x332869AA,0x4769,0x46C5,0xBE,0x50,0x88,0x86,0x69,0x27,0xA2,0x3D);
+
+
+MIDL_DEFINE_GUID(IID, DIID__IClientHelperEvents07,0x112498DE,0x9039,0x4138,0x91,0xE9,0x4B,0x93,0x86,0x30,0x99,0x66);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_ApplicationHelper07,0x23D75BD0,0x096D,0x49F7,0x83,0xF8,0xEE,0x21,0xAC,0xFC,0x6A,0x11);
+
+#undef MIDL_DEFINE_GUID
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
diff --git a/Plugins/listeningto/players/foo_comserver2/foo_comserver2.tlb b/Plugins/listeningto/players/foo_comserver2/foo_comserver2.tlb Binary files differnew file mode 100644 index 0000000..4ca1b56 --- /dev/null +++ b/Plugins/listeningto/players/foo_comserver2/foo_comserver2.tlb diff --git a/Plugins/listeningto/players/foo_comserver2/foobar2000.idl b/Plugins/listeningto/players/foo_comserver2/foobar2000.idl new file mode 100644 index 0000000..f1cc998 --- /dev/null +++ b/Plugins/listeningto/players/foo_comserver2/foobar2000.idl @@ -0,0 +1,922 @@ +import "oaidl.idl";
+import "ocidl.idl";
+
+/**
+ * Foobar2000 v0.9 Type Library.
+ */
+[
+uuid(cb8f14d8-736e-4bb7-adcf-be26c39b576b),
+helpstring("Foobar2000 v0.9 Type Library"),
+version(1.0)
+]
+library Foobar2000
+{
+/////////////////////////////////////////
+// Forward declarations for interfaces compatible with Visual Basic 6 and scripting clients
+interface IVBApplication;
+interface IVBMediaLibrary;
+interface IVBPlayback;
+interface IVBPlaybackOrders;
+interface IVBPlaybackSettings;
+interface IVBPlaylist;
+interface IVBPlaylists;
+interface IVBReplaygainSettings;
+interface IVBTrack;
+interface IVBTracks;
+dispinterface _IVBPlaybackEvents;
+dispinterface _IVBPlaybackSettingsEvents;
+dispinterface _IVBPlaylistEvents;
+dispinterface _IVBPlaylistsEvents;
+
+/////////////////////////////////////////
+// Forward declarations for interfaces compatible with C/C++
+interface IApplication;
+interface IMediaLibrary;
+interface IPlayback;
+interface IPlaybackOrders;
+interface IPlaybackSettings;
+interface IPlaylist;
+interface IPlaylists;
+interface IReplaygainSettings;
+interface ITrack;
+interface ITrackContainer;
+interface ITracks;
+dispinterface _IPlaybackEvents;
+dispinterface _IPlaybackSettingsEvents;
+dispinterface _IPlaylistEvents;
+dispinterface _IPlaylistsEvents;
+
+/////////////////////////////////////////
+// Declarations for common enumerations
+
+/**
+ * Display level codes. Controls level of playback related information that is visible.
+ */
+[
+ helpstring("fbDisplayLevel Enumeration")
+]
+enum fbDisplayLevel
+{
+ /** No playback-related info */
+ fbDisplayLevelNone = 0,
+ /** Static info and is_playing/is_paused stats */
+ fbDisplayLevelBasic = 1,
+ /** Like fbDisplayLevelBasic plus dynamic track titles on e.g. live streams */
+ fbDisplayLevelTitles = 2,
+ /** Like fbDisplayLevelTitles plus timing and VBR bitrate display etc */
+ fbDisplayLevelAll = 3,
+};
+
+/**
+ * Codes for reasons why playback stopped.
+ */
+[
+ helpstring("fbStopReason Enumeration")
+]
+enum fbStopReason
+{
+ /** Playback stopped by user. */
+ fbStopReasonUser,
+ /** Playback stopped at end of file. */
+ fbStopReasonEOF,
+ /** Playback stopped before starting to another track. */
+ fbStopReasonStartingAnother
+};
+
+/**
+ * Codes for determining the position of items in a list.
+ */
+[
+ helpstring("fbPosition Enumeration")
+]
+enum fbPosition
+{
+ /** Position is last in list. */
+ fbPositionFirst,
+ /** Position is first in list. */
+ fbPositionLast,
+ /** Position is directly before another list item. */
+ fbPositionBefore,
+ /** Position is directly after another list item. */
+ fbPositionAfter
+};
+
+/**
+ * Replaygain source modes.
+ */
+[
+ helpstring("fbReplaygainMode Enumeration")
+]
+enum fbReplaygainMode
+{
+ fbReplaygainModeNone = 0,
+ fbReplaygainModeTrack = 1,
+ fbReplaygainModeAlbum = 2
+};
+
+/////////////////////////////////////////
+// Declarations for interfaces compatible with Visual Basic 6 and scripting clients
+
+/**
+ * IVBTracks Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("ITrackList Interface"),
+ uuid("0d5d4f8f-4132-48cb-9d6c-126843f78909")
+]
+interface IVBTracks : IDispatch
+{
+ [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum"), hidden, restricted] HRESULT _NewEnum([out, retval] IUnknown** oEnum);
+ [propget, id(DISPID_VALUE), helpstring("property Item")] HRESULT Item([in] LONG lIndex, [out,retval] IVBTrack** oTrack);
+ [propget, id(1), helpstring("property Count")] HRESULT Count([out, retval] LONG* pVal);
+ [id(101), helpstring("method GetTracks")] HRESULT GetTracks([in, optional] VARIANT strQuery, [out, retval] IVBTracks ** oTracks);
+ [id(102), helpstring("method GetSortedTracks")] HRESULT GetSortedTracks([in] BSTR strSortFormat, [in, optional] VARIANT strQuery, [out, retval] IVBTracks ** oTracks);
+};
+
+/**
+ * IVBTrack Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IVBTrack Interface"),
+ uuid("6d590032-ba42-41ca-866c-321e2b511a62")
+]
+interface IVBTrack : IDispatch
+{
+ [propget, id(1), helpstring("property Path")]
+ HRESULT Path([out, retval] BSTR* strPath);
+
+ [propget, id(2), helpstring("property Index")]
+ HRESULT Index([out, retval] LONG* lIndex);
+
+ [id(3), helpstring("method FormatTitle")]
+ HRESULT FormatTitle([in] BSTR strFormat, [out, retval] BSTR* strText);
+};
+
+/**
+ * IVBPlaybackOrders Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IVBPlaybackOrders Interface"),
+ uuid("a94be3f4-ea45-4d4c-af02-7c7a398c224e")
+]
+interface IVBPlaybackOrders : IDispatch
+{
+ [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum"), hidden, restricted]
+ HRESULT _NewEnum([out, retval] IUnknown** oEnum);
+
+ [propget, id(DISPID_VALUE), helpstring("property Item")]
+ HRESULT Item([in] LONG lIndex, [out,retval] BSTR* strName);
+
+ [propget, id(1), helpstring("property Count")]
+ HRESULT Count([out, retval] LONG* lCount);
+
+ [id(2), helpstring("method GuidFromName")]
+ HRESULT GuidFromName([in] BSTR strName, [out, retval] BSTR* strGuid);
+
+ [id(3), helpstring("method NameFromGuid")]
+ HRESULT NameFromGuid([in] BSTR strGuid, [out, retval] BSTR* strName);
+};
+
+/**
+ * IVBPlaybackSettings Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IVBPlaybackSettings Interface"),
+ uuid("d25cec8d-2d0d-42e6-9a9f-0eee52d6f0c5")
+]
+interface IVBPlaybackSettings : IDispatch
+{
+ [propget, id(1), helpstring("property Volume")]
+ HRESULT Volume([out, retval] DOUBLE* dGainInDecibel);
+
+ [propput, id(1), helpstring("property Volume")]
+ HRESULT Volume([in] DOUBLE dGainInDecibel);
+
+ [propget, id(2), helpstring("property PlaybackFollowsCursor")]
+ HRESULT PlaybackFollowsCursor([out, retval] VARIANT_BOOL* bState);
+
+ [propput, id(2), helpstring("property PlaybackFollowsCursor")]
+ HRESULT PlaybackFollowsCursor([in] VARIANT_BOOL bState);
+
+ [propget, id(3), helpstring("property CursorFollowsPlayback")]
+ HRESULT CursorFollowsPlayback([out, retval] VARIANT_BOOL* bState);
+
+ [propput, id(3), helpstring("property CursorFollowsPlayback")]
+ HRESULT CursorFollowsPlayback([in] VARIANT_BOOL bState);
+
+ [propget, id(4), helpstring("property StopAfterCurrent")]
+ HRESULT StopAfterCurrent([out, retval] VARIANT_BOOL* bState);
+
+ [propput, id(4), helpstring("property StopAfterCurrent")]
+ HRESULT StopAfterCurrent([in] VARIANT_BOOL bState);
+
+ [propget, id(5), helpstring("property ActivePlaybackOrder")]
+ HRESULT ActivePlaybackOrder([out, retval] BSTR* bState);
+
+ [propput, id(5), helpstring("property ActivePlaybackOrder")]
+ HRESULT ActivePlaybackOrder([in] BSTR strName);
+
+ [propget, id(6), helpstring("property PlaybackOrders")]
+ HRESULT PlaybackOrders([out, retval] IVBPlaybackOrders ** oOrders);
+};
+
+/**
+ * _IVBPlaybackSettingsEvents Interface.
+ */
+[
+ hidden,
+ helpstring("_IVBPlaybackSettingsEvents Interface"),
+ uuid("831ae6d1-6ebf-488d-9274-a5523cbb29b7")
+]
+dispinterface _IVBPlaybackSettingsEvents
+{
+properties:
+methods:
+ [id(1), helpstring("method VolumeChange")]
+ HRESULT VolumeChanged([in] DOUBLE dNewGainInDecibel);
+
+ [id(2), helpstring("method PlaybackOrderChange")]
+ HRESULT PlaybackOrderChanged([in] BSTR strNewName);
+
+ [id(3), helpstring("method PlaybackFollowsCursorChanged")]
+ HRESULT PlaybackFollowsCursorChanged([in] VARIANT_BOOL bNewState);
+
+ [id(4), helpstring("method CursorFollowsPlaybackChanged")]
+ HRESULT CursorFollowsPlaybackChanged([in] VARIANT_BOOL bNewState);
+
+ [id(5), helpstring("method StopAfterCurrentChanged")]
+ HRESULT StopAfterCurrentChanged([in] VARIANT_BOOL bNewState);
+
+ [id(6), helpstring("method ActivePlaybackOrderChanged")]
+ HRESULT ActivePlaybackOrderChanged([in] BSTR strNewName);
+};
+
+/**
+ * IVBReplaygainSettings Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IVBReplaygainSettings Interface"),
+ uuid("6f873be6-ae3b-4c2f-828c-d5253a99805c")
+]
+interface IVBReplaygainSettings : IDispatch
+{
+ [propget, id(1), helpstring("property Mode")]
+ HRESULT Mode([out, retval] enum fbReplaygainMode* lReplaygainMode);
+
+ [propput, id(1), helpstring("property Mode")]
+ HRESULT Mode([in] enum fbReplaygainMode lReplaygainMode);
+
+ [propget, id(2), helpstring("property ApplyGain")]
+ HRESULT ApplyGain([out, retval] VARIANT_BOOL* bFlag);
+
+ [propput, id(2), helpstring("property ApplyGain")]
+ HRESULT ApplyGain([in] VARIANT_BOOL bFlag);
+
+ [propget, id(3), helpstring("property PreventClipping")]
+ HRESULT PreventClipping([out, retval] VARIANT_BOOL* bFlag);
+
+ [propput, id(3), helpstring("property PreventClipping")]
+ HRESULT PreventClipping([in] VARIANT_BOOL bFlag);
+
+ [propget, id(4), helpstring("property PreampWithRGInfo")]
+ HRESULT PreampWithRGInfo([out, retval] DOUBLE* dGainInDecibel);
+
+ [propput, id(4), helpstring("property PreampWithRGInfo")]
+ HRESULT PreampWithRGInfo([in] DOUBLE dGainInDecibel);
+
+ [propget, id(5), helpstring("property PreampWithoutRGInfo")]
+ HRESULT PreampWithoutRGInfo([out, retval] DOUBLE* dGainInDecibel);
+
+ [propput, id(5), helpstring("property PreampWithoutRGInfo")]
+ HRESULT PreampWithoutRGInfo([in] DOUBLE dGainInDecibel);
+};
+
+/**
+ * IVBPlayback Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IPlayback Interface"),
+ uuid("ea5b418a-70a5-4962-b578-17f31a3536c2")
+]
+interface IVBPlayback : IDispatch
+{
+ [id(1), helpstring("method Start")]
+ HRESULT Start([in] VARIANT bPaused);
+
+ [id(2), helpstring("method Stop")]
+ HRESULT Stop(void);
+
+ [id(3), helpstring("method Pause")]
+ HRESULT Pause();
+
+ [id(4), helpstring("method Next")]
+ HRESULT Next(void);
+
+ [id(5), helpstring("method Previous")]
+ HRESULT Previous(void);
+
+ [id(6), helpstring("method Random")]
+ HRESULT Random(void);
+
+ [id(7), helpstring("method Seek")]
+ HRESULT Seek([in] DOUBLE dSecondsFromStart);
+
+ [id(8), helpstring("method SeekRelative")]
+ HRESULT SeekRelative([in] DOUBLE dSecondsFromCurrentPosition);
+
+ [id(9), helpstring("method FormatTitle")]
+ HRESULT FormatTitle([in] BSTR strFormat, [out, retval] BSTR* strText);
+
+ [id(10), helpstring("method FormatTitleEx")]
+ HRESULT FormatTitleEx([in] BSTR strFormat, [in] enum fbDisplayLevel lDisplayLevel, [out, retval] BSTR* strText);
+
+ [propget, id(12), helpstring("property IsPlaying")]
+ HRESULT IsPlaying([out, retval] VARIANT_BOOL* bState);
+
+ [propget, id(13), helpstring("property IsPaused")]
+ HRESULT IsPaused([out, retval] VARIANT_BOOL* bState);
+
+ [propget, id(14), helpstring("property Length")]
+ HRESULT Length([out, retval] DOUBLE* dLengthInSeconds);
+
+ [propget, id(15), helpstring("property CanSeek")]
+ HRESULT CanSeek([out, retval] VARIANT_BOOL* bFlag);
+
+ [propget, id(16), helpstring("property Position")]
+ HRESULT Position([out, retval] DOUBLE* dSecondsFromStart);
+
+ [propget, id(22), helpstring("property Settings")]
+ HRESULT Settings([out, retval] IVBPlaybackSettings** oPlaybackSettings);
+
+ [propget, id(23), helpstring("property Replaygain")]
+ HRESULT Replaygain([out, retval] IVBReplaygainSettings** oReplaygainSettings);
+};
+
+/**
+ * _IVBPlaybackEvents Interface.
+ */
+[
+ hidden,
+ helpstring("_IVBPlaybackEvents Interface"),
+ uuid("7d6b3a92-4421-49d9-a111-4d16ef7144ca")
+]
+dispinterface _IVBPlaybackEvents
+{
+properties:
+methods:
+ [id(1), helpstring("method Started")]
+ HRESULT Started([in] VARIANT_BOOL bPaused);
+
+ [id(2), helpstring("method Stopped")]
+ HRESULT Stopped([in] enum fbStopReason lStopReason);
+
+ [id(3), helpstring("method Paused")]
+ HRESULT Paused([in] VARIANT_BOOL bPaused);
+
+ [id(4), helpstring("method TrackChanged")]
+ HRESULT TrackChanged([in] VARIANT_BOOL bLocationChanged);
+
+ [id(5), helpstring("method InfoChanged")]
+ HRESULT InfoChanged(void);
+
+ [id(6), helpstring("method PositionChanged")]
+ HRESULT PositionChanged([in] DOUBLE dSecondsFromStart, [in] VARIANT_BOOL bSeekFlag);
+};
+
+/**
+ * IVBPlaylist Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IVBPlaylist Interface"),
+ uuid("e2ab4023-2e5b-4d97-a8dd-823175cbf573")
+]
+interface IVBPlaylist : IDispatch
+{
+ [propget, id(1), helpstring("property Name")]
+ HRESULT Name([out, retval] BSTR* strName);
+
+ [propput, id(1), helpstring("property Name")]
+ HRESULT Name([in] BSTR strName);
+
+ [propget, id(2), helpstring("property Index")]
+ HRESULT Index([out, retval] LONG* lIndex);
+
+ [id(101), helpstring("method GetTracks")]
+ HRESULT GetTracks([in, optional] VARIANT strQuery, [out, retval] IVBTracks ** oTracks);
+
+ [id(102), helpstring("method GetSortedTracks")]
+ HRESULT GetSortedTracks([in] BSTR strSortFormat, [in, optional] VARIANT strQuery, [out, retval] IVBTracks ** oTracks);
+
+ [id(103), helpstring("method DoDefaultAction")]
+ HRESULT DoDefaultAction([in] LONG lItemIndex, [out, retval] VARIANT_BOOL * bSuccess);
+};
+
+/**
+ * _IVBPlaylistEvents Interface.
+ */
+[
+ hidden,
+ helpstring("_IVBPlaylistEvents Interface"),
+ uuid("b38e3232-b271-4072-ba59-47614658fd60")
+]
+dispinterface _IVBPlaylistEvents
+{
+properties:
+methods:
+};
+
+/**
+ * IVBPlaylists Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IVBPlaylists Interface"),
+ uuid("e4c39463-646a-49d5-9ada-99eaec162ff6")
+]
+interface IVBPlaylists : IDispatch
+{
+ [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum"), hidden, restricted]
+ HRESULT _NewEnum([out, retval] IUnknown** oEnum);
+
+ [propget, id(DISPID_VALUE), helpstring("property Item")]
+ HRESULT Item([in] LONG lIndex, [out,retval] IVBPlaylist** oPlaylist);
+
+ [propget, id(1), helpstring("property Count")]
+ HRESULT Count([out, retval] LONG* lCount);
+
+ [id(3), helpstring("method Add")]
+ HRESULT Add([in] BSTR strName, [in, defaultvalue(0)] VARIANT_BOOL bActivate, [out, retval] IVBPlaylist** oPlaylist);
+
+ [id(4), helpstring("method Remove")]
+ HRESULT Remove([in] IVBPlaylist* oPlaylist, [out, retval] VARIANT_BOOL* bSuccess);
+
+ [id(5), helpstring("method Move")]
+ HRESULT Move([in] IVBPlaylist* oPlaylist, [in] enum fbPosition lPosition, [in, optional] VARIANT oReferencePlaylist);
+
+ [id(6), helpstring("method Load")]
+ HRESULT Load([in] BSTR strName, [in] BSTR strFilename, [in, defaultvalue(0)] VARIANT_BOOL bActivate, [out, retval] IVBPlaylist** oPlaylist);
+
+ [id(7), helpstring("method Save")]
+ HRESULT Save([in] IVBPlaylist* oPlaylist, [in] BSTR strFilename);
+
+ [propget, id(8), helpstring("property ActivePlaylist")]
+ HRESULT ActivePlaylist([out, retval] IVBPlaylist** oPlaylist);
+
+ [propput, id(8), helpstring("property ActivePlaylist")]
+ HRESULT ActivePlaylist([in] IVBPlaylist* oPlaylist);
+
+ [id(101), helpstring("method GetTracks")]
+ HRESULT GetTracks([in, optional] VARIANT strQuery, [out, retval] IVBTracks ** oTracks);
+
+ [id(102), helpstring("method GetSortedTracks")]
+ HRESULT GetSortedTracks([in] BSTR strSortFormat, [in, optional] VARIANT strQuery, [out, retval] IVBTracks ** oTracks);
+};
+
+/**
+ * _IVBPlaylistsEvents Interface.
+ */
+[
+ hidden,
+ helpstring("_IVBPlaylistsEvents Interface"),
+ uuid("c9f6edd0-2bfd-46db-a580-4941eae782d0")
+]
+dispinterface _IVBPlaylistsEvents
+{
+properties:
+methods:
+ [id(1), helpstring("method PlaylistAdded")]
+ HRESULT PlaylistAdded([in] LONG lIndex, [in] IVBPlaylist* oPlaylist, [in] BSTR strName);
+
+ [id(2), helpstring("method PlaylistRemoved")]
+ HRESULT PlaylistRemoved([in] LONG lIndex, [in] IVBPlaylist* oPlaylist);
+
+ [id(3), helpstring("method PlaylistRenamed")]
+ HRESULT PlaylistRenamed([in] LONG lIndex, [in] IVBPlaylist* oPlaylist, [in] BSTR strNewName);
+
+ [id(4), helpstring("method PlaylistsReordered")]
+ HRESULT PlaylistsReordered([in] LONG lFirstIndex, [in] LONG lLastIndex);
+
+ [id(5), helpstring("method PlaylistActivated")]
+ HRESULT PlaylistActivated([in] LONG lIndex, [in] IVBPlaylist* oPlaylist);
+};
+
+/**
+ * IVBMediaLibrary Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IVBPlaylists Interface"),
+ uuid("0386897e-eb1a-4e20-810d-7bdca4f2ff17")
+]
+interface IVBMediaLibrary : IDispatch
+{
+ [id(1), helpstring("method Rescan")]
+ HRESULT Rescan();
+
+ [id(101), helpstring("method GetTracks")]
+ HRESULT GetTracks([in, optional] VARIANT strQuery, [out, retval] IVBTracks ** oTracks);
+
+ [id(102), helpstring("method GetSortedTracks")]
+ HRESULT GetSortedTracks([in] BSTR strSortFormat, [in, optional] VARIANT strQuery, [out, retval] IVBTracks ** oTracks);
+};
+
+/**
+ * IVBApplication Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IVBApplication Interface"),
+ uuid("a3177b54-b826-40ec-996d-a30b9a57a3bf")
+]
+interface IVBApplication : IDispatch
+{
+ [propget, id(1), helpstring("property Name")]
+ HRESULT Name([out, retval] BSTR* strName);
+
+ [propget, id(2), helpstring("property ApplicationPath")]
+ HRESULT ApplicationPath([out, retval] BSTR* strPath);
+
+ [propget, id(3), helpstring("property ProfilePath")]
+ HRESULT ProfilePath([out, retval] BSTR* strPath);
+
+ [propget, id(4), helpstring("property Visible")]
+ HRESULT Minimized([out, retval] VARIANT_BOOL* bFlag);
+
+ [propput, id(4), helpstring("property Visible")]
+ HRESULT Minimized([in] VARIANT_BOOL bFlag);
+
+ [propget, id(5), source, helpstring("property Playback")]
+ HRESULT Playback([out, retval] IVBPlayback ** oPlaylist);
+
+ [propget, id(6), source, helpstring("property Playlists")]
+ HRESULT Playlists([out, retval] IVBPlaylists ** oPlaylists);
+
+ [propget, id(7), helpstring("property MediaLibary")]
+ HRESULT MediaLibrary([out, retval] IVBMediaLibrary ** oMediaLibrary);
+};
+
+/////////////////////////////////////////
+// Declarations for interfaces compatible with C/C++
+
+#if 0
+/**
+ * IVBPlayback Interface.
+ */
+[
+ object,
+ oleautomation,
+ dual,
+ nonextensible,
+ helpstring("IPlayback Interface"),
+ uuid("ea5b418a-70a5-4962-b578-17f31a3536c2")
+]
+interface IVBPlayback : IDispatch
+{
+ [helpstring("method Start")]
+ HRESULT Start([in] VARIANT_BOOL bPaused);
+
+ [helpstring("method Stop")]
+ HRESULT Stop(void);
+
+ [helpstring("method Pause")]
+ HRESULT Pause();
+
+ [helpstring("method Next")]
+ HRESULT Next(void);
+
+ [helpstring("method Previous")]
+ HRESULT Previous(void);
+
+ [helpstring("method Random")]
+ HRESULT Random(void);
+
+ [helpstring("method Seek")]
+ HRESULT Seek([in] DOUBLE dSecondsFromStart);
+
+ [helpstring("method SeekRelative")]
+ HRESULT SeekRelative([in] DOUBLE dSecondsFromCurrentPosition);
+
+ [helpstring("method FormatTitle")]
+ HRESULT FormatTitle([in] BSTR strFormat, [out, retval] BSTR* strText);
+
+ [helpstring("method FormatTitleEx")]
+ HRESULT FormatTitleEx([in] BSTR strFormat, [in] enum fbDisplayLevel lDisplayLevel, [out, retval] BSTR* strText);
+
+ [propget, helpstring("property IsPlaying")]
+ HRESULT IsPlaying([out, retval] VARIANT_BOOL* bState);
+
+ [propget, helpstring("property IsPaused")]
+ HRESULT IsPaused([out, retval] VARIANT_BOOL* bState);
+
+ [propget, helpstring("property Length")]
+ HRESULT Length([out, retval] DOUBLE* dLengthInSeconds);
+
+ [propget, helpstring("property CanSeek")]
+ HRESULT CanSeek([out, retval] VARIANT_BOOL* bFlag);
+
+ [propget, helpstring("property Position")]
+ HRESULT Position([out, retval] DOUBLE* dSecondsFromStart);
+
+ [propget, helpstring("property Settings")]
+ HRESULT Settings([out, retval] IVBPlaybackSettings** oPlaybackSettings);
+
+ [propget, helpstring("property Replaygain")]
+ HRESULT Replaygain([out, retval] IVBReplaygainSettings** oReplaygainSettings);
+};
+
+/**
+ * ITrackContainer Interface.
+ */
+[
+ object,
+ oleautomation,
+ helpstring("ITrackContainer Interface"),
+ uuid("D999E823-D68B-481e-A433-0F48C3213795")
+]
+interface ITrackContainer : IUnknown
+{
+ [helpstring("method GetTracks")]
+ HRESULT GetTracks([in, optional] VARIANT querystring, [out, retval] ITracks ** ppObj);
+
+ [helpstring("method GetSortedTracks")]
+ HRESULT GetSortedTracks([in] BSTR sortformat, [in, optional] VARIANT querystring, [out, retval] ITracks ** ppObj);
+};
+
+/**
+ * ITracks Interface.
+ */
+[
+ object,
+ oleautomation,
+ helpstring("ITracks Interface"),
+ uuid("f2d52f20-03e7-4d18-bef4-67dbcd3214be")
+]
+interface ITracks : ITrackContainer
+{
+ [propget, id(DISPID_NEWENUM), helpstring("property _NewEnum"), hidden, restricted]
+ HRESULT _NewEnum([out, retval] IUnknown** ppObj);
+
+ [propget, id(DISPID_VALUE), helpstring("property Item")]
+ HRESULT Item([in] LONG index, [out,retval] ITrack** ppObj);
+
+ [helpstring("property Count")]
+ HRESULT Count([out, retval] LONG* pVal);
+};
+
+/**
+ * ITrack Interface.
+ */
+[
+ object,
+ oleautomation,
+ helpstring("ITrack Interface"),
+ uuid("1e684982-f5f3-44dd-a307-3e738aeb9185")
+]
+interface ITrack : IDispatch
+{
+ [propget, helpstring("property Path")]
+ HRESULT Path([out, retval] BSTR* pVal);
+
+ [propget, helpstring("property Index")]
+ HRESULT Index([out, retval] LONG* pVal);
+
+ [helpstring("method FormatTitle")]
+ HRESULT FormatTitle([in] BSTR format, [out, retval] BSTR* pVal);
+};
+
+/**
+ * IMediaLibrary Interface.
+ */
+[
+ object,
+ oleautomation,
+ helpstring("IPlaylists Interface"),
+ uuid("94425484-c078-449b-a718-dd21ae312b39")
+]
+interface IMediaLibrary : IUnknown
+{
+ [helpstring("method Rescan")]
+ HRESULT Rescan();
+};
+
+/**
+ * IApplication Interface.
+ */
+[
+ object,
+ oleautomation,
+ helpstring("IApplication Interface"),
+ uuid("443f44db-111c-45fe-9ec7-8cfe3956ee32")
+]
+interface IApplication : IUnknown
+{
+ [propget, helpstring("property Name")]
+ HRESULT Name([out, retval] BSTR* pVal);
+
+ [propget, helpstring("property ApplicationPath")]
+ HRESULT ApplicationPath([out, retval] BSTR* pVal);
+
+ [propget, helpstring("property ProfilePath")]
+ HRESULT ProfilePath([out, retval] BSTR* pVal);
+
+ [propget, helpstring("property Minimized")]
+ HRESULT Minimized([out, retval] VARIANT_BOOL* pVal);
+
+ [propput, helpstring("property Minimized")]
+ HRESULT Minimized([in] VARIANT_BOOL newVal);
+
+ [propget, source, helpstring("property Playback")]
+ HRESULT Playback([out, retval] IPlayback ** ppObj);
+
+ [propget, source, helpstring("property Playlists")]
+ HRESULT Playlists([out, retval] IPlaylists ** ppObj);
+
+ [propget, helpstring("property MediaLibary")]
+ HRESULT MediaLibrary([out, retval] IMediaLibrary ** ppObj);
+};
+#endif
+
+/////////////////////////////////////////
+// Declarations for coclasses
+
+/**
+ * Application Class.
+ */
+[
+ helpstring("Application Class"),
+ uuid("1bffc1e4-21a6-45af-8831-5ee045281633")
+]
+coclass Application07
+{
+ [default] interface IVBApplication;
+ // interface IApplication;
+};
+
+/**
+ * MediaLibrary Class.
+ */
+[
+ noncreatable,
+ helpstring("MediaLibrary Class"),
+ uuid("8F5F0CEF-4E98-470e-A62A-7A6BFA79457A")
+]
+coclass MediaLibrary07
+{
+ [default] interface IVBMediaLibrary;
+ // interface IMediaLibrary;
+};
+
+/**
+ * Playback Class
+ */
+[
+ noncreatable,
+ helpstring("Playback Class"),
+ uuid("6becd912-ace6-4d29-beb5-e835c5f39fd6")
+]
+coclass Playback07
+{
+ [default] interface IVBPlayback;
+ // interface IPlayback;
+ [default, source] interface _IVBPlaybackEvents;
+};
+
+/**
+ * PlaybackOrders Class.
+ */
+[
+ noncreatable,
+ helpstring("PlaybackOrders Class"),
+ uuid("655bd1a9-22ec-47ab-ac84-0210e3da0fd5")
+]
+coclass PlaybackOrders07
+{
+ [default] interface IVBPlaybackOrders;
+ // interface IPlaybackOrders;
+};
+
+/**
+ * PlaybackSettings Class
+ */
+[
+ noncreatable,
+ helpstring("PlaybackSettings Class"),
+ uuid("f022879b-544f-48bd-8911-c521406e6e40")
+]
+coclass PlaybackSettings07
+{
+ [default] interface IVBPlaybackSettings;
+ // interface IPlaybackSettings;
+ [default, source] interface _IVBPlaybackSettingsEvents;
+};
+
+/**
+ * Playlist Class.
+ */
+[
+ noncreatable,
+ helpstring("Playlist Class"),
+ uuid("1ba62148-9f9a-4ca4-94a8-22b381a9c232")
+]
+coclass Playlist07
+{
+ [default] interface IVBPlaylist;
+ // interface IPlaylist;
+ [default, source] interface _IVBPlaylistEvents;
+};
+
+/**
+ * Playlists Class.
+ */
+[
+ noncreatable,
+ helpstring("Playlists Class"),
+ uuid("81b34219-82bd-4651-805d-9cfe298a871b")
+]
+coclass Playlists07
+{
+ [default] interface IVBPlaylists;
+ // interface IPlaylists;
+ [default, source] interface _IVBPlaylistsEvents;
+};
+
+/**
+ * ReplaygainSettings Class
+ */
+[
+ noncreatable,
+ helpstring("ReplaygainSettings Class"),
+ uuid("a93cd01d-c851-4953-a2fa-839e4f720635")
+]
+coclass ReplaygainSettings07
+{
+ [default] interface IVBReplaygainSettings;
+ // interface IReplaygainSettings;
+};
+
+/**
+ * Track Class.
+ */
+[
+ noncreatable,
+ helpstring("Track Class"),
+ uuid("f4e5d447-3a78-40d4-8d3d-b311804f67b1")
+]
+coclass Track07
+{
+ [default] interface IVBTrack;
+ // interface ITrack;
+};
+
+/**
+ Tracks Class.
+ */
+[
+ noncreatable,
+ helpstring("Tracks Class"),
+ uuid("942caf04-86a1-42d6-9e71-e62a24987ca3")
+]
+coclass Tracks07
+{
+ [default] interface IVBTracks;
+ // interface ITracks;
+};
+
+}
diff --git a/Plugins/listeningto/players/foo_comserver2/foobar2000_h.h b/Plugins/listeningto/players/foo_comserver2/foobar2000_h.h new file mode 100644 index 0000000..faaf2ec --- /dev/null +++ b/Plugins/listeningto/players/foo_comserver2/foobar2000_h.h @@ -0,0 +1,3774 @@ +
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 6.00.0366 */
+/* at Mon Jul 31 21:11:35 2006
+ */
+/* Compiler settings for .\foobar2000.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run)
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING( )
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+
+#ifndef __foobar2000_h_h__
+#define __foobar2000_h_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IVBApplication_FWD_DEFINED__
+#define __IVBApplication_FWD_DEFINED__
+typedef interface IVBApplication IVBApplication;
+#endif /* __IVBApplication_FWD_DEFINED__ */
+
+
+#ifndef __IVBMediaLibrary_FWD_DEFINED__
+#define __IVBMediaLibrary_FWD_DEFINED__
+typedef interface IVBMediaLibrary IVBMediaLibrary;
+#endif /* __IVBMediaLibrary_FWD_DEFINED__ */
+
+
+#ifndef __IVBPlayback_FWD_DEFINED__
+#define __IVBPlayback_FWD_DEFINED__
+typedef interface IVBPlayback IVBPlayback;
+#endif /* __IVBPlayback_FWD_DEFINED__ */
+
+
+#ifndef __IVBPlaybackOrders_FWD_DEFINED__
+#define __IVBPlaybackOrders_FWD_DEFINED__
+typedef interface IVBPlaybackOrders IVBPlaybackOrders;
+#endif /* __IVBPlaybackOrders_FWD_DEFINED__ */
+
+
+#ifndef __IVBPlaybackSettings_FWD_DEFINED__
+#define __IVBPlaybackSettings_FWD_DEFINED__
+typedef interface IVBPlaybackSettings IVBPlaybackSettings;
+#endif /* __IVBPlaybackSettings_FWD_DEFINED__ */
+
+
+#ifndef __IVBPlaylist_FWD_DEFINED__
+#define __IVBPlaylist_FWD_DEFINED__
+typedef interface IVBPlaylist IVBPlaylist;
+#endif /* __IVBPlaylist_FWD_DEFINED__ */
+
+
+#ifndef __IVBPlaylists_FWD_DEFINED__
+#define __IVBPlaylists_FWD_DEFINED__
+typedef interface IVBPlaylists IVBPlaylists;
+#endif /* __IVBPlaylists_FWD_DEFINED__ */
+
+
+#ifndef __IVBReplaygainSettings_FWD_DEFINED__
+#define __IVBReplaygainSettings_FWD_DEFINED__
+typedef interface IVBReplaygainSettings IVBReplaygainSettings;
+#endif /* __IVBReplaygainSettings_FWD_DEFINED__ */
+
+
+#ifndef __IVBTrack_FWD_DEFINED__
+#define __IVBTrack_FWD_DEFINED__
+typedef interface IVBTrack IVBTrack;
+#endif /* __IVBTrack_FWD_DEFINED__ */
+
+
+#ifndef __IVBTracks_FWD_DEFINED__
+#define __IVBTracks_FWD_DEFINED__
+typedef interface IVBTracks IVBTracks;
+#endif /* __IVBTracks_FWD_DEFINED__ */
+
+
+#ifndef ___IVBPlaybackEvents_FWD_DEFINED__
+#define ___IVBPlaybackEvents_FWD_DEFINED__
+typedef interface _IVBPlaybackEvents _IVBPlaybackEvents;
+#endif /* ___IVBPlaybackEvents_FWD_DEFINED__ */
+
+
+#ifndef ___IVBPlaybackSettingsEvents_FWD_DEFINED__
+#define ___IVBPlaybackSettingsEvents_FWD_DEFINED__
+typedef interface _IVBPlaybackSettingsEvents _IVBPlaybackSettingsEvents;
+#endif /* ___IVBPlaybackSettingsEvents_FWD_DEFINED__ */
+
+
+#ifndef ___IVBPlaylistEvents_FWD_DEFINED__
+#define ___IVBPlaylistEvents_FWD_DEFINED__
+typedef interface _IVBPlaylistEvents _IVBPlaylistEvents;
+#endif /* ___IVBPlaylistEvents_FWD_DEFINED__ */
+
+
+#ifndef ___IVBPlaylistsEvents_FWD_DEFINED__
+#define ___IVBPlaylistsEvents_FWD_DEFINED__
+typedef interface _IVBPlaylistsEvents _IVBPlaylistsEvents;
+#endif /* ___IVBPlaylistsEvents_FWD_DEFINED__ */
+
+
+#ifndef __Application07_FWD_DEFINED__
+#define __Application07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Application07 Application07;
+#else
+typedef struct Application07 Application07;
+#endif /* __cplusplus */
+
+#endif /* __Application07_FWD_DEFINED__ */
+
+
+#ifndef __MediaLibrary07_FWD_DEFINED__
+#define __MediaLibrary07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class MediaLibrary07 MediaLibrary07;
+#else
+typedef struct MediaLibrary07 MediaLibrary07;
+#endif /* __cplusplus */
+
+#endif /* __MediaLibrary07_FWD_DEFINED__ */
+
+
+#ifndef __Playback07_FWD_DEFINED__
+#define __Playback07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Playback07 Playback07;
+#else
+typedef struct Playback07 Playback07;
+#endif /* __cplusplus */
+
+#endif /* __Playback07_FWD_DEFINED__ */
+
+
+#ifndef __PlaybackOrders07_FWD_DEFINED__
+#define __PlaybackOrders07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class PlaybackOrders07 PlaybackOrders07;
+#else
+typedef struct PlaybackOrders07 PlaybackOrders07;
+#endif /* __cplusplus */
+
+#endif /* __PlaybackOrders07_FWD_DEFINED__ */
+
+
+#ifndef __PlaybackSettings07_FWD_DEFINED__
+#define __PlaybackSettings07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class PlaybackSettings07 PlaybackSettings07;
+#else
+typedef struct PlaybackSettings07 PlaybackSettings07;
+#endif /* __cplusplus */
+
+#endif /* __PlaybackSettings07_FWD_DEFINED__ */
+
+
+#ifndef __Playlist07_FWD_DEFINED__
+#define __Playlist07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Playlist07 Playlist07;
+#else
+typedef struct Playlist07 Playlist07;
+#endif /* __cplusplus */
+
+#endif /* __Playlist07_FWD_DEFINED__ */
+
+
+#ifndef __Playlists07_FWD_DEFINED__
+#define __Playlists07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Playlists07 Playlists07;
+#else
+typedef struct Playlists07 Playlists07;
+#endif /* __cplusplus */
+
+#endif /* __Playlists07_FWD_DEFINED__ */
+
+
+#ifndef __ReplaygainSettings07_FWD_DEFINED__
+#define __ReplaygainSettings07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class ReplaygainSettings07 ReplaygainSettings07;
+#else
+typedef struct ReplaygainSettings07 ReplaygainSettings07;
+#endif /* __cplusplus */
+
+#endif /* __ReplaygainSettings07_FWD_DEFINED__ */
+
+
+#ifndef __Track07_FWD_DEFINED__
+#define __Track07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Track07 Track07;
+#else
+typedef struct Track07 Track07;
+#endif /* __cplusplus */
+
+#endif /* __Track07_FWD_DEFINED__ */
+
+
+#ifndef __Tracks07_FWD_DEFINED__
+#define __Tracks07_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class Tracks07 Tracks07;
+#else
+typedef struct Tracks07 Tracks07;
+#endif /* __cplusplus */
+
+#endif /* __Tracks07_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+void * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void * );
+
+
+#ifndef __Foobar2000_LIBRARY_DEFINED__
+#define __Foobar2000_LIBRARY_DEFINED__
+
+/* library Foobar2000 */
+/* [version][helpstring][uuid] */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+/* [helpstring] */
+enum fbDisplayLevel
+ { fbDisplayLevelNone = 0,
+ fbDisplayLevelBasic = 1,
+ fbDisplayLevelTitles = 2,
+ fbDisplayLevelAll = 3
+ } ;
+/* [helpstring] */
+enum fbStopReason
+ { fbStopReasonUser = 0,
+ fbStopReasonEOF = fbStopReasonUser + 1,
+ fbStopReasonStartingAnother = fbStopReasonEOF + 1
+ } ;
+/* [helpstring] */
+enum fbPosition
+ { fbPositionFirst = 0,
+ fbPositionLast = fbPositionFirst + 1,
+ fbPositionBefore = fbPositionLast + 1,
+ fbPositionAfter = fbPositionBefore + 1
+ } ;
+/* [helpstring] */
+enum fbReplaygainMode
+ { fbReplaygainModeNone = 0,
+ fbReplaygainModeTrack = 1,
+ fbReplaygainModeAlbum = 2
+ } ;
+
+EXTERN_C const IID LIBID_Foobar2000;
+
+#ifndef __IVBApplication_INTERFACE_DEFINED__
+#define __IVBApplication_INTERFACE_DEFINED__
+
+/* interface IVBApplication */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBApplication;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("a3177b54-b826-40ec-996d-a30b9a57a3bf")
+ IVBApplication : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Name(
+ /* [retval][out] */ BSTR *strName) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ApplicationPath(
+ /* [retval][out] */ BSTR *strPath) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ProfilePath(
+ /* [retval][out] */ BSTR *strPath) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Minimized(
+ /* [retval][out] */ VARIANT_BOOL *bFlag) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Minimized(
+ /* [in] */ VARIANT_BOOL bFlag) = 0;
+
+ virtual /* [helpstring][source][id][propget] */ HRESULT STDMETHODCALLTYPE get_Playback(
+ /* [retval][out] */ IVBPlayback **oPlaylist) = 0;
+
+ virtual /* [helpstring][source][id][propget] */ HRESULT STDMETHODCALLTYPE get_Playlists(
+ /* [retval][out] */ IVBPlaylists **oPlaylists) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_MediaLibrary(
+ /* [retval][out] */ IVBMediaLibrary **oMediaLibrary) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBApplicationVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBApplication * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBApplication * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBApplication * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBApplication * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBApplication * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBApplication * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBApplication * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
+ IVBApplication * This,
+ /* [retval][out] */ BSTR *strName);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_ApplicationPath )(
+ IVBApplication * This,
+ /* [retval][out] */ BSTR *strPath);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_ProfilePath )(
+ IVBApplication * This,
+ /* [retval][out] */ BSTR *strPath);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Minimized )(
+ IVBApplication * This,
+ /* [retval][out] */ VARIANT_BOOL *bFlag);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Minimized )(
+ IVBApplication * This,
+ /* [in] */ VARIANT_BOOL bFlag);
+
+ /* [helpstring][source][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Playback )(
+ IVBApplication * This,
+ /* [retval][out] */ IVBPlayback **oPlaylist);
+
+ /* [helpstring][source][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Playlists )(
+ IVBApplication * This,
+ /* [retval][out] */ IVBPlaylists **oPlaylists);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_MediaLibrary )(
+ IVBApplication * This,
+ /* [retval][out] */ IVBMediaLibrary **oMediaLibrary);
+
+ END_INTERFACE
+ } IVBApplicationVtbl;
+
+ interface IVBApplication
+ {
+ CONST_VTBL struct IVBApplicationVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBApplication_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBApplication_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBApplication_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBApplication_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBApplication_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBApplication_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBApplication_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBApplication_get_Name(This,strName) \
+ (This)->lpVtbl -> get_Name(This,strName)
+
+#define IVBApplication_get_ApplicationPath(This,strPath) \
+ (This)->lpVtbl -> get_ApplicationPath(This,strPath)
+
+#define IVBApplication_get_ProfilePath(This,strPath) \
+ (This)->lpVtbl -> get_ProfilePath(This,strPath)
+
+#define IVBApplication_get_Minimized(This,bFlag) \
+ (This)->lpVtbl -> get_Minimized(This,bFlag)
+
+#define IVBApplication_put_Minimized(This,bFlag) \
+ (This)->lpVtbl -> put_Minimized(This,bFlag)
+
+#define IVBApplication_get_Playback(This,oPlaylist) \
+ (This)->lpVtbl -> get_Playback(This,oPlaylist)
+
+#define IVBApplication_get_Playlists(This,oPlaylists) \
+ (This)->lpVtbl -> get_Playlists(This,oPlaylists)
+
+#define IVBApplication_get_MediaLibrary(This,oMediaLibrary) \
+ (This)->lpVtbl -> get_MediaLibrary(This,oMediaLibrary)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBApplication_get_Name_Proxy(
+ IVBApplication * This,
+ /* [retval][out] */ BSTR *strName);
+
+
+void __RPC_STUB IVBApplication_get_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBApplication_get_ApplicationPath_Proxy(
+ IVBApplication * This,
+ /* [retval][out] */ BSTR *strPath);
+
+
+void __RPC_STUB IVBApplication_get_ApplicationPath_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBApplication_get_ProfilePath_Proxy(
+ IVBApplication * This,
+ /* [retval][out] */ BSTR *strPath);
+
+
+void __RPC_STUB IVBApplication_get_ProfilePath_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBApplication_get_Minimized_Proxy(
+ IVBApplication * This,
+ /* [retval][out] */ VARIANT_BOOL *bFlag);
+
+
+void __RPC_STUB IVBApplication_get_Minimized_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBApplication_put_Minimized_Proxy(
+ IVBApplication * This,
+ /* [in] */ VARIANT_BOOL bFlag);
+
+
+void __RPC_STUB IVBApplication_put_Minimized_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][source][id][propget] */ HRESULT STDMETHODCALLTYPE IVBApplication_get_Playback_Proxy(
+ IVBApplication * This,
+ /* [retval][out] */ IVBPlayback **oPlaylist);
+
+
+void __RPC_STUB IVBApplication_get_Playback_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][source][id][propget] */ HRESULT STDMETHODCALLTYPE IVBApplication_get_Playlists_Proxy(
+ IVBApplication * This,
+ /* [retval][out] */ IVBPlaylists **oPlaylists);
+
+
+void __RPC_STUB IVBApplication_get_Playlists_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBApplication_get_MediaLibrary_Proxy(
+ IVBApplication * This,
+ /* [retval][out] */ IVBMediaLibrary **oMediaLibrary);
+
+
+void __RPC_STUB IVBApplication_get_MediaLibrary_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBApplication_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBMediaLibrary_INTERFACE_DEFINED__
+#define __IVBMediaLibrary_INTERFACE_DEFINED__
+
+/* interface IVBMediaLibrary */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBMediaLibrary;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("0386897e-eb1a-4e20-810d-7bdca4f2ff17")
+ IVBMediaLibrary : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Rescan( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTracks(
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSortedTracks(
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBMediaLibraryVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBMediaLibrary * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBMediaLibrary * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBMediaLibrary * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBMediaLibrary * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBMediaLibrary * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBMediaLibrary * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBMediaLibrary * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Rescan )(
+ IVBMediaLibrary * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTracks )(
+ IVBMediaLibrary * This,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSortedTracks )(
+ IVBMediaLibrary * This,
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+ END_INTERFACE
+ } IVBMediaLibraryVtbl;
+
+ interface IVBMediaLibrary
+ {
+ CONST_VTBL struct IVBMediaLibraryVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBMediaLibrary_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBMediaLibrary_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBMediaLibrary_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBMediaLibrary_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBMediaLibrary_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBMediaLibrary_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBMediaLibrary_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBMediaLibrary_Rescan(This) \
+ (This)->lpVtbl -> Rescan(This)
+
+#define IVBMediaLibrary_GetTracks(This,strQuery,oTracks) \
+ (This)->lpVtbl -> GetTracks(This,strQuery,oTracks)
+
+#define IVBMediaLibrary_GetSortedTracks(This,strSortFormat,strQuery,oTracks) \
+ (This)->lpVtbl -> GetSortedTracks(This,strSortFormat,strQuery,oTracks)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBMediaLibrary_Rescan_Proxy(
+ IVBMediaLibrary * This);
+
+
+void __RPC_STUB IVBMediaLibrary_Rescan_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBMediaLibrary_GetTracks_Proxy(
+ IVBMediaLibrary * This,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+
+void __RPC_STUB IVBMediaLibrary_GetTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBMediaLibrary_GetSortedTracks_Proxy(
+ IVBMediaLibrary * This,
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+
+void __RPC_STUB IVBMediaLibrary_GetSortedTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBMediaLibrary_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBPlayback_INTERFACE_DEFINED__
+#define __IVBPlayback_INTERFACE_DEFINED__
+
+/* interface IVBPlayback */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBPlayback;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("ea5b418a-70a5-4962-b578-17f31a3536c2")
+ IVBPlayback : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Start(
+ /* [in] */ VARIANT bPaused) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Stop( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Pause( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Next( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Previous( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Random( void) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Seek(
+ /* [in] */ DOUBLE dSecondsFromStart) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE SeekRelative(
+ /* [in] */ DOUBLE dSecondsFromCurrentPosition) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE FormatTitle(
+ /* [in] */ BSTR strFormat,
+ /* [retval][out] */ BSTR *strText) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE FormatTitleEx(
+ /* [in] */ BSTR strFormat,
+ /* [in] */ enum fbDisplayLevel lDisplayLevel,
+ /* [retval][out] */ BSTR *strText) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsPlaying(
+ /* [retval][out] */ VARIANT_BOOL *bState) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_IsPaused(
+ /* [retval][out] */ VARIANT_BOOL *bState) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Length(
+ /* [retval][out] */ DOUBLE *dLengthInSeconds) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_CanSeek(
+ /* [retval][out] */ VARIANT_BOOL *bFlag) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Position(
+ /* [retval][out] */ DOUBLE *dSecondsFromStart) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Settings(
+ /* [retval][out] */ IVBPlaybackSettings **oPlaybackSettings) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Replaygain(
+ /* [retval][out] */ IVBReplaygainSettings **oReplaygainSettings) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBPlaybackVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBPlayback * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBPlayback * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBPlayback * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBPlayback * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBPlayback * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBPlayback * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBPlayback * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Start )(
+ IVBPlayback * This,
+ /* [in] */ VARIANT bPaused);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Stop )(
+ IVBPlayback * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Pause )(
+ IVBPlayback * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Next )(
+ IVBPlayback * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Previous )(
+ IVBPlayback * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Random )(
+ IVBPlayback * This);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Seek )(
+ IVBPlayback * This,
+ /* [in] */ DOUBLE dSecondsFromStart);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *SeekRelative )(
+ IVBPlayback * This,
+ /* [in] */ DOUBLE dSecondsFromCurrentPosition);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *FormatTitle )(
+ IVBPlayback * This,
+ /* [in] */ BSTR strFormat,
+ /* [retval][out] */ BSTR *strText);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *FormatTitleEx )(
+ IVBPlayback * This,
+ /* [in] */ BSTR strFormat,
+ /* [in] */ enum fbDisplayLevel lDisplayLevel,
+ /* [retval][out] */ BSTR *strText);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPlaying )(
+ IVBPlayback * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_IsPaused )(
+ IVBPlayback * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Length )(
+ IVBPlayback * This,
+ /* [retval][out] */ DOUBLE *dLengthInSeconds);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_CanSeek )(
+ IVBPlayback * This,
+ /* [retval][out] */ VARIANT_BOOL *bFlag);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Position )(
+ IVBPlayback * This,
+ /* [retval][out] */ DOUBLE *dSecondsFromStart);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Settings )(
+ IVBPlayback * This,
+ /* [retval][out] */ IVBPlaybackSettings **oPlaybackSettings);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Replaygain )(
+ IVBPlayback * This,
+ /* [retval][out] */ IVBReplaygainSettings **oReplaygainSettings);
+
+ END_INTERFACE
+ } IVBPlaybackVtbl;
+
+ interface IVBPlayback
+ {
+ CONST_VTBL struct IVBPlaybackVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBPlayback_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBPlayback_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBPlayback_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBPlayback_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBPlayback_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBPlayback_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBPlayback_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBPlayback_Start(This,bPaused) \
+ (This)->lpVtbl -> Start(This,bPaused)
+
+#define IVBPlayback_Stop(This) \
+ (This)->lpVtbl -> Stop(This)
+
+#define IVBPlayback_Pause(This) \
+ (This)->lpVtbl -> Pause(This)
+
+#define IVBPlayback_Next(This) \
+ (This)->lpVtbl -> Next(This)
+
+#define IVBPlayback_Previous(This) \
+ (This)->lpVtbl -> Previous(This)
+
+#define IVBPlayback_Random(This) \
+ (This)->lpVtbl -> Random(This)
+
+#define IVBPlayback_Seek(This,dSecondsFromStart) \
+ (This)->lpVtbl -> Seek(This,dSecondsFromStart)
+
+#define IVBPlayback_SeekRelative(This,dSecondsFromCurrentPosition) \
+ (This)->lpVtbl -> SeekRelative(This,dSecondsFromCurrentPosition)
+
+#define IVBPlayback_FormatTitle(This,strFormat,strText) \
+ (This)->lpVtbl -> FormatTitle(This,strFormat,strText)
+
+#define IVBPlayback_FormatTitleEx(This,strFormat,lDisplayLevel,strText) \
+ (This)->lpVtbl -> FormatTitleEx(This,strFormat,lDisplayLevel,strText)
+
+#define IVBPlayback_get_IsPlaying(This,bState) \
+ (This)->lpVtbl -> get_IsPlaying(This,bState)
+
+#define IVBPlayback_get_IsPaused(This,bState) \
+ (This)->lpVtbl -> get_IsPaused(This,bState)
+
+#define IVBPlayback_get_Length(This,dLengthInSeconds) \
+ (This)->lpVtbl -> get_Length(This,dLengthInSeconds)
+
+#define IVBPlayback_get_CanSeek(This,bFlag) \
+ (This)->lpVtbl -> get_CanSeek(This,bFlag)
+
+#define IVBPlayback_get_Position(This,dSecondsFromStart) \
+ (This)->lpVtbl -> get_Position(This,dSecondsFromStart)
+
+#define IVBPlayback_get_Settings(This,oPlaybackSettings) \
+ (This)->lpVtbl -> get_Settings(This,oPlaybackSettings)
+
+#define IVBPlayback_get_Replaygain(This,oReplaygainSettings) \
+ (This)->lpVtbl -> get_Replaygain(This,oReplaygainSettings)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_Start_Proxy(
+ IVBPlayback * This,
+ /* [in] */ VARIANT bPaused);
+
+
+void __RPC_STUB IVBPlayback_Start_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_Stop_Proxy(
+ IVBPlayback * This);
+
+
+void __RPC_STUB IVBPlayback_Stop_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_Pause_Proxy(
+ IVBPlayback * This);
+
+
+void __RPC_STUB IVBPlayback_Pause_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_Next_Proxy(
+ IVBPlayback * This);
+
+
+void __RPC_STUB IVBPlayback_Next_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_Previous_Proxy(
+ IVBPlayback * This);
+
+
+void __RPC_STUB IVBPlayback_Previous_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_Random_Proxy(
+ IVBPlayback * This);
+
+
+void __RPC_STUB IVBPlayback_Random_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_Seek_Proxy(
+ IVBPlayback * This,
+ /* [in] */ DOUBLE dSecondsFromStart);
+
+
+void __RPC_STUB IVBPlayback_Seek_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_SeekRelative_Proxy(
+ IVBPlayback * This,
+ /* [in] */ DOUBLE dSecondsFromCurrentPosition);
+
+
+void __RPC_STUB IVBPlayback_SeekRelative_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_FormatTitle_Proxy(
+ IVBPlayback * This,
+ /* [in] */ BSTR strFormat,
+ /* [retval][out] */ BSTR *strText);
+
+
+void __RPC_STUB IVBPlayback_FormatTitle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlayback_FormatTitleEx_Proxy(
+ IVBPlayback * This,
+ /* [in] */ BSTR strFormat,
+ /* [in] */ enum fbDisplayLevel lDisplayLevel,
+ /* [retval][out] */ BSTR *strText);
+
+
+void __RPC_STUB IVBPlayback_FormatTitleEx_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlayback_get_IsPlaying_Proxy(
+ IVBPlayback * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+
+void __RPC_STUB IVBPlayback_get_IsPlaying_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlayback_get_IsPaused_Proxy(
+ IVBPlayback * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+
+void __RPC_STUB IVBPlayback_get_IsPaused_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlayback_get_Length_Proxy(
+ IVBPlayback * This,
+ /* [retval][out] */ DOUBLE *dLengthInSeconds);
+
+
+void __RPC_STUB IVBPlayback_get_Length_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlayback_get_CanSeek_Proxy(
+ IVBPlayback * This,
+ /* [retval][out] */ VARIANT_BOOL *bFlag);
+
+
+void __RPC_STUB IVBPlayback_get_CanSeek_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlayback_get_Position_Proxy(
+ IVBPlayback * This,
+ /* [retval][out] */ DOUBLE *dSecondsFromStart);
+
+
+void __RPC_STUB IVBPlayback_get_Position_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlayback_get_Settings_Proxy(
+ IVBPlayback * This,
+ /* [retval][out] */ IVBPlaybackSettings **oPlaybackSettings);
+
+
+void __RPC_STUB IVBPlayback_get_Settings_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlayback_get_Replaygain_Proxy(
+ IVBPlayback * This,
+ /* [retval][out] */ IVBReplaygainSettings **oReplaygainSettings);
+
+
+void __RPC_STUB IVBPlayback_get_Replaygain_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBPlayback_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBPlaybackOrders_INTERFACE_DEFINED__
+#define __IVBPlaybackOrders_INTERFACE_DEFINED__
+
+/* interface IVBPlaybackOrders */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBPlaybackOrders;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("a94be3f4-ea45-4d4c-af02-7c7a398c224e")
+ IVBPlaybackOrders : public IDispatch
+ {
+ public:
+ virtual /* [restricted][hidden][helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown **oEnum) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ BSTR *strName) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ LONG *lCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GuidFromName(
+ /* [in] */ BSTR strName,
+ /* [retval][out] */ BSTR *strGuid) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE NameFromGuid(
+ /* [in] */ BSTR strGuid,
+ /* [retval][out] */ BSTR *strName) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBPlaybackOrdersVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBPlaybackOrders * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBPlaybackOrders * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBPlaybackOrders * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBPlaybackOrders * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBPlaybackOrders * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBPlaybackOrders * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBPlaybackOrders * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [restricted][hidden][helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
+ IVBPlaybackOrders * This,
+ /* [retval][out] */ IUnknown **oEnum);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
+ IVBPlaybackOrders * This,
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ BSTR *strName);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
+ IVBPlaybackOrders * This,
+ /* [retval][out] */ LONG *lCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GuidFromName )(
+ IVBPlaybackOrders * This,
+ /* [in] */ BSTR strName,
+ /* [retval][out] */ BSTR *strGuid);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *NameFromGuid )(
+ IVBPlaybackOrders * This,
+ /* [in] */ BSTR strGuid,
+ /* [retval][out] */ BSTR *strName);
+
+ END_INTERFACE
+ } IVBPlaybackOrdersVtbl;
+
+ interface IVBPlaybackOrders
+ {
+ CONST_VTBL struct IVBPlaybackOrdersVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBPlaybackOrders_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBPlaybackOrders_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBPlaybackOrders_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBPlaybackOrders_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBPlaybackOrders_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBPlaybackOrders_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBPlaybackOrders_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBPlaybackOrders_get__NewEnum(This,oEnum) \
+ (This)->lpVtbl -> get__NewEnum(This,oEnum)
+
+#define IVBPlaybackOrders_get_Item(This,lIndex,strName) \
+ (This)->lpVtbl -> get_Item(This,lIndex,strName)
+
+#define IVBPlaybackOrders_get_Count(This,lCount) \
+ (This)->lpVtbl -> get_Count(This,lCount)
+
+#define IVBPlaybackOrders_GuidFromName(This,strName,strGuid) \
+ (This)->lpVtbl -> GuidFromName(This,strName,strGuid)
+
+#define IVBPlaybackOrders_NameFromGuid(This,strGuid,strName) \
+ (This)->lpVtbl -> NameFromGuid(This,strGuid,strName)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [restricted][hidden][helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackOrders_get__NewEnum_Proxy(
+ IVBPlaybackOrders * This,
+ /* [retval][out] */ IUnknown **oEnum);
+
+
+void __RPC_STUB IVBPlaybackOrders_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackOrders_get_Item_Proxy(
+ IVBPlaybackOrders * This,
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ BSTR *strName);
+
+
+void __RPC_STUB IVBPlaybackOrders_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackOrders_get_Count_Proxy(
+ IVBPlaybackOrders * This,
+ /* [retval][out] */ LONG *lCount);
+
+
+void __RPC_STUB IVBPlaybackOrders_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaybackOrders_GuidFromName_Proxy(
+ IVBPlaybackOrders * This,
+ /* [in] */ BSTR strName,
+ /* [retval][out] */ BSTR *strGuid);
+
+
+void __RPC_STUB IVBPlaybackOrders_GuidFromName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaybackOrders_NameFromGuid_Proxy(
+ IVBPlaybackOrders * This,
+ /* [in] */ BSTR strGuid,
+ /* [retval][out] */ BSTR *strName);
+
+
+void __RPC_STUB IVBPlaybackOrders_NameFromGuid_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBPlaybackOrders_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBPlaybackSettings_INTERFACE_DEFINED__
+#define __IVBPlaybackSettings_INTERFACE_DEFINED__
+
+/* interface IVBPlaybackSettings */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBPlaybackSettings;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("d25cec8d-2d0d-42e6-9a9f-0eee52d6f0c5")
+ IVBPlaybackSettings : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Volume(
+ /* [retval][out] */ DOUBLE *dGainInDecibel) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Volume(
+ /* [in] */ DOUBLE dGainInDecibel) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PlaybackFollowsCursor(
+ /* [retval][out] */ VARIANT_BOOL *bState) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_PlaybackFollowsCursor(
+ /* [in] */ VARIANT_BOOL bState) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_CursorFollowsPlayback(
+ /* [retval][out] */ VARIANT_BOOL *bState) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_CursorFollowsPlayback(
+ /* [in] */ VARIANT_BOOL bState) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_StopAfterCurrent(
+ /* [retval][out] */ VARIANT_BOOL *bState) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_StopAfterCurrent(
+ /* [in] */ VARIANT_BOOL bState) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ActivePlaybackOrder(
+ /* [retval][out] */ BSTR *bState) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_ActivePlaybackOrder(
+ /* [in] */ BSTR strName) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PlaybackOrders(
+ /* [retval][out] */ IVBPlaybackOrders **oOrders) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBPlaybackSettingsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBPlaybackSettings * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBPlaybackSettings * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBPlaybackSettings * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBPlaybackSettings * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBPlaybackSettings * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBPlaybackSettings * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBPlaybackSettings * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Volume )(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ DOUBLE *dGainInDecibel);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Volume )(
+ IVBPlaybackSettings * This,
+ /* [in] */ DOUBLE dGainInDecibel);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_PlaybackFollowsCursor )(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_PlaybackFollowsCursor )(
+ IVBPlaybackSettings * This,
+ /* [in] */ VARIANT_BOOL bState);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_CursorFollowsPlayback )(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_CursorFollowsPlayback )(
+ IVBPlaybackSettings * This,
+ /* [in] */ VARIANT_BOOL bState);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_StopAfterCurrent )(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_StopAfterCurrent )(
+ IVBPlaybackSettings * This,
+ /* [in] */ VARIANT_BOOL bState);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_ActivePlaybackOrder )(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ BSTR *bState);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_ActivePlaybackOrder )(
+ IVBPlaybackSettings * This,
+ /* [in] */ BSTR strName);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_PlaybackOrders )(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ IVBPlaybackOrders **oOrders);
+
+ END_INTERFACE
+ } IVBPlaybackSettingsVtbl;
+
+ interface IVBPlaybackSettings
+ {
+ CONST_VTBL struct IVBPlaybackSettingsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBPlaybackSettings_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBPlaybackSettings_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBPlaybackSettings_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBPlaybackSettings_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBPlaybackSettings_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBPlaybackSettings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBPlaybackSettings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBPlaybackSettings_get_Volume(This,dGainInDecibel) \
+ (This)->lpVtbl -> get_Volume(This,dGainInDecibel)
+
+#define IVBPlaybackSettings_put_Volume(This,dGainInDecibel) \
+ (This)->lpVtbl -> put_Volume(This,dGainInDecibel)
+
+#define IVBPlaybackSettings_get_PlaybackFollowsCursor(This,bState) \
+ (This)->lpVtbl -> get_PlaybackFollowsCursor(This,bState)
+
+#define IVBPlaybackSettings_put_PlaybackFollowsCursor(This,bState) \
+ (This)->lpVtbl -> put_PlaybackFollowsCursor(This,bState)
+
+#define IVBPlaybackSettings_get_CursorFollowsPlayback(This,bState) \
+ (This)->lpVtbl -> get_CursorFollowsPlayback(This,bState)
+
+#define IVBPlaybackSettings_put_CursorFollowsPlayback(This,bState) \
+ (This)->lpVtbl -> put_CursorFollowsPlayback(This,bState)
+
+#define IVBPlaybackSettings_get_StopAfterCurrent(This,bState) \
+ (This)->lpVtbl -> get_StopAfterCurrent(This,bState)
+
+#define IVBPlaybackSettings_put_StopAfterCurrent(This,bState) \
+ (This)->lpVtbl -> put_StopAfterCurrent(This,bState)
+
+#define IVBPlaybackSettings_get_ActivePlaybackOrder(This,bState) \
+ (This)->lpVtbl -> get_ActivePlaybackOrder(This,bState)
+
+#define IVBPlaybackSettings_put_ActivePlaybackOrder(This,strName) \
+ (This)->lpVtbl -> put_ActivePlaybackOrder(This,strName)
+
+#define IVBPlaybackSettings_get_PlaybackOrders(This,oOrders) \
+ (This)->lpVtbl -> get_PlaybackOrders(This,oOrders)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_get_Volume_Proxy(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ DOUBLE *dGainInDecibel);
+
+
+void __RPC_STUB IVBPlaybackSettings_get_Volume_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_put_Volume_Proxy(
+ IVBPlaybackSettings * This,
+ /* [in] */ DOUBLE dGainInDecibel);
+
+
+void __RPC_STUB IVBPlaybackSettings_put_Volume_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_get_PlaybackFollowsCursor_Proxy(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+
+void __RPC_STUB IVBPlaybackSettings_get_PlaybackFollowsCursor_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_put_PlaybackFollowsCursor_Proxy(
+ IVBPlaybackSettings * This,
+ /* [in] */ VARIANT_BOOL bState);
+
+
+void __RPC_STUB IVBPlaybackSettings_put_PlaybackFollowsCursor_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_get_CursorFollowsPlayback_Proxy(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+
+void __RPC_STUB IVBPlaybackSettings_get_CursorFollowsPlayback_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_put_CursorFollowsPlayback_Proxy(
+ IVBPlaybackSettings * This,
+ /* [in] */ VARIANT_BOOL bState);
+
+
+void __RPC_STUB IVBPlaybackSettings_put_CursorFollowsPlayback_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_get_StopAfterCurrent_Proxy(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bState);
+
+
+void __RPC_STUB IVBPlaybackSettings_get_StopAfterCurrent_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_put_StopAfterCurrent_Proxy(
+ IVBPlaybackSettings * This,
+ /* [in] */ VARIANT_BOOL bState);
+
+
+void __RPC_STUB IVBPlaybackSettings_put_StopAfterCurrent_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_get_ActivePlaybackOrder_Proxy(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ BSTR *bState);
+
+
+void __RPC_STUB IVBPlaybackSettings_get_ActivePlaybackOrder_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_put_ActivePlaybackOrder_Proxy(
+ IVBPlaybackSettings * This,
+ /* [in] */ BSTR strName);
+
+
+void __RPC_STUB IVBPlaybackSettings_put_ActivePlaybackOrder_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaybackSettings_get_PlaybackOrders_Proxy(
+ IVBPlaybackSettings * This,
+ /* [retval][out] */ IVBPlaybackOrders **oOrders);
+
+
+void __RPC_STUB IVBPlaybackSettings_get_PlaybackOrders_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBPlaybackSettings_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBPlaylist_INTERFACE_DEFINED__
+#define __IVBPlaylist_INTERFACE_DEFINED__
+
+/* interface IVBPlaylist */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBPlaylist;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("e2ab4023-2e5b-4d97-a8dd-823175cbf573")
+ IVBPlaylist : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Name(
+ /* [retval][out] */ BSTR *strName) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Name(
+ /* [in] */ BSTR strName) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Index(
+ /* [retval][out] */ LONG *lIndex) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTracks(
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSortedTracks(
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE DoDefaultAction(
+ /* [in] */ LONG lItemIndex,
+ /* [retval][out] */ VARIANT_BOOL *bSuccess) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBPlaylistVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBPlaylist * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBPlaylist * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBPlaylist * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBPlaylist * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBPlaylist * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBPlaylist * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBPlaylist * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Name )(
+ IVBPlaylist * This,
+ /* [retval][out] */ BSTR *strName);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Name )(
+ IVBPlaylist * This,
+ /* [in] */ BSTR strName);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Index )(
+ IVBPlaylist * This,
+ /* [retval][out] */ LONG *lIndex);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTracks )(
+ IVBPlaylist * This,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSortedTracks )(
+ IVBPlaylist * This,
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *DoDefaultAction )(
+ IVBPlaylist * This,
+ /* [in] */ LONG lItemIndex,
+ /* [retval][out] */ VARIANT_BOOL *bSuccess);
+
+ END_INTERFACE
+ } IVBPlaylistVtbl;
+
+ interface IVBPlaylist
+ {
+ CONST_VTBL struct IVBPlaylistVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBPlaylist_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBPlaylist_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBPlaylist_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBPlaylist_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBPlaylist_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBPlaylist_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBPlaylist_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBPlaylist_get_Name(This,strName) \
+ (This)->lpVtbl -> get_Name(This,strName)
+
+#define IVBPlaylist_put_Name(This,strName) \
+ (This)->lpVtbl -> put_Name(This,strName)
+
+#define IVBPlaylist_get_Index(This,lIndex) \
+ (This)->lpVtbl -> get_Index(This,lIndex)
+
+#define IVBPlaylist_GetTracks(This,strQuery,oTracks) \
+ (This)->lpVtbl -> GetTracks(This,strQuery,oTracks)
+
+#define IVBPlaylist_GetSortedTracks(This,strSortFormat,strQuery,oTracks) \
+ (This)->lpVtbl -> GetSortedTracks(This,strSortFormat,strQuery,oTracks)
+
+#define IVBPlaylist_DoDefaultAction(This,lItemIndex,bSuccess) \
+ (This)->lpVtbl -> DoDefaultAction(This,lItemIndex,bSuccess)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaylist_get_Name_Proxy(
+ IVBPlaylist * This,
+ /* [retval][out] */ BSTR *strName);
+
+
+void __RPC_STUB IVBPlaylist_get_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBPlaylist_put_Name_Proxy(
+ IVBPlaylist * This,
+ /* [in] */ BSTR strName);
+
+
+void __RPC_STUB IVBPlaylist_put_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaylist_get_Index_Proxy(
+ IVBPlaylist * This,
+ /* [retval][out] */ LONG *lIndex);
+
+
+void __RPC_STUB IVBPlaylist_get_Index_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylist_GetTracks_Proxy(
+ IVBPlaylist * This,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+
+void __RPC_STUB IVBPlaylist_GetTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylist_GetSortedTracks_Proxy(
+ IVBPlaylist * This,
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+
+void __RPC_STUB IVBPlaylist_GetSortedTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylist_DoDefaultAction_Proxy(
+ IVBPlaylist * This,
+ /* [in] */ LONG lItemIndex,
+ /* [retval][out] */ VARIANT_BOOL *bSuccess);
+
+
+void __RPC_STUB IVBPlaylist_DoDefaultAction_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBPlaylist_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBPlaylists_INTERFACE_DEFINED__
+#define __IVBPlaylists_INTERFACE_DEFINED__
+
+/* interface IVBPlaylists */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBPlaylists;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("e4c39463-646a-49d5-9ada-99eaec162ff6")
+ IVBPlaylists : public IDispatch
+ {
+ public:
+ virtual /* [restricted][hidden][helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown **oEnum) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ IVBPlaylist **oPlaylist) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ LONG *lCount) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Add(
+ /* [in] */ BSTR strName,
+ /* [defaultvalue][in] */ VARIANT_BOOL bActivate,
+ /* [retval][out] */ IVBPlaylist **oPlaylist) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Remove(
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *bSuccess) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Move(
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [in] */ enum fbPosition lPosition,
+ /* [optional][in] */ VARIANT oReferencePlaylist) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Load(
+ /* [in] */ BSTR strName,
+ /* [in] */ BSTR strFilename,
+ /* [defaultvalue][in] */ VARIANT_BOOL bActivate,
+ /* [retval][out] */ IVBPlaylist **oPlaylist) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE Save(
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [in] */ BSTR strFilename) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ActivePlaylist(
+ /* [retval][out] */ IVBPlaylist **oPlaylist) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_ActivePlaylist(
+ /* [in] */ IVBPlaylist *oPlaylist) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTracks(
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSortedTracks(
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBPlaylistsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBPlaylists * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBPlaylists * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBPlaylists * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBPlaylists * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBPlaylists * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBPlaylists * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBPlaylists * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [restricted][hidden][helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
+ IVBPlaylists * This,
+ /* [retval][out] */ IUnknown **oEnum);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
+ IVBPlaylists * This,
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ IVBPlaylist **oPlaylist);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
+ IVBPlaylists * This,
+ /* [retval][out] */ LONG *lCount);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Add )(
+ IVBPlaylists * This,
+ /* [in] */ BSTR strName,
+ /* [defaultvalue][in] */ VARIANT_BOOL bActivate,
+ /* [retval][out] */ IVBPlaylist **oPlaylist);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Remove )(
+ IVBPlaylists * This,
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *bSuccess);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Move )(
+ IVBPlaylists * This,
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [in] */ enum fbPosition lPosition,
+ /* [optional][in] */ VARIANT oReferencePlaylist);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Load )(
+ IVBPlaylists * This,
+ /* [in] */ BSTR strName,
+ /* [in] */ BSTR strFilename,
+ /* [defaultvalue][in] */ VARIANT_BOOL bActivate,
+ /* [retval][out] */ IVBPlaylist **oPlaylist);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *Save )(
+ IVBPlaylists * This,
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [in] */ BSTR strFilename);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_ActivePlaylist )(
+ IVBPlaylists * This,
+ /* [retval][out] */ IVBPlaylist **oPlaylist);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_ActivePlaylist )(
+ IVBPlaylists * This,
+ /* [in] */ IVBPlaylist *oPlaylist);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTracks )(
+ IVBPlaylists * This,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSortedTracks )(
+ IVBPlaylists * This,
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+ END_INTERFACE
+ } IVBPlaylistsVtbl;
+
+ interface IVBPlaylists
+ {
+ CONST_VTBL struct IVBPlaylistsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBPlaylists_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBPlaylists_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBPlaylists_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBPlaylists_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBPlaylists_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBPlaylists_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBPlaylists_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBPlaylists_get__NewEnum(This,oEnum) \
+ (This)->lpVtbl -> get__NewEnum(This,oEnum)
+
+#define IVBPlaylists_get_Item(This,lIndex,oPlaylist) \
+ (This)->lpVtbl -> get_Item(This,lIndex,oPlaylist)
+
+#define IVBPlaylists_get_Count(This,lCount) \
+ (This)->lpVtbl -> get_Count(This,lCount)
+
+#define IVBPlaylists_Add(This,strName,bActivate,oPlaylist) \
+ (This)->lpVtbl -> Add(This,strName,bActivate,oPlaylist)
+
+#define IVBPlaylists_Remove(This,oPlaylist,bSuccess) \
+ (This)->lpVtbl -> Remove(This,oPlaylist,bSuccess)
+
+#define IVBPlaylists_Move(This,oPlaylist,lPosition,oReferencePlaylist) \
+ (This)->lpVtbl -> Move(This,oPlaylist,lPosition,oReferencePlaylist)
+
+#define IVBPlaylists_Load(This,strName,strFilename,bActivate,oPlaylist) \
+ (This)->lpVtbl -> Load(This,strName,strFilename,bActivate,oPlaylist)
+
+#define IVBPlaylists_Save(This,oPlaylist,strFilename) \
+ (This)->lpVtbl -> Save(This,oPlaylist,strFilename)
+
+#define IVBPlaylists_get_ActivePlaylist(This,oPlaylist) \
+ (This)->lpVtbl -> get_ActivePlaylist(This,oPlaylist)
+
+#define IVBPlaylists_put_ActivePlaylist(This,oPlaylist) \
+ (This)->lpVtbl -> put_ActivePlaylist(This,oPlaylist)
+
+#define IVBPlaylists_GetTracks(This,strQuery,oTracks) \
+ (This)->lpVtbl -> GetTracks(This,strQuery,oTracks)
+
+#define IVBPlaylists_GetSortedTracks(This,strSortFormat,strQuery,oTracks) \
+ (This)->lpVtbl -> GetSortedTracks(This,strSortFormat,strQuery,oTracks)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [restricted][hidden][helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_get__NewEnum_Proxy(
+ IVBPlaylists * This,
+ /* [retval][out] */ IUnknown **oEnum);
+
+
+void __RPC_STUB IVBPlaylists_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_get_Item_Proxy(
+ IVBPlaylists * This,
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ IVBPlaylist **oPlaylist);
+
+
+void __RPC_STUB IVBPlaylists_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_get_Count_Proxy(
+ IVBPlaylists * This,
+ /* [retval][out] */ LONG *lCount);
+
+
+void __RPC_STUB IVBPlaylists_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_Add_Proxy(
+ IVBPlaylists * This,
+ /* [in] */ BSTR strName,
+ /* [defaultvalue][in] */ VARIANT_BOOL bActivate,
+ /* [retval][out] */ IVBPlaylist **oPlaylist);
+
+
+void __RPC_STUB IVBPlaylists_Add_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_Remove_Proxy(
+ IVBPlaylists * This,
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [retval][out] */ VARIANT_BOOL *bSuccess);
+
+
+void __RPC_STUB IVBPlaylists_Remove_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_Move_Proxy(
+ IVBPlaylists * This,
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [in] */ enum fbPosition lPosition,
+ /* [optional][in] */ VARIANT oReferencePlaylist);
+
+
+void __RPC_STUB IVBPlaylists_Move_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_Load_Proxy(
+ IVBPlaylists * This,
+ /* [in] */ BSTR strName,
+ /* [in] */ BSTR strFilename,
+ /* [defaultvalue][in] */ VARIANT_BOOL bActivate,
+ /* [retval][out] */ IVBPlaylist **oPlaylist);
+
+
+void __RPC_STUB IVBPlaylists_Load_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_Save_Proxy(
+ IVBPlaylists * This,
+ /* [in] */ IVBPlaylist *oPlaylist,
+ /* [in] */ BSTR strFilename);
+
+
+void __RPC_STUB IVBPlaylists_Save_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_get_ActivePlaylist_Proxy(
+ IVBPlaylists * This,
+ /* [retval][out] */ IVBPlaylist **oPlaylist);
+
+
+void __RPC_STUB IVBPlaylists_get_ActivePlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_put_ActivePlaylist_Proxy(
+ IVBPlaylists * This,
+ /* [in] */ IVBPlaylist *oPlaylist);
+
+
+void __RPC_STUB IVBPlaylists_put_ActivePlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_GetTracks_Proxy(
+ IVBPlaylists * This,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+
+void __RPC_STUB IVBPlaylists_GetTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBPlaylists_GetSortedTracks_Proxy(
+ IVBPlaylists * This,
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+
+void __RPC_STUB IVBPlaylists_GetSortedTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBPlaylists_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBReplaygainSettings_INTERFACE_DEFINED__
+#define __IVBReplaygainSettings_INTERFACE_DEFINED__
+
+/* interface IVBReplaygainSettings */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBReplaygainSettings;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6f873be6-ae3b-4c2f-828c-d5253a99805c")
+ IVBReplaygainSettings : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Mode(
+ /* [retval][out] */ enum fbReplaygainMode *lReplaygainMode) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_Mode(
+ /* [in] */ enum fbReplaygainMode lReplaygainMode) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_ApplyGain(
+ /* [retval][out] */ VARIANT_BOOL *bFlag) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_ApplyGain(
+ /* [in] */ VARIANT_BOOL bFlag) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PreventClipping(
+ /* [retval][out] */ VARIANT_BOOL *bFlag) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_PreventClipping(
+ /* [in] */ VARIANT_BOOL bFlag) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PreampWithRGInfo(
+ /* [retval][out] */ DOUBLE *dGainInDecibel) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_PreampWithRGInfo(
+ /* [in] */ DOUBLE dGainInDecibel) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_PreampWithoutRGInfo(
+ /* [retval][out] */ DOUBLE *dGainInDecibel) = 0;
+
+ virtual /* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE put_PreampWithoutRGInfo(
+ /* [in] */ DOUBLE dGainInDecibel) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBReplaygainSettingsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBReplaygainSettings * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBReplaygainSettings * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBReplaygainSettings * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBReplaygainSettings * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBReplaygainSettings * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBReplaygainSettings * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBReplaygainSettings * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Mode )(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ enum fbReplaygainMode *lReplaygainMode);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_Mode )(
+ IVBReplaygainSettings * This,
+ /* [in] */ enum fbReplaygainMode lReplaygainMode);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_ApplyGain )(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bFlag);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_ApplyGain )(
+ IVBReplaygainSettings * This,
+ /* [in] */ VARIANT_BOOL bFlag);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreventClipping )(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bFlag);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreventClipping )(
+ IVBReplaygainSettings * This,
+ /* [in] */ VARIANT_BOOL bFlag);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreampWithRGInfo )(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ DOUBLE *dGainInDecibel);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreampWithRGInfo )(
+ IVBReplaygainSettings * This,
+ /* [in] */ DOUBLE dGainInDecibel);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_PreampWithoutRGInfo )(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ DOUBLE *dGainInDecibel);
+
+ /* [helpstring][id][propput] */ HRESULT ( STDMETHODCALLTYPE *put_PreampWithoutRGInfo )(
+ IVBReplaygainSettings * This,
+ /* [in] */ DOUBLE dGainInDecibel);
+
+ END_INTERFACE
+ } IVBReplaygainSettingsVtbl;
+
+ interface IVBReplaygainSettings
+ {
+ CONST_VTBL struct IVBReplaygainSettingsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBReplaygainSettings_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBReplaygainSettings_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBReplaygainSettings_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBReplaygainSettings_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBReplaygainSettings_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBReplaygainSettings_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBReplaygainSettings_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBReplaygainSettings_get_Mode(This,lReplaygainMode) \
+ (This)->lpVtbl -> get_Mode(This,lReplaygainMode)
+
+#define IVBReplaygainSettings_put_Mode(This,lReplaygainMode) \
+ (This)->lpVtbl -> put_Mode(This,lReplaygainMode)
+
+#define IVBReplaygainSettings_get_ApplyGain(This,bFlag) \
+ (This)->lpVtbl -> get_ApplyGain(This,bFlag)
+
+#define IVBReplaygainSettings_put_ApplyGain(This,bFlag) \
+ (This)->lpVtbl -> put_ApplyGain(This,bFlag)
+
+#define IVBReplaygainSettings_get_PreventClipping(This,bFlag) \
+ (This)->lpVtbl -> get_PreventClipping(This,bFlag)
+
+#define IVBReplaygainSettings_put_PreventClipping(This,bFlag) \
+ (This)->lpVtbl -> put_PreventClipping(This,bFlag)
+
+#define IVBReplaygainSettings_get_PreampWithRGInfo(This,dGainInDecibel) \
+ (This)->lpVtbl -> get_PreampWithRGInfo(This,dGainInDecibel)
+
+#define IVBReplaygainSettings_put_PreampWithRGInfo(This,dGainInDecibel) \
+ (This)->lpVtbl -> put_PreampWithRGInfo(This,dGainInDecibel)
+
+#define IVBReplaygainSettings_get_PreampWithoutRGInfo(This,dGainInDecibel) \
+ (This)->lpVtbl -> get_PreampWithoutRGInfo(This,dGainInDecibel)
+
+#define IVBReplaygainSettings_put_PreampWithoutRGInfo(This,dGainInDecibel) \
+ (This)->lpVtbl -> put_PreampWithoutRGInfo(This,dGainInDecibel)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_get_Mode_Proxy(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ enum fbReplaygainMode *lReplaygainMode);
+
+
+void __RPC_STUB IVBReplaygainSettings_get_Mode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_put_Mode_Proxy(
+ IVBReplaygainSettings * This,
+ /* [in] */ enum fbReplaygainMode lReplaygainMode);
+
+
+void __RPC_STUB IVBReplaygainSettings_put_Mode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_get_ApplyGain_Proxy(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bFlag);
+
+
+void __RPC_STUB IVBReplaygainSettings_get_ApplyGain_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_put_ApplyGain_Proxy(
+ IVBReplaygainSettings * This,
+ /* [in] */ VARIANT_BOOL bFlag);
+
+
+void __RPC_STUB IVBReplaygainSettings_put_ApplyGain_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_get_PreventClipping_Proxy(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ VARIANT_BOOL *bFlag);
+
+
+void __RPC_STUB IVBReplaygainSettings_get_PreventClipping_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_put_PreventClipping_Proxy(
+ IVBReplaygainSettings * This,
+ /* [in] */ VARIANT_BOOL bFlag);
+
+
+void __RPC_STUB IVBReplaygainSettings_put_PreventClipping_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_get_PreampWithRGInfo_Proxy(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ DOUBLE *dGainInDecibel);
+
+
+void __RPC_STUB IVBReplaygainSettings_get_PreampWithRGInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_put_PreampWithRGInfo_Proxy(
+ IVBReplaygainSettings * This,
+ /* [in] */ DOUBLE dGainInDecibel);
+
+
+void __RPC_STUB IVBReplaygainSettings_put_PreampWithRGInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_get_PreampWithoutRGInfo_Proxy(
+ IVBReplaygainSettings * This,
+ /* [retval][out] */ DOUBLE *dGainInDecibel);
+
+
+void __RPC_STUB IVBReplaygainSettings_get_PreampWithoutRGInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propput] */ HRESULT STDMETHODCALLTYPE IVBReplaygainSettings_put_PreampWithoutRGInfo_Proxy(
+ IVBReplaygainSettings * This,
+ /* [in] */ DOUBLE dGainInDecibel);
+
+
+void __RPC_STUB IVBReplaygainSettings_put_PreampWithoutRGInfo_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBReplaygainSettings_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBTrack_INTERFACE_DEFINED__
+#define __IVBTrack_INTERFACE_DEFINED__
+
+/* interface IVBTrack */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBTrack;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6d590032-ba42-41ca-866c-321e2b511a62")
+ IVBTrack : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Path(
+ /* [retval][out] */ BSTR *strPath) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Index(
+ /* [retval][out] */ LONG *lIndex) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE FormatTitle(
+ /* [in] */ BSTR strFormat,
+ /* [retval][out] */ BSTR *strText) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBTrackVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBTrack * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBTrack * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBTrack * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBTrack * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBTrack * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBTrack * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBTrack * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Path )(
+ IVBTrack * This,
+ /* [retval][out] */ BSTR *strPath);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Index )(
+ IVBTrack * This,
+ /* [retval][out] */ LONG *lIndex);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *FormatTitle )(
+ IVBTrack * This,
+ /* [in] */ BSTR strFormat,
+ /* [retval][out] */ BSTR *strText);
+
+ END_INTERFACE
+ } IVBTrackVtbl;
+
+ interface IVBTrack
+ {
+ CONST_VTBL struct IVBTrackVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBTrack_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBTrack_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBTrack_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBTrack_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBTrack_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBTrack_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBTrack_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBTrack_get_Path(This,strPath) \
+ (This)->lpVtbl -> get_Path(This,strPath)
+
+#define IVBTrack_get_Index(This,lIndex) \
+ (This)->lpVtbl -> get_Index(This,lIndex)
+
+#define IVBTrack_FormatTitle(This,strFormat,strText) \
+ (This)->lpVtbl -> FormatTitle(This,strFormat,strText)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBTrack_get_Path_Proxy(
+ IVBTrack * This,
+ /* [retval][out] */ BSTR *strPath);
+
+
+void __RPC_STUB IVBTrack_get_Path_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBTrack_get_Index_Proxy(
+ IVBTrack * This,
+ /* [retval][out] */ LONG *lIndex);
+
+
+void __RPC_STUB IVBTrack_get_Index_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBTrack_FormatTitle_Proxy(
+ IVBTrack * This,
+ /* [in] */ BSTR strFormat,
+ /* [retval][out] */ BSTR *strText);
+
+
+void __RPC_STUB IVBTrack_FormatTitle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBTrack_INTERFACE_DEFINED__ */
+
+
+#ifndef __IVBTracks_INTERFACE_DEFINED__
+#define __IVBTracks_INTERFACE_DEFINED__
+
+/* interface IVBTracks */
+/* [uuid][helpstring][nonextensible][dual][oleautomation][object] */
+
+
+EXTERN_C const IID IID_IVBTracks;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("0d5d4f8f-4132-48cb-9d6c-126843f78909")
+ IVBTracks : public IDispatch
+ {
+ public:
+ virtual /* [restricted][hidden][helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown **oEnum) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ IVBTrack **oTrack) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ LONG *pVal) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetTracks(
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks) = 0;
+
+ virtual /* [helpstring][id] */ HRESULT STDMETHODCALLTYPE GetSortedTracks(
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IVBTracksVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IVBTracks * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IVBTracks * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IVBTracks * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IVBTracks * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IVBTracks * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IVBTracks * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IVBTracks * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [restricted][hidden][helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get__NewEnum )(
+ IVBTracks * This,
+ /* [retval][out] */ IUnknown **oEnum);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Item )(
+ IVBTracks * This,
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ IVBTrack **oTrack);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE *get_Count )(
+ IVBTracks * This,
+ /* [retval][out] */ LONG *pVal);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetTracks )(
+ IVBTracks * This,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+ /* [helpstring][id] */ HRESULT ( STDMETHODCALLTYPE *GetSortedTracks )(
+ IVBTracks * This,
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+ END_INTERFACE
+ } IVBTracksVtbl;
+
+ interface IVBTracks
+ {
+ CONST_VTBL struct IVBTracksVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IVBTracks_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IVBTracks_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IVBTracks_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IVBTracks_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IVBTracks_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IVBTracks_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IVBTracks_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IVBTracks_get__NewEnum(This,oEnum) \
+ (This)->lpVtbl -> get__NewEnum(This,oEnum)
+
+#define IVBTracks_get_Item(This,lIndex,oTrack) \
+ (This)->lpVtbl -> get_Item(This,lIndex,oTrack)
+
+#define IVBTracks_get_Count(This,pVal) \
+ (This)->lpVtbl -> get_Count(This,pVal)
+
+#define IVBTracks_GetTracks(This,strQuery,oTracks) \
+ (This)->lpVtbl -> GetTracks(This,strQuery,oTracks)
+
+#define IVBTracks_GetSortedTracks(This,strSortFormat,strQuery,oTracks) \
+ (This)->lpVtbl -> GetSortedTracks(This,strSortFormat,strQuery,oTracks)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [restricted][hidden][helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBTracks_get__NewEnum_Proxy(
+ IVBTracks * This,
+ /* [retval][out] */ IUnknown **oEnum);
+
+
+void __RPC_STUB IVBTracks_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBTracks_get_Item_Proxy(
+ IVBTracks * This,
+ /* [in] */ LONG lIndex,
+ /* [retval][out] */ IVBTrack **oTrack);
+
+
+void __RPC_STUB IVBTracks_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IVBTracks_get_Count_Proxy(
+ IVBTracks * This,
+ /* [retval][out] */ LONG *pVal);
+
+
+void __RPC_STUB IVBTracks_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBTracks_GetTracks_Proxy(
+ IVBTracks * This,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+
+void __RPC_STUB IVBTracks_GetTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id] */ HRESULT STDMETHODCALLTYPE IVBTracks_GetSortedTracks_Proxy(
+ IVBTracks * This,
+ /* [in] */ BSTR strSortFormat,
+ /* [optional][in] */ VARIANT strQuery,
+ /* [retval][out] */ IVBTracks **oTracks);
+
+
+void __RPC_STUB IVBTracks_GetSortedTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IVBTracks_INTERFACE_DEFINED__ */
+
+
+#ifndef ___IVBPlaybackEvents_DISPINTERFACE_DEFINED__
+#define ___IVBPlaybackEvents_DISPINTERFACE_DEFINED__
+
+/* dispinterface _IVBPlaybackEvents */
+/* [uuid][helpstring][hidden] */
+
+
+EXTERN_C const IID DIID__IVBPlaybackEvents;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("7d6b3a92-4421-49d9-a111-4d16ef7144ca")
+ _IVBPlaybackEvents : public IDispatch
+ {
+ };
+
+#else /* C style interface */
+
+ typedef struct _IVBPlaybackEventsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ _IVBPlaybackEvents * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ _IVBPlaybackEvents * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ _IVBPlaybackEvents * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ _IVBPlaybackEvents * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ _IVBPlaybackEvents * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ _IVBPlaybackEvents * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ _IVBPlaybackEvents * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ END_INTERFACE
+ } _IVBPlaybackEventsVtbl;
+
+ interface _IVBPlaybackEvents
+ {
+ CONST_VTBL struct _IVBPlaybackEventsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define _IVBPlaybackEvents_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define _IVBPlaybackEvents_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define _IVBPlaybackEvents_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define _IVBPlaybackEvents_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define _IVBPlaybackEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define _IVBPlaybackEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define _IVBPlaybackEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+#endif /* ___IVBPlaybackEvents_DISPINTERFACE_DEFINED__ */
+
+
+#ifndef ___IVBPlaybackSettingsEvents_DISPINTERFACE_DEFINED__
+#define ___IVBPlaybackSettingsEvents_DISPINTERFACE_DEFINED__
+
+/* dispinterface _IVBPlaybackSettingsEvents */
+/* [uuid][helpstring][hidden] */
+
+
+EXTERN_C const IID DIID__IVBPlaybackSettingsEvents;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("831ae6d1-6ebf-488d-9274-a5523cbb29b7")
+ _IVBPlaybackSettingsEvents : public IDispatch
+ {
+ };
+
+#else /* C style interface */
+
+ typedef struct _IVBPlaybackSettingsEventsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ _IVBPlaybackSettingsEvents * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ _IVBPlaybackSettingsEvents * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ _IVBPlaybackSettingsEvents * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ _IVBPlaybackSettingsEvents * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ _IVBPlaybackSettingsEvents * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ _IVBPlaybackSettingsEvents * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ _IVBPlaybackSettingsEvents * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ END_INTERFACE
+ } _IVBPlaybackSettingsEventsVtbl;
+
+ interface _IVBPlaybackSettingsEvents
+ {
+ CONST_VTBL struct _IVBPlaybackSettingsEventsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define _IVBPlaybackSettingsEvents_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define _IVBPlaybackSettingsEvents_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define _IVBPlaybackSettingsEvents_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define _IVBPlaybackSettingsEvents_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define _IVBPlaybackSettingsEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define _IVBPlaybackSettingsEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define _IVBPlaybackSettingsEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+#endif /* ___IVBPlaybackSettingsEvents_DISPINTERFACE_DEFINED__ */
+
+
+#ifndef ___IVBPlaylistEvents_DISPINTERFACE_DEFINED__
+#define ___IVBPlaylistEvents_DISPINTERFACE_DEFINED__
+
+/* dispinterface _IVBPlaylistEvents */
+/* [uuid][helpstring][hidden] */
+
+
+EXTERN_C const IID DIID__IVBPlaylistEvents;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("b38e3232-b271-4072-ba59-47614658fd60")
+ _IVBPlaylistEvents : public IDispatch
+ {
+ };
+
+#else /* C style interface */
+
+ typedef struct _IVBPlaylistEventsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ _IVBPlaylistEvents * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ _IVBPlaylistEvents * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ _IVBPlaylistEvents * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ _IVBPlaylistEvents * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ _IVBPlaylistEvents * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ _IVBPlaylistEvents * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ _IVBPlaylistEvents * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ END_INTERFACE
+ } _IVBPlaylistEventsVtbl;
+
+ interface _IVBPlaylistEvents
+ {
+ CONST_VTBL struct _IVBPlaylistEventsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define _IVBPlaylistEvents_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define _IVBPlaylistEvents_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define _IVBPlaylistEvents_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define _IVBPlaylistEvents_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define _IVBPlaylistEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define _IVBPlaylistEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define _IVBPlaylistEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+#endif /* ___IVBPlaylistEvents_DISPINTERFACE_DEFINED__ */
+
+
+#ifndef ___IVBPlaylistsEvents_DISPINTERFACE_DEFINED__
+#define ___IVBPlaylistsEvents_DISPINTERFACE_DEFINED__
+
+/* dispinterface _IVBPlaylistsEvents */
+/* [uuid][helpstring][hidden] */
+
+
+EXTERN_C const IID DIID__IVBPlaylistsEvents;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("c9f6edd0-2bfd-46db-a580-4941eae782d0")
+ _IVBPlaylistsEvents : public IDispatch
+ {
+ };
+
+#else /* C style interface */
+
+ typedef struct _IVBPlaylistsEventsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ _IVBPlaylistsEvents * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ _IVBPlaylistsEvents * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ _IVBPlaylistsEvents * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ _IVBPlaylistsEvents * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ _IVBPlaylistsEvents * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ _IVBPlaylistsEvents * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ _IVBPlaylistsEvents * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ END_INTERFACE
+ } _IVBPlaylistsEventsVtbl;
+
+ interface _IVBPlaylistsEvents
+ {
+ CONST_VTBL struct _IVBPlaylistsEventsVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define _IVBPlaylistsEvents_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define _IVBPlaylistsEvents_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define _IVBPlaylistsEvents_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define _IVBPlaylistsEvents_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define _IVBPlaylistsEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define _IVBPlaylistsEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define _IVBPlaylistsEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+#endif /* ___IVBPlaylistsEvents_DISPINTERFACE_DEFINED__ */
+
+
+EXTERN_C const CLSID CLSID_Application07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("1bffc1e4-21a6-45af-8831-5ee045281633")
+Application07;
+#endif
+
+EXTERN_C const CLSID CLSID_MediaLibrary07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("8F5F0CEF-4E98-470e-A62A-7A6BFA79457A")
+MediaLibrary07;
+#endif
+
+EXTERN_C const CLSID CLSID_Playback07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("6becd912-ace6-4d29-beb5-e835c5f39fd6")
+Playback07;
+#endif
+
+EXTERN_C const CLSID CLSID_PlaybackOrders07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("655bd1a9-22ec-47ab-ac84-0210e3da0fd5")
+PlaybackOrders07;
+#endif
+
+EXTERN_C const CLSID CLSID_PlaybackSettings07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("f022879b-544f-48bd-8911-c521406e6e40")
+PlaybackSettings07;
+#endif
+
+EXTERN_C const CLSID CLSID_Playlist07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("1ba62148-9f9a-4ca4-94a8-22b381a9c232")
+Playlist07;
+#endif
+
+EXTERN_C const CLSID CLSID_Playlists07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("81b34219-82bd-4651-805d-9cfe298a871b")
+Playlists07;
+#endif
+
+EXTERN_C const CLSID CLSID_ReplaygainSettings07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("a93cd01d-c851-4953-a2fa-839e4f720635")
+ReplaygainSettings07;
+#endif
+
+EXTERN_C const CLSID CLSID_Track07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("f4e5d447-3a78-40d4-8d3d-b311804f67b1")
+Track07;
+#endif
+
+EXTERN_C const CLSID CLSID_Tracks07;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("942caf04-86a1-42d6-9e71-e62a24987ca3")
+Tracks07;
+#endif
+#endif /* __Foobar2000_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/Plugins/listeningto/players/foo_comserver2/foobar2000_i.c b/Plugins/listeningto/players/foo_comserver2/foobar2000_i.c new file mode 100644 index 0000000..f60afe5 --- /dev/null +++ b/Plugins/listeningto/players/foo_comserver2/foobar2000_i.c @@ -0,0 +1,151 @@ +
+
+/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+ /* File created by MIDL compiler version 6.00.0366 */
+/* at Mon Jul 31 21:11:35 2006
+ */
+/* Compiler settings for .\foobar2000.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run)
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+//@@MIDL_FILE_HEADING( )
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else // !_MIDL_USE_GUIDDEF_
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+ unsigned long x;
+ unsigned short s1;
+ unsigned short s2;
+ unsigned char c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif !_MIDL_USE_GUIDDEF_
+
+MIDL_DEFINE_GUID(IID, LIBID_Foobar2000,0xcb8f14d8,0x736e,0x4bb7,0xad,0xcf,0xbe,0x26,0xc3,0x9b,0x57,0x6b);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBApplication,0xa3177b54,0xb826,0x40ec,0x99,0x6d,0xa3,0x0b,0x9a,0x57,0xa3,0xbf);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBMediaLibrary,0x0386897e,0xeb1a,0x4e20,0x81,0x0d,0x7b,0xdc,0xa4,0xf2,0xff,0x17);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBPlayback,0xea5b418a,0x70a5,0x4962,0xb5,0x78,0x17,0xf3,0x1a,0x35,0x36,0xc2);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBPlaybackOrders,0xa94be3f4,0xea45,0x4d4c,0xaf,0x02,0x7c,0x7a,0x39,0x8c,0x22,0x4e);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBPlaybackSettings,0xd25cec8d,0x2d0d,0x42e6,0x9a,0x9f,0x0e,0xee,0x52,0xd6,0xf0,0xc5);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBPlaylist,0xe2ab4023,0x2e5b,0x4d97,0xa8,0xdd,0x82,0x31,0x75,0xcb,0xf5,0x73);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBPlaylists,0xe4c39463,0x646a,0x49d5,0x9a,0xda,0x99,0xea,0xec,0x16,0x2f,0xf6);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBReplaygainSettings,0x6f873be6,0xae3b,0x4c2f,0x82,0x8c,0xd5,0x25,0x3a,0x99,0x80,0x5c);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBTrack,0x6d590032,0xba42,0x41ca,0x86,0x6c,0x32,0x1e,0x2b,0x51,0x1a,0x62);
+
+
+MIDL_DEFINE_GUID(IID, IID_IVBTracks,0x0d5d4f8f,0x4132,0x48cb,0x9d,0x6c,0x12,0x68,0x43,0xf7,0x89,0x09);
+
+
+MIDL_DEFINE_GUID(IID, DIID__IVBPlaybackEvents,0x7d6b3a92,0x4421,0x49d9,0xa1,0x11,0x4d,0x16,0xef,0x71,0x44,0xca);
+
+
+MIDL_DEFINE_GUID(IID, DIID__IVBPlaybackSettingsEvents,0x831ae6d1,0x6ebf,0x488d,0x92,0x74,0xa5,0x52,0x3c,0xbb,0x29,0xb7);
+
+
+MIDL_DEFINE_GUID(IID, DIID__IVBPlaylistEvents,0xb38e3232,0xb271,0x4072,0xba,0x59,0x47,0x61,0x46,0x58,0xfd,0x60);
+
+
+MIDL_DEFINE_GUID(IID, DIID__IVBPlaylistsEvents,0xc9f6edd0,0x2bfd,0x46db,0xa5,0x80,0x49,0x41,0xea,0xe7,0x82,0xd0);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_Application07,0x1bffc1e4,0x21a6,0x45af,0x88,0x31,0x5e,0xe0,0x45,0x28,0x16,0x33);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_MediaLibrary07,0x8F5F0CEF,0x4E98,0x470e,0xA6,0x2A,0x7A,0x6B,0xFA,0x79,0x45,0x7A);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_Playback07,0x6becd912,0xace6,0x4d29,0xbe,0xb5,0xe8,0x35,0xc5,0xf3,0x9f,0xd6);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_PlaybackOrders07,0x655bd1a9,0x22ec,0x47ab,0xac,0x84,0x02,0x10,0xe3,0xda,0x0f,0xd5);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_PlaybackSettings07,0xf022879b,0x544f,0x48bd,0x89,0x11,0xc5,0x21,0x40,0x6e,0x6e,0x40);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_Playlist07,0x1ba62148,0x9f9a,0x4ca4,0x94,0xa8,0x22,0xb3,0x81,0xa9,0xc2,0x32);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_Playlists07,0x81b34219,0x82bd,0x4651,0x80,0x5d,0x9c,0xfe,0x29,0x8a,0x87,0x1b);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_ReplaygainSettings07,0xa93cd01d,0xc851,0x4953,0xa2,0xfa,0x83,0x9e,0x4f,0x72,0x06,0x35);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_Track07,0xf4e5d447,0x3a78,0x40d4,0x8d,0x3d,0xb3,0x11,0x80,0x4f,0x67,0xb1);
+
+
+MIDL_DEFINE_GUID(CLSID, CLSID_Tracks07,0x942caf04,0x86a1,0x42d6,0x9e,0x71,0xe6,0x2a,0x24,0x98,0x7c,0xa3);
+
+#undef MIDL_DEFINE_GUID
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
diff --git a/Plugins/listeningto/players/foo_mlt/foo_mlt.cpp b/Plugins/listeningto/players/foo_mlt/foo_mlt.cpp index 42f86f7..c4dbad2 100644 --- a/Plugins/listeningto/players/foo_mlt/foo_mlt.cpp +++ b/Plugins/listeningto/players/foo_mlt/foo_mlt.cpp @@ -1,3 +1,42 @@ +/*
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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 "foobar2000/SDK/foobar2000.h"
#include "foobar2000/helpers/helpers.h"
#include "..\..\m_listeningto.h"
@@ -18,6 +57,8 @@ using namespace pfc; UINT timer = 0;
WCHAR lastSongData[DATA_SIZE] = L"";
+static bool g_off = true; //global state for sending listeningto infos
+
// Functions ////////////////////////////////////////////////////////////////////////////
@@ -273,6 +314,8 @@ class play_callback_miranda : public play_callback_static virtual void on_playback_starting(play_control::t_track_command p_command, bool p_paused) {}
virtual void on_playback_new_track(metadb_handle_ptr p_track)
{
+ if (g_off) return;
+
KillTimer();
if (IsRadio(p_track))
return;
@@ -285,11 +328,13 @@ class play_callback_miranda : public play_callback_static }
virtual void on_playback_stop(play_control::t_stop_reason p_reason)
{
+ if (g_off) return;
SetTimer();
}
virtual void on_playback_seek(double p_time) {}
virtual void on_playback_pause(bool p_state)
{
+ if (g_off) return;
if (p_state)
{
SetTimer();
@@ -305,6 +350,7 @@ class play_callback_miranda : public play_callback_static virtual void on_playback_dynamic_info(const file_info & info) {}
virtual void on_playback_dynamic_info_track(const file_info & info)
{
+ if (g_off) return;
metadb_handle_ptr p_track;
static_api_ptr_t<play_control>()->get_now_playing(p_track);
if (p_track.is_valid())
@@ -334,4 +380,33 @@ class play_callback_miranda : public play_callback_static static play_callback_static_factory_t<play_callback_miranda> miranda_callback_factory;
-DECLARE_COMPONENT_VERSION("Miranda ListeningTo foobar2000 Plugin", "1.0", 0)
+class myinitquit : public initquit {
+public:
+ void on_init()
+ {
+ //check if foo_comserver2 is present and set g_off to false if foo_mlt go active
+ //TODO:detect foo_comserver2 from component list (can also check for other plugins)
+ CLSID clsid;
+ if(S_OK != CLSIDFromProgID(L"Foobar2000.Application.0.7", &clsid)) {
+ g_off = false;
+ SetTimer();
+ }
+ }
+ void on_quit()
+ {
+ if(!g_off && FindWindow(MIRANDA_WINDOWCLASS, NULL) != NULL)
+ SendData(L"0\\0foobar2000\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0");
+ }
+};
+
+static initquit_factory_t<myinitquit> g_myinitquit_factory;
+
+DECLARE_COMPONENT_VERSION("Miranda ListeningTo foobar2000 Plugin",
+"1.1.1",
+"compiled: " __DATE__ " with foo_SDK-2010-10-02\r\n\
+Sending listeningto information to Mitanda IM client\r\n\
+if no foo_comserver2 is present.\r\n\
+Copyright (C) 2006-2010 Ricardo Pescuma Domenecci\r\n\
+http://www.miranda-im.org\r\n\
+http://pescuma.org/miranda/listeningto"
+)
diff --git a/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj b/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj new file mode 100644 index 0000000..0b15bf4 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj @@ -0,0 +1,170 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>listeningto_foo_mlt</ProjectName>
+ <ProjectGuid>{94734E61-D980-4A5F-AAAA-65105755CE24}</ProjectGuid>
+ <RootNamespace>foo_mlt</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/foo_mlt\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">false</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/foo_mlt\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/foo_mlt.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;UNICODE;_UNICODE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0416</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>foobar2000\shared\shared.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(RootNamespace).dll</OutputFile>
+ <ModuleDefinitionFile>
+ </ModuleDefinitionFile>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/foo_mlt.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;UNICODE;_UNICODE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeaderOutputFile>
+ </PrecompiledHeaderOutputFile>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0416</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>foobar2000\shared\shared.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(RootNamespace).dll</OutputFile>
+ <ModuleDefinitionFile>
+ </ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="foo_mlt.cpp">
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ProjectReference Include="foobar2000\foobar2000_component_client\foobar2000_component_client_9.vcxproj">
+ <Project>{71ad2674-065b-48f5-b8b0-e1f9d3892081}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="foobar2000\helpers\foobar2000_sdk_helpers_9.vcxproj">
+ <Project>{ee47764e-a202-4f85-a767-abdab4aff35f}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="foobar2000\SDK\foobar2000_SDK_9.vcxproj">
+ <Project>{e8091321-d79d-4575-86ef-064ea1a4a20d}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ <ProjectReference Include="pfc\pfc_9.vcxproj">
+ <Project>{ebfffb4e-261d-44d3-b89c-957b31a0bf9c}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj.filters b/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj.filters new file mode 100644 index 0000000..bdf1d8e --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj.filters @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{0bd02126-27e3-49b5-99f3-10d24ad96ef0}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{5de911ce-e1d2-4adc-a369-14f580c415cc}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{ca23e9b2-5bcb-4542-974e-7feaf7688083}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="foo_mlt.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj.user b/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foo_mlt_10.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foo_mlt_9.sln b/Plugins/listeningto/players/foo_mlt/foo_mlt_9.sln new file mode 100644 index 0000000..114abb3 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foo_mlt_9.sln @@ -0,0 +1,50 @@ +
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listeningto_foo_mlt", "foo_mlt_9.vcproj", "{94734E61-D980-4A5F-AAAA-65105755CE24}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E8091321-D79D-4575-86EF-064EA1A4A20D} = {E8091321-D79D-4575-86EF-064EA1A4A20D}
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F} = {EE47764E-A202-4F85-A767-ABDAB4AFF35F}
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C} = {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081} = {71AD2674-065B-48F5-B8B0-E1F9D3892081}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listeningto_foo2kSDK_pfc", "pfc\pfc_9.vcproj", "{EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listeningto_foo2kSDK_SDK", "foobar2000\SDK\foobar2000_SDK_9.vcproj", "{E8091321-D79D-4575-86EF-064EA1A4A20D}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listeningto_foo2kSDK_helpers", "foobar2000\helpers\foobar2000_sdk_helpers_9.vcproj", "{EE47764E-A202-4F85-A767-ABDAB4AFF35F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "listeningto_foo2kSDK_component_client", "foobar2000\foobar2000_component_client\foobar2000_component_client_9.vcproj", "{71AD2674-065B-48F5-B8B0-E1F9D3892081}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Unicode|Win32 = Debug Unicode|Win32
+ Release Unicode|Win32 = Release Unicode|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Debug Unicode|Win32.ActiveCfg = Debug|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Debug Unicode|Win32.Build.0 = Debug|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Release Unicode|Win32.ActiveCfg = Release|Win32
+ {94734E61-D980-4A5F-AAAA-65105755CE24}.Release Unicode|Win32.Build.0 = Release|Win32
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Debug Unicode|Win32.ActiveCfg = Debug|Win32
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Debug Unicode|Win32.Build.0 = Debug|Win32
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Release Unicode|Win32.ActiveCfg = Release|Win32
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Release Unicode|Win32.Build.0 = Release|Win32
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Debug Unicode|Win32.ActiveCfg = Debug|Win32
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Debug Unicode|Win32.Build.0 = Debug|Win32
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Release Unicode|Win32.ActiveCfg = Release|Win32
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Release Unicode|Win32.Build.0 = Release|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Debug Unicode|Win32.ActiveCfg = Debug|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Debug Unicode|Win32.Build.0 = Debug|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Release Unicode|Win32.ActiveCfg = Release|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Release Unicode|Win32.Build.0 = Release|Win32
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Debug Unicode|Win32.ActiveCfg = Debug|Win32
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Debug Unicode|Win32.Build.0 = Debug|Win32
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Release Unicode|Win32.ActiveCfg = Release|Win32
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Release Unicode|Win32.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Plugins/listeningto/players/foo_mlt/foo_mlt_9.vcproj b/Plugins/listeningto/players/foo_mlt/foo_mlt_9.vcproj new file mode 100644 index 0000000..9d5e9d1 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foo_mlt_9.vcproj @@ -0,0 +1,245 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="listeningto_foo_mlt"
+ ProjectGUID="{94734E61-D980-4A5F-AAAA-65105755CE24}"
+ RootNamespace="foo_mlt"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/foo_mlt"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/foo_mlt.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;UNICODE;_UNICODE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ PrecompiledHeaderFile=""
+ AssemblerListingLocation=""
+ ObjectFile="$(IntDir)/"
+ ProgramDataBaseFileName="$(IntDir)/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1046"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="foobar2000\shared\shared.lib"
+ OutputFile="$(OutDir)\$(RootNamespace).dll"
+ LinkIncremental="1"
+ ModuleDefinitionFile=""
+ LinkTimeCodeGeneration="1"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ OutputFile="$(OutDir)\$(TargetName).bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/foo_mlt"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/foo_mlt.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;UNICODE;_UNICODE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ PrecompiledHeaderFile=""
+ AssemblerListingLocation=""
+ ObjectFile="$(IntDir)/"
+ ProgramDataBaseFileName="$(IntDir)/"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1046"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="foobar2000\shared\shared.lib"
+ OutputFile="$(OutDir)\$(RootNamespace).dll"
+ LinkIncremental="2"
+ ModuleDefinitionFile=""
+ GenerateDebugInformation="true"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ OutputFile="$(OutDir)\$(TargetName).bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="foo_mlt.cpp"
+ >
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/abort_callback.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/abort_callback.h index 7e65f4e..0d6ea6e 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/abort_callback.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/abort_callback.h @@ -11,21 +11,22 @@ typedef HANDLE abort_callback_event; #error PORTME
#endif
-//! This class is used to signal underlying worker code whether user has decided to abort a potentially time-consuming operation. It is commonly required by all file related operations. Code that receives an abort_callback object should periodically check it and abort any operations being performed if it is signaled, typically giving io_result_aborted return code (see: t_io_result). \n
-//! See abort_callback_impl for implementation.
+//! This class is used to signal underlying worker code whether user has decided to abort a potentially time-consuming operation. It is commonly required by all file related operations. Code that receives an abort_callback object should periodically check it and abort any operations being performed if it is signaled, typically throwing exception_aborted. \n
+//! See abort_callback_impl for an implementation.
class NOVTABLE abort_callback
{
public:
//! Returns whether user has requested the operation to be aborted.
virtual bool is_aborting() const = 0;
- //! Retrieves event object that can be used with some OS calls. The even object becomes signaled when abort is triggered. On win32, this is equivalent to win32 event handle (see: CreateEvent).
+ //! Retrieves event object that can be used with some OS calls. The even object becomes signaled when abort is triggered. On win32, this is equivalent to win32 event handle (see: CreateEvent). \n
+ //! You must not close this handle or call any methods that change this handle's state (SetEvent() or ResetEvent()), you can only wait for it.
virtual abort_callback_event get_abort_event() const = 0;
//! Checks if user has requested the operation to be aborted, and throws exception_aborted if so.
void check() const;
- //! For compatibility with old code.
+ //! For compatibility with old code. Do not call.
inline void check_e() const {check();}
@@ -65,8 +66,15 @@ private: #endif
};
+//! Dummy abort_callback that never gets aborted. Slightly more efficient than the regular one especially when you need to regularly create temporary instances of it.
+class abort_callback_dummy : public abort_callback {
+public:
+ bool is_aborting() const { return false; }
+
+ abort_callback_event get_abort_event() const { return GetInfiniteWaitEvent();}
+};
}
using namespace foobar2000_io;
-#endif //_foobar2000_sdk_abort_callback_h_
\ No newline at end of file +#endif //_foobar2000_sdk_abort_callback_h_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/advconfig.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/advconfig.cpp new file mode 100644 index 0000000..301f82a --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/advconfig.cpp @@ -0,0 +1,39 @@ +#include "foobar2000.h"
+
+
+t_uint32 advconfig_entry::get_preferences_flags_() {
+ {
+ advconfig_entry_string_v2::ptr ex;
+ if (service_query_t(ex)) return ex->get_preferences_flags();
+ }
+ {
+ advconfig_entry_checkbox_v2::ptr ex;
+ if (service_query_t(ex)) return ex->get_preferences_flags();
+ }
+ return 0;
+}
+
+bool advconfig_entry_checkbox::get_default_state_() {
+ {
+ advconfig_entry_checkbox_v2::ptr ex;
+ if (service_query_t(ex)) return ex->get_default_state();
+ }
+
+ bool backup = get_state();
+ reset();
+ bool rv = get_state();
+ set_state(backup);
+ return rv;
+}
+
+void advconfig_entry_string::get_default_state_(pfc::string_base & out) {
+ {
+ advconfig_entry_string_v2::ptr ex;
+ if (service_query_t(ex)) {ex->get_default_state(out); return;}
+ }
+ pfc::string8 backup;
+ get_state(backup);
+ reset();
+ get_state(out);
+ set_state(backup);
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/advconfig.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/advconfig.h index 78519b0..60961ec 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/advconfig.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/advconfig.h @@ -1,7 +1,7 @@ -#ifndef _FOOBAR2000_SDK_ADVCONFIG_H_
-#define _FOOBAR2000_SDK_ADVCONFIG_H_
-
-class advconfig_entry : public service_base {
+//! Entrypoint class for adding items to Advanced Preferences page. \n
+//! Implementations must derive from one of subclasses: advconfig_branch, advconfig_entry_checkbox, advconfig_entry_string. \n
+//! Implementations are typically registered using static service_factory_single_t<myclass>, or using provided helper classes in case of standard implementations declared in this header.
+class NOVTABLE advconfig_entry : public service_base {
public:
virtual void get_name(pfc::string_base & p_out) = 0;
virtual GUID get_guid() = 0;
@@ -9,32 +9,56 @@ public: virtual void reset() = 0;
virtual double get_sort_priority() = 0;
+ t_uint32 get_preferences_flags_();
+
+ static bool g_find(service_ptr_t<advconfig_entry>& out, const GUID & id) {
+ service_enum_t<advconfig_entry> e; service_ptr_t<advconfig_entry> ptr; while(e.next(ptr)) { if (ptr->get_guid() == id) {out = ptr; return true;} } return false;
+ }
+
static const GUID guid_root;
static const GUID guid_branch_tagging,guid_branch_decoding,guid_branch_tools,guid_branch_playback,guid_branch_display;
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(advconfig_entry);
};
-class advconfig_branch : public advconfig_entry {
+//! Creates a new branch in Advanced Preferences. \n
+//! Implementation: see advconfig_branch_impl / advconfig_branch_factory.
+class NOVTABLE advconfig_branch : public advconfig_entry {
public:
FB2K_MAKE_SERVICE_INTERFACE(advconfig_branch,advconfig_entry);
};
-class advconfig_entry_checkbox : public advconfig_entry {
+//! Creates a checkbox/radiocheckbox entry in Advanced Preferences. \n
+//! The difference between checkboxes and radiocheckboxes is different icon (obviously) and that checking a radiocheckbox unchecks all other radiocheckboxes in the same branch. \n
+//! Implementation: see advconfig_entry_checkbox_impl / advconfig_checkbox_factory_t.
+class NOVTABLE advconfig_entry_checkbox : public advconfig_entry {
public:
virtual bool get_state() = 0;
virtual void set_state(bool p_state) = 0;
virtual bool is_radio() = 0;
+ bool get_default_state_();
+
FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_checkbox,advconfig_entry);
};
-class advconfig_entry_string : public advconfig_entry {
+class NOVTABLE advconfig_entry_checkbox_v2 : public advconfig_entry_checkbox {
+ FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_checkbox_v2, advconfig_entry_checkbox)
+public:
+ virtual bool get_default_state() = 0;
+ virtual t_uint32 get_preferences_flags() {return 0;} //signals whether changing this setting should trigger playback restart or app restart; see: preferences_state::* constants
+};
+
+//! Creates a string/integer editbox entry in Advanced Preferences.\n
+//! Implementation: see advconfig_entry_string_impl / advconfig_string_factory.
+class NOVTABLE advconfig_entry_string : public advconfig_entry {
public:
virtual void get_state(pfc::string_base & p_out) = 0;
- virtual void set_state(const char * p_string,t_size p_length = infinite) = 0;
+ virtual void set_state(const char * p_string,t_size p_length = ~0) = 0;
virtual t_uint32 get_flags() = 0;
+ void get_default_state_(pfc::string_base & out);
+
enum {
flag_is_integer = 1 << 0,
flag_is_signed = 1 << 1,
@@ -43,7 +67,17 @@ public: FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_string,advconfig_entry);
};
+class NOVTABLE advconfig_entry_string_v2 : public advconfig_entry_string {
+ FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_string_v2, advconfig_entry_string)
+public:
+ virtual void get_default_state(pfc::string_base & out) = 0;
+ virtual void validate(pfc::string_base & val) {}
+ virtual t_uint32 get_preferences_flags() {return 0;} //signals whether changing this setting should trigger playback restart or app restart; see: preferences_state::* constants
+};
+
+//! Standard implementation of advconfig_branch. \n
+//! Usage: no need to use this class directly - use advconfig_branch_factory instead.
class advconfig_branch_impl : public advconfig_branch {
public:
advconfig_branch_impl(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority) : m_name(p_name), m_guid(p_guid), m_parent(p_parent), m_priority(p_priority) {}
@@ -58,8 +92,10 @@ private: const double m_priority;
};
+//! Standard implementation of advconfig_entry_checkbox. \n
+//! p_is_radio parameter controls whether we're implementing a checkbox or a radiocheckbox (see advconfig_entry_checkbox description for more details).
template<bool p_is_radio = false>
-class advconfig_entry_checkbox_impl : public advconfig_entry_checkbox {
+class advconfig_entry_checkbox_impl : public advconfig_entry_checkbox_v2 {
public:
advconfig_entry_checkbox_impl(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,bool p_initialstate)
: m_name(p_name), m_initialstate(p_initialstate), m_state(p_guid,p_initialstate), m_parent(p_parent), m_priority(p_priority) {}
@@ -72,6 +108,9 @@ public: void set_state(bool p_state) {m_state = p_state;}
bool is_radio() {return p_is_radio;}
double get_sort_priority() {return m_priority;}
+ bool get_state_() const {return m_state;}
+ bool get_default_state() {return m_initialstate;}
+ bool get_default_state_() const {return m_initialstate;}
private:
pfc::string8 m_name;
const bool m_initialstate;
@@ -80,78 +119,119 @@ private: const double m_priority;
};
+//! Service factory helper around standard advconfig_branch implementation. Use this class to register your own Advanced Preferences branches. \n
+//! Usage: static advconfig_branch_factory mybranch(name, branchID, parentBranchID, priority);
class advconfig_branch_factory : public service_factory_single_t<advconfig_branch_impl> {
public:
advconfig_branch_factory(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority)
: service_factory_single_t<advconfig_branch_impl>(p_name,p_guid,p_parent,p_priority) {}
};
+//! Service factory helper around standard advconfig_entry_checkbox implementation. Use this class to register your own Advanced Preferences checkbox/radiocheckbox entries. \n
+//! Usage: static advconfig_entry_checkbox<isRadioBox> mybox(name, itemID, parentID, priority, initialstate);
template<bool p_is_radio>
class advconfig_checkbox_factory_t : public service_factory_single_t<advconfig_entry_checkbox_impl<p_is_radio> > {
public:
advconfig_checkbox_factory_t(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,bool p_initialstate)
: service_factory_single_t<advconfig_entry_checkbox_impl<p_is_radio> >(p_name,p_guid,p_parent,p_priority,p_initialstate) {}
+
+ bool get() const {return get_static_instance().get_state_();}
+ void set(bool val) {get_static_instance().set_state(val);}
+ operator bool() const {return get();}
+ bool operator=(bool val) {set(val); return val;}
};
+//! Service factory helper around standard advconfig_entry_checkbox implementation, specialized for checkboxes (rather than radiocheckboxes). See advconfig_checkbox_factory_t<> for more details.
typedef advconfig_checkbox_factory_t<false> advconfig_checkbox_factory;
+//! Service factory helper around standard advconfig_entry_checkbox implementation, specialized for radiocheckboxes (rather than standard checkboxes). See advconfig_checkbox_factory_t<> for more details.
typedef advconfig_checkbox_factory_t<true> advconfig_radio_factory;
-class advconfig_entry_string_impl : public advconfig_entry_string {
+
+//! Standard advconfig_entry_string implementation. Use advconfig_string_factory to register your own string entries in Advanced Preferences instead of using this class directly.
+class advconfig_entry_string_impl : public advconfig_entry_string_v2 {
public:
- advconfig_entry_string_impl(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate)
- : m_name(p_name), m_parent(p_parent), m_priority(p_priority), m_initialstate(p_initialstate), m_state(p_guid,p_initialstate) {}
- void get_name(pfc::string_base & p_out) {p_out = m_name;}//{p_out = pfc::string_formatter() << m_name << " : " << m_state;}
+ advconfig_entry_string_impl(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate, t_uint32 p_prefFlags)
+ : m_name(p_name), m_parent(p_parent), m_priority(p_priority), m_initialstate(p_initialstate), m_state(p_guid,p_initialstate), m_prefFlags(p_prefFlags) {}
+ void get_name(pfc::string_base & p_out) {p_out = m_name;}
GUID get_guid() {return m_state.get_guid();}
GUID get_parent() {return m_parent;}
void reset() {core_api::ensure_main_thread();m_state = m_initialstate;}
double get_sort_priority() {return m_priority;}
void get_state(pfc::string_base & p_out) {core_api::ensure_main_thread();p_out = m_state;}
- void set_state(const char * p_string,t_size p_length = infinite) {core_api::ensure_main_thread();m_state.set_string(p_string,p_length);}
+ void set_state(const char * p_string,t_size p_length = ~0) {core_api::ensure_main_thread();m_state.set_string(p_string,p_length);}
t_uint32 get_flags() {return 0;}
+ void get_default_state(pfc::string_base & out) {out = m_initialstate;}
+ t_uint32 get_preferences_flags() {return m_prefFlags;}
private:
const pfc::string8 m_initialstate, m_name;
cfg_string m_state;
const double m_priority;
const GUID m_parent;
+ const t_uint32 m_prefFlags;
};
+//! Service factory helper around standard advconfig_entry_string implementation. Use this class to register your own string entries in Advanced Preferences. \n
+//! Usage: static advconfig_string_factory mystring(name, itemID, branchID, priority, initialValue);
class advconfig_string_factory : public service_factory_single_t<advconfig_entry_string_impl> {
public:
- advconfig_string_factory(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate)
- : service_factory_single_t<advconfig_entry_string_impl>(p_name,p_guid,p_parent,p_priority,p_initialstate) {}
+ advconfig_string_factory(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate, t_uint32 p_prefFlags = 0)
+ : service_factory_single_t<advconfig_entry_string_impl>(p_name,p_guid,p_parent,p_priority,p_initialstate, p_prefFlags) {}
+
+ void get(pfc::string_base & out) {get_static_instance().get_state(out);}
+ void set(const char * in) {get_static_instance().set_state(in);}
};
-class advconfig_entry_integer_impl : public advconfig_entry_string {
+//! Special advconfig_entry_string implementation - implements integer entries. Use advconfig_integer_factory to register your own integer entries in Advanced Preferences instead of using this class directly.
+class advconfig_entry_integer_impl : public advconfig_entry_string_v2 {
public:
- advconfig_entry_integer_impl(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,t_uint64 p_initialstate,t_uint64 p_min,t_uint64 p_max)
- : m_name(p_name), m_parent(p_parent), m_priority(p_priority), m_initval(p_initialstate), m_min(p_min), m_max(p_max), m_state(p_guid,p_initialstate) {}
+ advconfig_entry_integer_impl(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,t_uint64 p_initialstate,t_uint64 p_min,t_uint64 p_max, t_uint32 p_prefFlags)
+ : m_name(p_name), m_parent(p_parent), m_priority(p_priority), m_initval(p_initialstate), m_min(p_min), m_max(p_max), m_state(p_guid,p_initialstate), m_prefFlags(p_prefFlags) {}
void get_name(pfc::string_base & p_out) {p_out = m_name;}
GUID get_guid() {return m_state.get_guid();}
GUID get_parent() {return m_parent;}
void reset() {m_state = m_initval;}
double get_sort_priority() {return m_priority;}
void get_state(pfc::string_base & p_out) {p_out = pfc::format_uint(m_state.get_value());}
- void set_state(const char * p_string,t_size p_length) {m_state = pfc::clip_t<t_uint64>(pfc::atoui64_ex(p_string,p_length),m_min,m_max);}
+ void set_state(const char * p_string,t_size p_length) {set_state_int(pfc::atoui64_ex(p_string,p_length));}
t_uint32 get_flags() {return advconfig_entry_string::flag_is_integer;}
t_uint64 get_state_int() const {return m_state;}
+ void set_state_int(t_uint64 val) {m_state = pfc::clip_t<t_uint64>(val,m_min,m_max);}
+
+ void get_default_state(pfc::string_base & out) {
+ out = pfc::format_uint(m_initval);
+ }
+ void validate(pfc::string_base & val) {
+ val = pfc::format_uint( pfc::clip_t<t_uint64>(pfc::atoui64_ex(val,~0), m_min, m_max) );
+ }
+ t_uint32 get_preferences_flags() {return m_prefFlags;}
private:
cfg_int_t<t_uint64> m_state;
const double m_priority;
const t_uint64 m_initval, m_min, m_max;
const GUID m_parent;
const pfc::string8 m_name;
+ const t_uint32 m_prefFlags;
};
+//! Service factory helper around integer-specialized advconfig_entry_string implementation. Use this class to register your own integer entries in Advanced Preferences. \n
+//! Usage: static advconfig_integer_factory myint(name, itemID, parentID, priority, initialValue, minValue, maxValue);
class advconfig_integer_factory : public service_factory_single_t<advconfig_entry_integer_impl> {
public:
- advconfig_integer_factory(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,t_uint64 p_initialstate,t_uint64 p_min,t_uint64 p_max)
- : service_factory_single_t<advconfig_entry_integer_impl>(p_name,p_guid,p_parent,p_priority,p_initialstate,p_min,p_max) {}
+ advconfig_integer_factory(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,t_uint64 p_initialstate,t_uint64 p_min,t_uint64 p_max, t_uint32 p_prefFlags = 0)
+ : service_factory_single_t<advconfig_entry_integer_impl>(p_name,p_guid,p_parent,p_priority,p_initialstate,p_min,p_max,p_prefFlags) {}
+
+ t_uint64 get() const {return get_static_instance().get_state_int();}
+ void set(t_uint64 val) {get_static_instance().set_state_int(val);}
+
+ operator t_uint64() const {return get();}
+ t_uint64 operator=(t_uint64 val) {set(val); return val;}
};
-class advconfig_entry_enum : public advconfig_entry {
+//! Not currently used, reserved for future use.
+class NOVTABLE advconfig_entry_enum : public advconfig_entry {
public:
virtual t_size get_value_count() = 0;
virtual void enum_value(pfc::string_base & p_out,t_size p_index) = 0;
@@ -161,4 +241,64 @@ public: FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_enum,advconfig_entry);
};
-#endif //_FOOBAR2000_SDK_ADVCONFIG_H_
\ No newline at end of file +
+
+
+//! Special version if advconfig_entry_string_impl that allows the value to be retrieved from worker threads.
+class advconfig_entry_string_impl_MT : public advconfig_entry_string_v2 {
+public:
+ advconfig_entry_string_impl_MT(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate, t_uint32 p_prefFlags)
+ : m_name(p_name), m_parent(p_parent), m_priority(p_priority), m_initialstate(p_initialstate), m_state(p_guid,p_initialstate), m_prefFlags(p_prefFlags) {}
+ void get_name(pfc::string_base & p_out) {p_out = m_name;}
+ GUID get_guid() {return m_state.get_guid();}
+ GUID get_parent() {return m_parent;}
+ void reset() {
+ insync(m_sync);
+ m_state = m_initialstate;
+ }
+ double get_sort_priority() {return m_priority;}
+ void get_state(pfc::string_base & p_out) {
+ insync(m_sync);
+ p_out = m_state;
+ }
+ void set_state(const char * p_string,t_size p_length = ~0) {
+ insync(m_sync);
+ m_state.set_string(p_string,p_length);
+ }
+ t_uint32 get_flags() {return 0;}
+ void get_default_state(pfc::string_base & out) {out = m_initialstate;}
+ t_uint32 get_preferences_flags() {return m_prefFlags;}
+private:
+ const pfc::string8 m_initialstate, m_name;
+ cfg_string m_state;
+ critical_section m_sync;
+ const double m_priority;
+ const GUID m_parent;
+ const t_uint32 m_prefFlags;
+};
+
+//! Special version if advconfig_string_factory that allows the value to be retrieved from worker threads.
+class advconfig_string_factory_MT : public service_factory_single_t<advconfig_entry_string_impl_MT> {
+public:
+ advconfig_string_factory_MT(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate, t_uint32 p_prefFlags = 0)
+ : service_factory_single_t<advconfig_entry_string_impl_MT>(p_name,p_guid,p_parent,p_priority,p_initialstate, p_prefFlags) {}
+
+ void get(pfc::string_base & out) {get_static_instance().get_state(out);}
+ void set(const char * in) {get_static_instance().set_state(in);}
+};
+
+
+
+
+/*
+ Advanced Preferences variable declaration examples
+
+ static advconfig_string_factory mystring("name goes here",myguid,parentguid,0,"asdf");
+ to retrieve state: pfc::string8 val; mystring.get(val);
+
+ static advconfig_checkbox_factory mycheckbox("name goes here",myguid,parentguid,0,false);
+ to retrieve state: mycheckbox.get();
+
+ static advconfig_integer_factory myint("name goes here",myguid,parentguid,0,initialValue,minimumValue,maximumValue);
+ to retrieve state: myint.get();
+*/
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/album_art.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/album_art.cpp new file mode 100644 index 0000000..1fea648 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/album_art.cpp @@ -0,0 +1,17 @@ +#include "foobar2000.h"
+
+bool album_art_editor::g_get_interface(service_ptr_t<album_art_editor> & out,const char * path) {
+ service_enum_t<album_art_editor> e; ptr ptr;
+ pfc::string_extension ext(path);
+ while(e.next(ptr)) {
+ if (ptr->is_our_path(path,ext)) {
+ out = ptr; return true;
+ }
+ }
+ return false;
+}
+
+bool album_art_editor::g_is_supported_path(const char * path) {
+ ptr ptr;
+ return g_get_interface(ptr,path);
+}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/album_art.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/album_art.h new file mode 100644 index 0000000..12ba928 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/album_art.h @@ -0,0 +1,313 @@ +//! Common class for handling picture data. \n
+//! Type of contained picture data is unknown and to be determined according to memory block contents by code parsing/rendering the picture. Commonly encountered types are: BMP, PNG, JPEG and GIF. \n
+//! Implementation: use album_art_data_impl.
+class NOVTABLE album_art_data : public service_base {
+public:
+ //! Retrieves a pointer to a memory block containing the picture.
+ virtual const void * get_ptr() const = 0;
+ //! Retrieves size of the memory block containing the picture.
+ virtual t_size get_size() const = 0;
+
+ //! Determine whether two album_art_data objects store the same picture data.
+ static bool equals(album_art_data const & v1, album_art_data const & v2) {
+ const t_size s = v1.get_size();
+ if (s != v2.get_size()) return false;
+ return memcmp(v1.get_ptr(), v2.get_ptr(),s) == 0;
+ }
+ bool operator==(const album_art_data & other) const {return equals(*this,other);}
+ bool operator!=(const album_art_data & other) const {return !equals(*this,other);}
+
+ FB2K_MAKE_SERVICE_INTERFACE(album_art_data,service_base);
+};
+
+typedef service_ptr_t<album_art_data> album_art_data_ptr;
+
+//! Implements album_art_data.
+class album_art_data_impl : public album_art_data {
+public:
+ const void * get_ptr() const {return m_content.get_ptr();}
+ t_size get_size() const {return m_content.get_size();}
+
+ void * get_ptr() {return m_content.get_ptr();}
+ void set_size(t_size p_size) {m_content.set_size(p_size);}
+
+ //! Reads picture data from the specified stream object.
+ void from_stream(stream_reader * p_stream,t_size p_bytes,abort_callback & p_abort) {
+ set_size(p_bytes); p_stream->read_object(get_ptr(),p_bytes,p_abort);
+ }
+
+ //! Creates an album_art_data object from picture data contained in a memory buffer.
+ static album_art_data_ptr g_create(const void * p_buffer,t_size p_bytes) {
+ service_ptr_t<album_art_data_impl> instance = new service_impl_t<album_art_data_impl>();
+ instance->set_size(p_bytes);
+ memcpy(instance->get_ptr(),p_buffer,p_bytes);
+ return instance;
+ }
+ //! Creates an album_art_data object from picture data contained in a stream.
+ static album_art_data_ptr g_create(stream_reader * p_stream,t_size p_bytes,abort_callback & p_abort) {
+ service_ptr_t<album_art_data_impl> instance = new service_impl_t<album_art_data_impl>();
+ instance->from_stream(p_stream,p_bytes,p_abort);
+ return instance;
+ }
+
+private:
+ pfc::array_t<t_uint8> m_content;
+};
+
+//! Namespace containing identifiers of album art types.
+namespace album_art_ids {
+ //! Front cover.
+ static const GUID cover_front = { 0xf1e66f4e, 0xfe09, 0x4b94, { 0x91, 0xa3, 0x67, 0xc2, 0x3e, 0xd1, 0x44, 0x5e } };
+ //! Back cover.
+ static const GUID cover_back = { 0xcb552d19, 0x86d5, 0x434c, { 0xac, 0x77, 0xbb, 0x24, 0xed, 0x56, 0x7e, 0xe4 } };
+ //! Picture of a disc or other storage media.
+ static const GUID disc = { 0x3dba9f36, 0xf928, 0x4fa4, { 0x87, 0x9c, 0xd3, 0x40, 0x47, 0x59, 0x58, 0x7e } };
+ //! Album-specific icon (NOT a file type icon).
+ static const GUID icon = { 0x74cdf5b4, 0x7053, 0x4b3d, { 0x9a, 0x3c, 0x54, 0x69, 0xf5, 0x82, 0x6e, 0xec } };
+ //! Artist picture.
+ static const GUID artist = { 0x9a654042, 0xacd1, 0x43f7, { 0xbf, 0xcf, 0xd3, 0xec, 0xf, 0xfe, 0x40, 0xfa } };
+
+};
+
+PFC_DECLARE_EXCEPTION(exception_album_art_not_found,exception_io_not_found,"Album Art Not Found");
+PFC_DECLARE_EXCEPTION(exception_album_art_unsupported_entry,exception_io_data,"Unsupported Album Art Entry");
+
+//! Class encapsulating access to album art stored in a media file. Use album_art_extractor class obtain album_art_extractor_instance referring to specified media file.
+class NOVTABLE album_art_extractor_instance : public service_base {
+public:
+ //! Throws exception_album_art_not_found when the requested album art entry could not be found in the referenced media file.
+ virtual album_art_data_ptr query(const GUID & p_what,abort_callback & p_abort) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(album_art_extractor_instance,service_base);
+};
+
+//! Class encapsulating access to album art stored in a media file. Use album_art_editor class to obtain album_art_editor_instance referring to specified media file.
+class NOVTABLE album_art_editor_instance : public album_art_extractor_instance {
+public:
+ //! Throws exception_album_art_unsupported_entry when the file format we're dealing with does not support specific entry.
+ virtual void set(const GUID & p_what,album_art_data_ptr p_data,abort_callback & p_abort) = 0;
+
+ //! Removes the requested entry. Fails silently when the entry doesn't exist.
+ virtual void remove(const GUID & p_what) = 0;
+
+ //! Finalizes file tag update operation.
+ virtual void commit(abort_callback & p_abort) = 0;
+
+
+ FB2K_MAKE_SERVICE_INTERFACE(album_art_editor_instance,album_art_extractor_instance);
+};
+
+typedef service_ptr_t<album_art_extractor_instance> album_art_extractor_instance_ptr;
+typedef service_ptr_t<album_art_editor_instance> album_art_editor_instance_ptr;
+
+//! Entrypoint class for accessing album art extraction functionality. Register your own implementation to allow album art extraction from your media file format. \n
+//! If you want to extract album art from a media file, it's recommended that you use album_art_manager API instead of calling album_art_extractor directly.
+class NOVTABLE album_art_extractor : public service_base {
+public:
+ //! Returns whether the specified file is one of formats supported by our album_art_extractor implementation.
+ //! @param p_path Path to file being queried.
+ //! @param p_extension Extension of file being queried (also present in p_path parameter) - provided as a separate parameter for performance reasons.
+ virtual bool is_our_path(const char * p_path,const char * p_extension) = 0;
+
+ //! Instantiates album_art_extractor_instance providing access to album art stored in a specified media file. \n
+ //! Throws one of I/O exceptions on failure; exception_album_art_not_found when the file has no album art record at all.
+ //! @param p_filehint Optional; specifies a file interface to use for accessing the specified file; can be null - in that case, the implementation will open and close the file internally.
+ virtual album_art_extractor_instance_ptr open(file_ptr p_filehint,const char * p_path,abort_callback & p_abort) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(album_art_extractor);
+};
+
+//! Entrypoint class for accessing album art editing functionality. Register your own implementation to allow album art editing on your media file format.
+class NOVTABLE album_art_editor : public service_base {
+public:
+ //! Returns whether the specified file is one of formats supported by our album_art_editor implementation.
+ //! @param p_path Path to file being queried.
+ //! @param p_extension Extension of file being queried (also present in p_path parameter) - provided as a separate parameter for performance reasons.
+ virtual bool is_our_path(const char * p_path,const char * p_extension) = 0;
+
+ //! Instantiates album_art_editor_instance providing access to album art stored in a specified media file. \n
+ //! @param p_filehint Optional; specifies a file interface to use for accessing the specified file; can be null - in that case, the implementation will open and close the file internally.
+ virtual album_art_editor_instance_ptr open(file_ptr p_filehint,const char * p_path,abort_callback & p_abort) = 0;
+
+ //! Helper; attempts to retrieve an album_art_editor service pointer that supports the specified file.
+ //! @returns True on success, false on failure (no registered album_art_editor supports this file type).
+ static bool g_get_interface(service_ptr_t<album_art_editor> & out,const char * path);
+ //! Helper; returns whether one of registered album_art_editor implementations is capable of opening the specified file.
+ static bool g_is_supported_path(const char * path);
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(album_art_editor);
+};
+
+//! Primary API for interfacing with foobar2000 core's album art extraction functionality. \n
+//! Use static_api_ptr_t<album_art_manager>()->instantiate() to obtain a pointer to album_art_manager_instance. \n
+//! The main difference between using album_art_manager_instance and calling album_art_extractor methods directly is that
+//! album_art_manager_instance will fall back to returning pictures found in the folder containing the specified media file
+//! in case requested album art entries can't be extracted from the media file itself.
+class NOVTABLE album_art_manager_instance : public service_base {
+public:
+ //! @returns True when the newly requested file has different album art than the old one, false when album art we're referencing is the same as before.
+ virtual bool open(const char * p_file,abort_callback & p_abort) = 0;
+ //! Resets internal data.
+ virtual void close() = 0;
+
+ //! Queries album art data for currently open media file. Throws exception_album_art_not_found when the requested album art entry isn't present.
+ virtual album_art_data_ptr query(const GUID & p_what,abort_callback & p_abort) = 0;
+
+ //! Queries for stub image to display when there's no album art to show. \n
+ //! May fail with exception_album_art_not_found as well when we have no stub image configured.
+ virtual album_art_data_ptr query_stub_image(abort_callback & p_abort) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(album_art_manager_instance,service_base);
+};
+
+typedef service_ptr_t<album_art_manager_instance> album_art_manager_instance_ptr;
+
+//! Entrypoint API for accessing album art loading functionality provided by foobar2000 core. Usage: static_api_ptr_t<album_art_manager>. \n
+//! This API was introduced in 0.9.5.
+class NOVTABLE album_art_manager : public service_base {
+public:
+ virtual album_art_manager_instance_ptr instantiate() = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(album_art_manager);
+};
+
+
+//! Helper - simple implementation of album_art_extractor_instance.
+class album_art_extractor_instance_simple : public album_art_extractor_instance {
+public:
+ void set(const GUID & p_what,album_art_data_ptr p_content) {m_content.set(p_what,p_content);}
+ bool have_item(const GUID & p_what) {return m_content.have_item(p_what);}
+ album_art_data_ptr query(const GUID & p_what,abort_callback & p_abort) {
+ album_art_data_ptr temp;
+ if (!m_content.query(p_what,temp)) throw exception_album_art_not_found();
+ return temp;
+ }
+ bool is_empty() const {return m_content.get_count() == 0;}
+ bool remove(const GUID & p_what) {
+ return m_content.remove(p_what);
+ }
+private:
+ pfc::map_t<GUID,album_art_data_ptr> m_content;
+};
+
+//! Helper API for extracting album art from APEv2 tags - introduced in 0.9.5.
+class NOVTABLE tag_processor_album_art_utils : public service_base {
+public:
+
+ //! Throws one of I/O exceptions on failure; exception_album_art_not_found when the file has no album art record at all.
+ virtual album_art_extractor_instance_ptr open(file_ptr p_file,abort_callback & p_abort) = 0;
+
+ //! Currently not implemented. Reserved for future use.
+ virtual album_art_editor_instance_ptr edit(file_ptr p_file,abort_callback & p_abort) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(tag_processor_album_art_utils)
+};
+
+//! Helper implementation of album_art_extractor - reads album art from arbitrary file formats that comply with APEv2 tagging specification.
+class album_art_extractor_impl_stdtags : public album_art_extractor {
+public:
+ //! @param exts Semicolon-separated list of file format extensions to support.
+ album_art_extractor_impl_stdtags(const char * exts) {
+ pfc::splitStringSimple_toList(m_extensions,';',exts);
+ }
+
+ bool is_our_path(const char * p_path,const char * p_extension) {
+ return m_extensions.have_item(p_extension);
+ }
+
+ album_art_extractor_instance_ptr open(file_ptr p_filehint,const char * p_path,abort_callback & p_abort) {
+ PFC_ASSERT( is_our_path(p_path, pfc::string_extension(p_path) ) );
+ file_ptr l_file ( p_filehint );
+ if (l_file.is_empty()) filesystem::g_open_read(l_file, p_path, p_abort);
+ return static_api_ptr_t<tag_processor_album_art_utils>()->open( l_file, p_abort );
+ }
+private:
+ pfc::avltree_t<pfc::string,pfc::string::comparatorCaseInsensitiveASCII> m_extensions;
+};
+
+
+
+//! Helper - a more advanced implementation of album_art_extractor_instance.
+class album_art_extractor_instance_fileref : public album_art_extractor_instance {
+public:
+ album_art_extractor_instance_fileref(file::ptr f) : m_file(f) {}
+
+ void set(const GUID & p_what,t_filesize p_offset, t_filesize p_size) {
+ const t_fileref ref = {p_offset, p_size};
+ m_data.set(p_what, ref);
+ m_cache.remove(p_what);
+ }
+
+ bool have_item(const GUID & p_what) {
+ return m_data.have_item(p_what);
+ }
+
+ album_art_data_ptr query(const GUID & p_what,abort_callback & p_abort) {
+ album_art_data_ptr item;
+ if (m_cache.query(p_what,item)) return item;
+ t_fileref ref;
+ if (!m_data.query(p_what, ref)) throw exception_album_art_not_found();
+ m_file->seek(ref.m_offset, p_abort);
+ item = album_art_data_impl::g_create(m_file.get_ptr(), pfc::downcast_guarded<t_size>(ref.m_size), p_abort);
+ m_cache.set(p_what, item);
+ return item;
+ }
+ bool is_empty() const {return m_data.get_count() == 0;}
+private:
+ struct t_fileref {
+ t_filesize m_offset, m_size;
+ };
+ const file::ptr m_file;
+ pfc::map_t<GUID, t_fileref> m_data;
+ pfc::map_t<GUID, album_art_data::ptr> m_cache;
+};
+
+
+class NOVTABLE album_art_path_list : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(album_art_path_list, service_base)
+public:
+ virtual const char * get_path(t_size index) const = 0;
+ virtual t_size get_count() const = 0;
+};
+
+class album_art_path_list_impl : public album_art_path_list {
+public:
+ template<typename t_in> album_art_path_list_impl(const t_in & in) {pfc::list_to_array(m_data, in);}
+ const char * get_path(t_size index) const {return m_data[index];}
+ t_size get_count() const {return m_data.get_size();}
+private:
+ pfc::array_t<pfc::string8> m_data;
+};
+
+class album_art_path_list_dummy : public album_art_path_list {
+public:
+ const char * get_path(t_size index) const {uBugCheck();}
+ t_size get_count() const {return 0;}
+};
+
+class NOVTABLE album_art_extractor_instance_v2 : public album_art_extractor_instance {
+ FB2K_MAKE_SERVICE_INTERFACE(album_art_extractor_instance_v2, album_art_extractor_instance)
+public:
+ virtual album_art_path_list::ptr query_paths(const GUID & p_what, abort_callback & p_abort) = 0;
+};
+
+
+
+//! \since 1.0
+class NOVTABLE album_art_manager_v2 : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(album_art_manager_v2)
+public:
+ //! Instantiates an album art extractor object for the specified group of items.
+ virtual album_art_extractor_instance_v2::ptr open(metadb_handle_list_cref items, pfc::list_base_const_t<GUID> const & ids, abort_callback & abort) = 0;
+
+ //! Instantiates an album art extractor object that retrieves stub images.
+ virtual album_art_extractor_instance_v2::ptr open_stub(abort_callback & abort) = 0;
+};
+
+
+//! \since 1.0
+class NOVTABLE album_art_fallback : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(album_art_fallback)
+public:
+ virtual album_art_extractor_instance_v2::ptr open(metadb_handle_list_cref items, pfc::list_base_const_t<GUID> const & ids, abort_callback & abort) = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/app_close_blocker.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/app_close_blocker.h index 2669ea5..10437d8 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/app_close_blocker.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/app_close_blocker.h @@ -1,8 +1,4 @@ -#ifndef _APP_CLOSE_BLOCKER_H_
-#define _APP_CLOSE_BLOCKER_H_
-
-
-//! This service is used to signal whether something is currently preventing main window from being closed and app from being shut down.
+//! (DEPRECATED) This service is used to signal whether something is currently preventing main window from being closed and app from being shut down.
class NOVTABLE app_close_blocker : public service_base
{
public:
@@ -15,4 +11,55 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(app_close_blocker);
};
-#endif //_APP_CLOSE_BLOCKER_H_
\ No newline at end of file +//! An interface encapsulating a task preventing the foobar2000 application from being closed. Instances of this class need to be registered using app_close_blocking_task_manager methods. \n
+//! Implementation: it's recommended that you derive from app_close_blocking_task_impl class instead of deriving from app_close_blocking_task directly, it manages registration/unregistration behind-the-scenes.
+class NOVTABLE app_close_blocking_task {
+public:
+ virtual void query_task_name(pfc::string_base & out) = 0;
+
+protected:
+ app_close_blocking_task() {}
+ ~app_close_blocking_task() {}
+
+ PFC_CLASS_NOT_COPYABLE_EX(app_close_blocking_task);
+};
+
+//! Entrypoint class for registering app_close_blocking_task instances. Introduced in 0.9.5.1. \n
+//! Usage: static_api_ptr_t<app_close_blocking_task_manager>(). May fail if user runs pre-0.9.5.1. It's recommended that you use app_close_blocking_task_impl class instead of calling app_close_blocking_task_manager directly.
+class NOVTABLE app_close_blocking_task_manager : public service_base {
+public:
+ virtual void register_task(app_close_blocking_task * task) = 0;
+ virtual void unregister_task(app_close_blocking_task * task) = 0;
+
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(app_close_blocking_task_manager);
+};
+
+//! Helper; implements standard functionality required by app_close_blocking_task implementations - registers/unregisters the task on construction/destruction.
+class app_close_blocking_task_impl : public app_close_blocking_task {
+public:
+ app_close_blocking_task_impl() { static_api_ptr_t<app_close_blocking_task_manager>()->register_task(this);}
+ ~app_close_blocking_task_impl() { static_api_ptr_t<app_close_blocking_task_manager>()->unregister_task(this);}
+
+ void query_task_name(pfc::string_base & out) { out = "<unnamed task>"; }
+};
+
+class app_close_blocking_task_impl_dynamic : public app_close_blocking_task {
+public:
+ app_close_blocking_task_impl_dynamic() : m_taskActive() {}
+ ~app_close_blocking_task_impl_dynamic() { toggle_blocking(false); }
+
+ void query_task_name(pfc::string_base & out) { out = "<unnamed task>"; }
+
+protected:
+ void toggle_blocking(bool state) {
+ if (state != m_taskActive) {
+ static_api_ptr_t<app_close_blocking_task_manager> api;
+ if (state) api->register_task(this);
+ else api->unregister_task(this);
+ m_taskActive = state;
+ }
+ }
+private:
+ bool m_taskActive;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk.cpp index 43e887b..f855e1b 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk.cpp @@ -112,8 +112,8 @@ namespace { void audio_chunk::set_data_fixedpoint_ex(const void * source,t_size size,unsigned srate,unsigned nch,unsigned bps,unsigned flags,unsigned p_channel_config)
{
- assert( check_exclusive(flags,FLAG_SIGNED|FLAG_UNSIGNED) );
- assert( check_exclusive(flags,FLAG_LITTLE_ENDIAN|FLAG_BIG_ENDIAN) );
+ PFC_ASSERT( check_exclusive(flags,FLAG_SIGNED|FLAG_UNSIGNED) );
+ PFC_ASSERT( check_exclusive(flags,FLAG_LITTLE_ENDIAN|FLAG_BIG_ENDIAN) );
bool need_swap = !!(flags & FLAG_BIG_ENDIAN);
if (pfc::byte_order_is_big_endian) need_swap = !need_swap;
@@ -168,9 +168,9 @@ static void process_float_multi_swap(audio_sample * p_out,const t_float * p_in,c void audio_chunk::set_data_floatingpoint_ex(const void * ptr,t_size size,unsigned srate,unsigned nch,unsigned bps,unsigned flags,unsigned p_channel_config)
{
- assert(bps==32 || bps==64);
- assert( check_exclusive(flags,FLAG_LITTLE_ENDIAN|FLAG_BIG_ENDIAN) );
- assert( ! (flags & (FLAG_SIGNED|FLAG_UNSIGNED) ) );
+ PFC_ASSERT(bps==32 || bps==64);
+ PFC_ASSERT( check_exclusive(flags,FLAG_LITTLE_ENDIAN|FLAG_BIG_ENDIAN) );
+ PFC_ASSERT( ! (flags & (FLAG_SIGNED|FLAG_UNSIGNED) ) );
bool use_swap = pfc::byte_order_is_big_endian ? !!(flags & FLAG_LITTLE_ENDIAN) : !!(flags & FLAG_BIG_ENDIAN);
@@ -203,8 +203,7 @@ bool audio_chunk::is_valid() const {
unsigned nch = get_channels();
if (nch==0 || nch>256) return false;
- unsigned srate = get_srate();
- if (srate<1000 || srate>1000000) return false;
+ if (!g_is_valid_sample_rate(get_srate())) return false;
t_size samples = get_sample_count();
if (samples==0 || samples >= 0x80000000 / (sizeof(audio_sample) * nch) ) return false;
t_size size = get_data_size();
@@ -239,13 +238,19 @@ void audio_chunk::pad_with_silence(t_size samples) { if (samples > get_sample_count())
{
t_size old_size = get_sample_count() * get_channels();
- t_size new_size = samples * get_channels();
+ t_size new_size = pfc::multiply_guarded(samples,get_channels());
set_data_size(new_size);
pfc::memset_t(get_data() + old_size,(audio_sample)0,new_size - old_size);
set_sample_count(samples);
}
}
+void audio_chunk::set_silence(t_size samples) {
+ t_size items = samples * get_channels();
+ set_data_size(items);
+ pfc::memset_null_t(get_data(), items);
+ set_sample_count(samples);
+}
void audio_chunk::insert_silence_fromstart(t_size samples) {
t_size old_size = get_sample_count() * get_channels();
t_size delta = samples * get_channels();
@@ -257,6 +262,23 @@ void audio_chunk::insert_silence_fromstart(t_size samples) { set_sample_count(get_sample_count() + samples);
}
+bool audio_chunk::process_skip(double & skipDuration) {
+ t_uint64 skipSamples = audio_math::time_to_samples(skipDuration, get_sample_rate());
+ if (skipSamples == 0) {skipDuration = 0; return true;}
+ const t_size mySamples = get_sample_count();
+ if (skipSamples < mySamples) {
+ skip_first_samples((t_size)skipSamples);
+ skipDuration = 0;
+ return true;
+ }
+ if (skipSamples == mySamples) {
+ skipDuration = 0;
+ return false;
+ }
+ skipDuration -= audio_math::samples_to_time(mySamples, get_sample_rate());
+ return false;
+}
+
t_size audio_chunk::skip_first_samples(t_size samples_delta)
{
t_size samples_old = get_sample_count();
@@ -278,9 +300,12 @@ t_size audio_chunk::skip_first_samples(t_size samples_delta) }
}
-audio_sample audio_chunk::get_peak(audio_sample peak) const
-{
- return pfc::max_t<audio_sample>(peak,audio_math::calculate_peak(get_data(),get_sample_count() * get_channels() ));
+audio_sample audio_chunk::get_peak(audio_sample p_peak) const {
+ return pfc::max_t(p_peak, get_peak());
+}
+
+audio_sample audio_chunk::get_peak() const {
+ return audio_math::calculate_peak(get_data(),get_sample_count() * get_channels());
}
void audio_chunk::scale(audio_sample p_value)
@@ -288,3 +313,46 @@ void audio_chunk::scale(audio_sample p_value) audio_sample * ptr = get_data();
audio_math::scale(ptr,get_sample_count() * get_channels(),ptr,p_value);
}
+
+
+static void render_8bit(const audio_sample * in, t_size inLen, void * out) {
+ t_int8 * outWalk = reinterpret_cast<t_int8*>(out);
+ for(t_size walk = 0; walk < inLen; ++walk) {
+ *outWalk++ = (t_int8)pfc::clip_t<t_int32>(audio_math::rint32( in[walk] * 0x80 ), -128, 127);
+ }
+}
+static void render_24bit(const audio_sample * in, t_size inLen, void * out) {
+ t_uint8 * outWalk = reinterpret_cast<t_uint8*>(out);
+ for(t_size walk = 0; walk < inLen; ++walk) {
+ const t_int32 v = pfc::clip_t<t_int32>(audio_math::rint32( in[walk] * 0x800000 ), -128 * 256 * 256, 128 * 256 * 256 - 1);
+ *(outWalk ++) = (t_uint8) (v & 0xFF);
+ *(outWalk ++) = (t_uint8) ((v >> 8) & 0xFF);
+ *(outWalk ++) = (t_uint8) ((v >> 16) & 0xFF);
+ }
+}
+
+bool audio_chunk::to_raw_data(mem_block_container & out, t_uint32 bps) const {
+ const t_size samples = get_sample_count();
+ const t_size dataLen = pfc::multiply_guarded(samples, (t_size)get_channel_count());
+ switch(bps) {
+ case 8:
+ out.set_size(dataLen);
+ render_8bit(get_data(), dataLen, out.get_ptr());
+ break;
+ case 16:
+ out.set_size(dataLen * 2);
+ audio_math::convert_to_int16(get_data(), dataLen, reinterpret_cast<t_int16*>(out.get_ptr()), 1.0);
+ break;
+ case 24:
+ out.set_size(dataLen * 3);
+ render_24bit(get_data(), dataLen, out.get_ptr());
+ break;
+ case 32:
+ PFC_STATIC_ASSERT( sizeof(audio_sample) == 4 );
+ out.set(get_data(), dataLen * sizeof(audio_sample));
+ break;
+ default:
+ return false;
+ }
+ return true;
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk.h index 60803a2..dc6838c 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk.h @@ -1,9 +1,14 @@ -#ifndef _AUDIO_CHUNK_H_
-#define _AUDIO_CHUNK_H_
+//! Thrown when audio_chunk sample rate or channel mapping changes in mid-stream and the code receiving audio_chunks can't deal with that scenario.
+PFC_DECLARE_EXCEPTION(exception_unexpected_audio_format_change, exception_io_data, "Unexpected audio format change" );
//! Interface to container of a chunk of audio data. See audio_chunk_impl for an implementation.
class NOVTABLE audio_chunk {
public:
+
+ enum {
+ sample_rate_min = 1000, sample_rate_max = 2822400
+ };
+ static bool g_is_valid_sample_rate(t_uint32 p_val) {return p_val >= sample_rate_min && p_val <= sample_rate_max;}
//! Channel map flag declarations. Note that order of interleaved channel data in the stream is same as order of these flags.
enum
@@ -30,12 +35,15 @@ public: channel_config_mono = channel_front_center,
channel_config_stereo = channel_front_left | channel_front_right,
channel_config_5point1 = channel_front_left | channel_front_right | channel_back_left | channel_back_right | channel_front_center | channel_lfe,
+ channel_config_7point1 = channel_config_5point1 | channel_side_left | channel_side_right,
defined_channel_count = 18,
};
- //! Helper function; guesses default channel map for specified channel count.
+ //! Helper function; guesses default channel map for the specified channel count. Returns 0 on failure.
static unsigned g_guess_channel_config(unsigned count);
+ //! Helper function; determines channel map for the specified channel count according to Xiph specs. Throws exception_io_data on failure.
+ static unsigned g_guess_channel_config_xiph(unsigned count);
#ifdef _WIN32
//! Helper function; translates audio_chunk channel map to WAVEFORMATEXTENSIBLE channel map.
@@ -70,6 +78,8 @@ public: virtual void set_srate(unsigned val) = 0;
//! Retrieves channel count of contained audio data.
virtual unsigned get_channels() const = 0;
+ //! Helper - for consistency - same as get_channels().
+ inline unsigned get_channel_count() const {return get_channels();}
//! Retrieves channel map of contained audio data. Conditions where number of channels specified by channel map don't match get_channels() return value should not be possible.
virtual unsigned get_channel_config() const = 0;
//! Sets channel count / channel map.
@@ -91,8 +101,8 @@ public: //! Helper; sets channel count to specified value and uses default channel map for this channel count.
void set_channels(unsigned val) {set_channels(val,g_guess_channel_config(val));}
-
- //! Helper; resizes audio data buffer when it's current size is smaller than requested.
+
+ //! Helper; resizes audio data buffer when its current size is smaller than requested.
inline void grow_data_size(t_size p_requested) {if (p_requested > get_data_size()) set_data_size(p_requested);}
@@ -163,10 +173,18 @@ public: void pad_with_silence(t_size samples);
void insert_silence_fromstart(t_size samples);
t_size skip_first_samples(t_size samples);
+ void set_silence(t_size samples);
+
+ bool process_skip(double & skipDuration);
+
+ //! Simple function to get original PCM stream back. Assumes host's endianness, integers are signed - including the 8bit mode; 32bit mode assumed to be float.
+ //! @returns false when the conversion could not be performed because of unsupported bit depth etc.
+ bool to_raw_data(class mem_block_container & out, t_uint32 bps) const;
//! Helper, calculates peak value of data in the chunk. The optional parameter specifies initial peak value, to simplify calling code.
- audio_sample get_peak(audio_sample p_peak = 0) const;
+ audio_sample get_peak(audio_sample p_peak) const;
+ audio_sample get_peak() const;
//! Helper function; scales entire chunk content by specified value.
void scale(audio_sample p_value);
@@ -219,6 +237,7 @@ public: };
typedef audio_chunk_impl_t<> audio_chunk_impl;
+typedef audio_chunk_impl_t<pfc::alloc_fast_aggressive> audio_chunk_impl_temporary;
typedef audio_chunk_impl audio_chunk_i;//for compatibility
//! Implements const methods of audio_chunk only, referring to an external buffer. For temporary use only (does not maintain own storage), e.g.: somefunc( audio_chunk_temp_impl(mybuffer,....) );
@@ -251,4 +270,79 @@ private: const audio_sample * m_data;
};
-#endif //_AUDIO_CHUNK_H_
\ No newline at end of file +
+
+//! Duration counter class - accumulates duration using sample values, without any kind of rounding error accumulation.
+class duration_counter {
+public:
+ duration_counter() : m_offset() {
+ }
+ void set(double v) {
+ m_sampleCounts.remove_all();
+ m_offset = v;
+ }
+ void reset() {
+ set(0);
+ }
+
+ void add(double v) {m_offset += v;}
+ void subtract(double v) {m_offset -= v;}
+
+ double query() const {
+ double acc = m_offset;
+ for(t_map::const_iterator walk = m_sampleCounts.first(); walk.is_valid(); ++walk) {
+ acc += audio_math::samples_to_time(walk->m_value, walk->m_key);
+ }
+ return acc;
+ }
+ void add(const audio_chunk & c) {
+ add(c.get_sample_count(), c.get_sample_rate());
+ }
+ void add(t_uint64 sampleCount, t_uint32 sampleRate) {
+ PFC_ASSERT( sampleRate > 0 );
+ if (sampleRate > 0 && sampleCount > 0) {
+ m_sampleCounts.find_or_add(sampleRate) += sampleCount;
+ }
+ }
+ void add(const duration_counter & other) {
+ add(other.m_offset);
+ for(t_map::const_iterator walk = other.m_sampleCounts.first(); walk.is_valid(); ++walk) {
+ add(walk->m_value, walk->m_key);
+ }
+ }
+ void subtract(const duration_counter & other) {
+ subtract(other.m_offset);
+ for(t_map::const_iterator walk = other.m_sampleCounts.first(); walk.is_valid(); ++walk) {
+ subtract(walk->m_value, walk->m_key);
+ }
+ }
+ void subtract(t_uint64 sampleCount, t_uint32 sampleRate) {
+ PFC_ASSERT( sampleRate > 0 );
+ if (sampleRate > 0 && sampleCount > 0) {
+ t_uint64 * val = m_sampleCounts.query_ptr(sampleRate);
+ if (val == NULL) throw pfc::exception_invalid_params();
+ if (*val < sampleCount) throw pfc::exception_invalid_params();
+ else if (*val == sampleCount) {
+ m_sampleCounts.remove(sampleRate);
+ } else {
+ *val -= sampleCount;
+ }
+
+ }
+ }
+ void subtract(const audio_chunk & c) {
+ subtract(c.get_sample_count(), c.get_sample_rate());
+ }
+ template<typename t_source> duration_counter & operator+=(const t_source & source) {add(source); return *this;}
+ template<typename t_source> duration_counter & operator-=(const t_source & source) {subtract(source); return *this;}
+ template<typename t_source> duration_counter & operator=(const t_source & source) {reset(); add(source); return *this;}
+private:
+ double m_offset;
+ typedef pfc::map_t<t_uint32, t_uint64> t_map;
+ t_map m_sampleCounts;
+};
+
+class audio_chunk_partial_ref : public audio_chunk_temp_impl {
+public:
+ audio_chunk_partial_ref(const audio_chunk & chunk, t_size base, t_size count) : audio_chunk_temp_impl(chunk.get_data() + base * chunk.get_channels(), count, chunk.get_sample_rate(), chunk.get_channels(), chunk.get_channel_config()) {}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk_channel_config.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk_channel_config.cpp index 16caed4..8dba073 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk_channel_config.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_chunk_channel_config.cpp @@ -52,7 +52,7 @@ DWORD audio_chunk::g_channel_config_to_wfx(unsigned p_config) {
DWORD ret = 0;
unsigned n;
- for(n=0;n<tabsize(g_translation_table);n++)
+ for(n=0;n<PFC_TABSIZE(g_translation_table);n++)
{
if (p_config & g_translation_table[n].m_native) ret |= g_translation_table[n].m_wfx;
}
@@ -63,7 +63,7 @@ unsigned audio_chunk::g_channel_config_from_wfx(DWORD p_wfx) {
unsigned ret = 0;
unsigned n;
- for(n=0;n<tabsize(g_translation_table);n++)
+ for(n=0;n<PFC_TABSIZE(g_translation_table);n++)
{
if (p_wfx & g_translation_table[n].m_wfx) ret |= g_translation_table[n].m_native;
}
@@ -73,7 +73,7 @@ unsigned audio_chunk::g_channel_config_from_wfx(DWORD p_wfx) #endif
-static unsigned g_audio_channel_config_table[] =
+static const unsigned g_audio_channel_config_table[] =
{
0,
audio_chunk::channel_config_mono,
@@ -86,13 +86,26 @@ static unsigned g_audio_channel_config_table[] = audio_chunk::channel_front_left | audio_chunk::channel_front_right | audio_chunk::channel_back_left | audio_chunk::channel_back_right | audio_chunk::channel_front_center | audio_chunk::channel_lfe | audio_chunk::channel_front_center_right | audio_chunk::channel_front_center_left,
};
+static const unsigned g_audio_channel_config_table_xiph[] =
+{
+ 0,
+ audio_chunk::channel_config_mono,
+ audio_chunk::channel_config_stereo,
+ audio_chunk::channel_front_left | audio_chunk::channel_front_right | audio_chunk::channel_front_center,
+ audio_chunk::channel_front_left | audio_chunk::channel_front_right | audio_chunk::channel_back_left | audio_chunk::channel_back_right,
+ audio_chunk::channel_front_left | audio_chunk::channel_front_right | audio_chunk::channel_back_left | audio_chunk::channel_back_right | audio_chunk::channel_front_center,
+ audio_chunk::channel_config_5point1,
+};
unsigned audio_chunk::g_guess_channel_config(unsigned count)
{
- if (count >= tabsize(g_audio_channel_config_table)) return 0;
+ if (count >= PFC_TABSIZE(g_audio_channel_config_table)) return 0;
return g_audio_channel_config_table[count];
}
-
+unsigned audio_chunk::g_guess_channel_config_xiph(unsigned count) {
+ if (count == 0 || count >= PFC_TABSIZE(g_audio_channel_config_table_xiph)) throw exception_io_data();
+ return g_audio_channel_config_table_xiph[count];
+}
unsigned audio_chunk::g_channel_index_from_flag(unsigned p_config,unsigned p_flag) {
unsigned index = 0;
@@ -101,7 +114,7 @@ unsigned audio_chunk::g_channel_index_from_flag(unsigned p_config,unsigned p_fla if (p_flag & query) return index;
if (p_config & query) index++;
}
- return infinite;
+ return ~0;
}
unsigned audio_chunk::g_extract_channel_flag(unsigned p_config,unsigned p_index)
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_postprocessor.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_postprocessor.h index 10cde01..4153d28 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_postprocessor.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/audio_postprocessor.h @@ -1,6 +1,3 @@ -#ifndef _CVT_FLOAT_TO_LINEAR_H_
-#define _CVT_FLOAT_TO_LINEAR_H_
-
//! This class handles conversion of audio data (audio_chunk) to various linear PCM types, with optional dithering.
class NOVTABLE audio_postprocessor : public service_base
@@ -26,5 +23,3 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(audio_postprocessor);
};
-
-#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/autoplaylist.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/autoplaylist.h new file mode 100644 index 0000000..058b49a --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/autoplaylist.h @@ -0,0 +1,106 @@ +/*
+ Autoplaylist APIs
+ These APIs were introduced in foobar2000 0.9.5, to reduce amount of code required to create your own autoplaylists. Creation of autoplaylists is was also possible before through playlist lock APIs.
+ In most cases, you'll want to turn regular playlists into autoplaylists using the following code:
+ static_api_ptr_t<autoplaylist_manager>()->add_client_simple(querypattern, sortpattern, playlistindex, forceSort ? autoplaylist_flag_sort : 0);
+ If you require more advanced functionality, such as using your own code to filter which part of user's Media Library should be placed in specific autoplaylist, you must implement autoplaylist_client (to let autoplaylist manager invoke your handlers when needed) / autoplaylist_client_factory (to re-instantiate your autoplaylist_client after a foobar2000 restart cycle).
+*/
+
+enum {
+ //! When set, core will keep the autoplaylist sorted and prevent user from reordering it.
+ autoplaylist_flag_sort = 1 << 0,
+};
+//! Main class controlling autoplaylist behaviors. Implemented by autoplaylist client in scenarios where simple query/sort strings are not enough (core provides a standard implementation for simple queries).
+class NOVTABLE autoplaylist_client : public service_base {
+public:
+ virtual GUID get_guid() = 0;
+ //! Called only inside a metadb lock for performance reasons.
+ virtual void filter(metadb_handle_list_cref data, bool * out) = 0;
+ //! Return true when you have filled p_orderbuffer with a permutation to apply to p_items, false when you don't support sorting (core's own sort scheme will be applied).
+ virtual bool sort(metadb_handle_list_cref p_items,t_size * p_orderbuffer) = 0;
+ //! Retrieves your configuration data to be used later when re-instantiating your autoplaylist_client after a restart.
+ virtual void get_configuration(stream_writer * p_stream,abort_callback & p_abort) = 0;
+
+ virtual void show_ui(t_size p_source_playlist) = 0;
+
+ //! Helper.
+ template<typename t_array> void get_configuration(t_array & p_out) {
+ PFC_STATIC_ASSERT( sizeof(p_out[0]) == 1 );
+ typedef pfc::array_t<t_uint8,pfc::alloc_fast_aggressive> t_temp; t_temp temp;
+ get_configuration(&stream_writer_buffer_append_ref_t<t_temp>(temp),abort_callback_dummy());
+ p_out = temp;
+ }
+
+
+ FB2K_MAKE_SERVICE_INTERFACE(autoplaylist_client,service_base)
+};
+
+typedef service_ptr_t<autoplaylist_client> autoplaylist_client_ptr;
+
+//! Supported from 0.9.5.3 up.
+class NOVTABLE autoplaylist_client_v2 : public autoplaylist_client {
+public:
+ //! Sets a completion_notify object that the autoplaylist_client implementation should call when its filtering behaviors have changed so the whole playlist needs to be rebuilt. \n
+ //! completion_notify::on_completion() status parameter meaning: \n
+ //! 0.9.5.3 : ignored. \n
+ //! 0.9.5.4 and newer: set to 1 to indicate that your configuration has changed as well (for an example as a result of user edits) to get a get_configuration() call as well as cause the playlist to be rebuilt; set to zero otherwise - when the configuration hasn't changed but the playlist needs to be rebuilt as a result of some other event.
+ virtual void set_full_refresh_notify(completion_notify::ptr notify) = 0;
+
+ //! Returns whether the show_ui() method is available / does anything useful with out implementation (not everyone implements show_ui).
+ virtual bool show_ui_available() = 0;
+
+ //! Returns a human-readable autoplaylist implementer's label to display in playlist's context menu / description / etc.
+ virtual void get_display_name(pfc::string_base & out) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(autoplaylist_client_v2, autoplaylist_client);
+};
+
+//! Class needed to re-instantiate autoplaylist_client after a restart. Not directly needed to set up an autoplaylist_client, but without it, your autoplaylist will be lost after a restart.
+class NOVTABLE autoplaylist_client_factory : public service_base {
+public:
+ //! Must return same GUID as your autoplaylist_client::get_guid()
+ virtual GUID get_guid() = 0;
+ //! Instantiates your autoplaylist_client with specified configuration.
+ virtual autoplaylist_client_ptr instantiate(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(autoplaylist_client_factory)
+};
+
+PFC_DECLARE_EXCEPTION(exception_autoplaylist,pfc::exception,"Autoplaylist error")
+
+PFC_DECLARE_EXCEPTION(exception_autoplaylist_already_owned,exception_autoplaylist,"This playlist is already an autoplaylist")
+PFC_DECLARE_EXCEPTION(exception_autoplaylist_not_owned,exception_autoplaylist,"This playlist is not an autoplaylist")
+PFC_DECLARE_EXCEPTION(exception_autoplaylist_lock_failure,exception_autoplaylist,"Playlist could not be locked")
+
+
+//! Primary class for managing autoplaylists. Implemented by core, do not reimplement; instantiate using static_api_ptr_t<autoplaylist_manager>.
+class NOVTABLE autoplaylist_manager : public service_base {
+public:
+ //! Throws exception_autoplaylist or one of its subclasses on failure.
+ //! @param p_flags See autoplaylist_flag_* constants.
+ virtual void add_client(autoplaylist_client_ptr p_client,t_size p_playlist,t_uint32 p_flags) = 0;
+ virtual bool is_client_present(t_size p_playlist) = 0;
+ //! Throws exception_autoplaylist or one of its subclasses on failure (eg. not an autoplaylist).
+ virtual autoplaylist_client_ptr query_client(t_size p_playlist) = 0;
+ virtual void remove_client(t_size p_playlist) = 0;
+ //! Helper; sets up an autoplaylist using standard autoplaylist_client implementation based on simple query/sort strings. When using this, you don't need to maintain own autoplaylist_client/autoplaylist_client_factory implementations, and autoplaylists that you create will not be lost when your DLL is removed, as opposed to using add_client() directly.
+ //! Throws exception_autoplaylist or one of its subclasses on failure.
+ //! @param p_flags See autoplaylist_flag_* constants.
+ virtual void add_client_simple(const char * p_query,const char * p_sort,t_size p_playlist,t_uint32 p_flags) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(autoplaylist_manager)
+};
+
+//! \since 0.9.5.4
+//! Extended version of autoplaylist_manager, available from 0.9.5.4 up, with methods allowing modification of autoplaylist flags.
+class NOVTABLE autoplaylist_manager_v2 : public autoplaylist_manager {
+ FB2K_MAKE_SERVICE_INTERFACE(autoplaylist_manager_v2, autoplaylist_manager)
+public:
+ virtual t_uint32 get_client_flags(t_size playlist) = 0;
+ virtual void set_client_flags(t_size playlist, t_uint32 newFlags) = 0;
+
+ //! For use with autoplaylist client configuration dialogs. It's recommended not to call this from anything else.
+ virtual t_uint32 get_client_flags(autoplaylist_client::ptr client) = 0;
+ //! For use with autoplaylist client configuration dialogs. It's recommended not to call this from anything else.
+ virtual void set_client_flags(autoplaylist_client::ptr client, t_uint32 newFlags) = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/cfg_var.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/cfg_var.cpp index 884a96b..b374014 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/cfg_var.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/cfg_var.cpp @@ -1,24 +1,16 @@ #include "foobar2000.h"
+cfg_var_reader * cfg_var_reader::g_list = NULL;
+cfg_var_writer * cfg_var_writer::g_list = NULL;
-
-cfg_var * cfg_var::list=0;
-
-
-static int cfg_var_guid_compare(const cfg_var * p_var1,const cfg_var * p_var2)
-{
- return pfc::guid_compare(p_var1->get_guid(),p_var2->get_guid());
-}
-
-static int cfg_var_guid_compare_search(const cfg_var * p_var1,const GUID & p_var2)
+void cfg_var_reader::config_read_file(stream_reader * p_stream,abort_callback & p_abort)
{
- return pfc::guid_compare(p_var1->get_guid(),p_var2);
-}
-
-void cfg_var::config_read_file(stream_reader * p_stream,abort_callback & p_abort)
-{
- for(;;)
- {
+ pfc::map_t<GUID,cfg_var_reader*> vars;
+ for(cfg_var_reader * walk = g_list; walk != NULL; walk = walk->m_next) {
+ vars.set(walk->m_guid,walk);
+ }
+ for(;;) {
+
GUID guid;
t_uint32 size;
@@ -26,31 +18,26 @@ void cfg_var::config_read_file(stream_reader * p_stream,abort_callback & p_abort guid = pfc::byteswap_if_be_t(guid);
p_stream->read_lendian_t(size,p_abort);
- bool found = false;
- cfg_var * ptr;
- for(ptr = list; ptr; ptr=ptr->next) {
- if (ptr->get_guid() == guid) {
- stream_reader_limited_ref wrapper(p_stream,size);
- try {
- ptr->set_data_raw(&wrapper,size,p_abort);
- } catch(exception_io_data const & ) {}
- wrapper.flush_remaining(p_abort);
- found = true;
- break;
- }
- }
- if (!found)
+ cfg_var_reader * var;
+ if (vars.query(guid,var)) {
+ stream_reader_limited_ref wrapper(p_stream,size);
+ try {
+ var->set_data_raw(&wrapper,size,p_abort);
+ } catch(exception_io_data) {}
+ wrapper.flush_remaining(p_abort);
+ } else {
p_stream->skip_object(size,p_abort);
+ }
}
}
-void cfg_var::config_write_file(stream_writer * p_stream,abort_callback & p_abort) {
- cfg_var * ptr;
+void cfg_var_writer::config_write_file(stream_writer * p_stream,abort_callback & p_abort) {
+ cfg_var_writer * ptr;
pfc::array_t<t_uint8,pfc::alloc_fast_aggressive> temp;
- for(ptr = list; ptr; ptr=ptr->next) {
+ for(ptr = g_list; ptr; ptr = ptr->m_next) {
temp.set_size(0);
ptr->get_data_raw(&stream_writer_buffer_append_ref_t<pfc::array_t<t_uint8,pfc::alloc_fast_aggressive> >(temp),p_abort);
- p_stream->write_lendian_t(ptr->get_guid(),p_abort);
+ p_stream->write_lendian_t(ptr->m_guid,p_abort);
p_stream->write_lendian_t(pfc::downcast_guarded<t_uint32>(temp.get_size()),p_abort);
if (temp.get_size() > 0) {
p_stream->write_object(temp.get_ptr(),temp.get_size(),p_abort);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/cfg_var.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/cfg_var.h index de1d05f..7e31b19 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/cfg_var.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/cfg_var.h @@ -1,36 +1,62 @@ #ifndef _FOOBAR2000_SDK_CFG_VAR_H_
#define _FOOBAR2000_SDK_CFG_VAR_H_
-//! Base class for configuration variable classes; provides self-registration mechaisms and methods to set/retrieve configuration data; those methods are automatically called for all registered instances by backend when configuration file is being read or written.\n
-//! Note that cfg_var class and its derivatives may be only instantiated statically (as static objects or members of other static objects), NEVER dynamically (operator new, local variables, members of objects instantiated as such).
-class NOVTABLE cfg_var {
-protected:
- //! @param p_guid GUID of the variable, used to identify variable implementations owning specific configuration file entries when reading the configuration file back. You must generate a new GUID every time you declare a new cfg_var.
- cfg_var(const GUID & p_guid) : m_guid(p_guid) {PFC_ASSERT(!core_api::are_services_available());/*imperfect check for nonstatic instantiation*/next=list;list=this;};
- ~cfg_var() {PFC_ASSERT(!core_api::are_services_available());/*imperfect check for nonstatic instantiation*/}
+#define CFG_VAR_ASSERT_SAFEINIT PFC_ASSERT(!core_api::are_services_available());/*imperfect check for nonstatic instantiation*/
+
+
+//! Reader part of cfg_var object. In most cases, you should use cfg_var instead of using cfg_var_reader directly.
+class NOVTABLE cfg_var_reader {
public:
- //! Retrieves state of the variable. Called only from main thread, when writing configuration file.
- //! @param p_stream Stream receiving state of the variable.
- virtual void get_data_raw(stream_writer * p_stream,abort_callback & p_abort) = 0;
+ //! @param p_guid GUID of the variable, used to identify variable implementations owning specific configuration file entries when reading the configuration file back. You must generate a new GUID every time you declare a new cfg_var.
+ cfg_var_reader(const GUID & guid) : m_guid(guid) { CFG_VAR_ASSERT_SAFEINIT; m_next = g_list; g_list = this; }
+ ~cfg_var_reader() { CFG_VAR_ASSERT_SAFEINIT; }
+
//! Sets state of the variable. Called only from main thread, when reading configuration file.
//! @param p_stream Stream containing new state of the variable.
//! @param p_sizehint Number of bytes contained in the stream; reading past p_sizehint bytes will fail (EOF).
virtual void set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) = 0;
//! For internal use only, do not call.
- inline const GUID & get_guid() const {return m_guid;}
-
- //! For internal use only, do not call.
static void config_read_file(stream_reader * p_stream,abort_callback & p_abort);
+
+ const GUID m_guid;
+private:
+ static cfg_var_reader * g_list;
+ cfg_var_reader * m_next;
+
+ PFC_CLASS_NOT_COPYABLE_EX(cfg_var_reader)
+};
+
+//! Writer part of cfg_var object. In most cases, you should use cfg_var instead of using cfg_var_writer directly.
+class NOVTABLE cfg_var_writer {
+public:
+ //! @param p_guid GUID of the variable, used to identify variable implementations owning specific configuration file entries when reading the configuration file back. You must generate a new GUID every time you declare a new cfg_var.
+ cfg_var_writer(const GUID & guid) : m_guid(guid) { CFG_VAR_ASSERT_SAFEINIT; m_next = g_list; g_list = this;}
+ ~cfg_var_writer() { CFG_VAR_ASSERT_SAFEINIT; }
+
+ //! Retrieves state of the variable. Called only from main thread, when writing configuration file.
+ //! @param p_stream Stream receiving state of the variable.
+ virtual void get_data_raw(stream_writer * p_stream,abort_callback & p_abort) = 0;
+
//! For internal use only, do not call.
static void config_write_file(stream_writer * p_stream,abort_callback & p_abort);
+
+ const GUID m_guid;
private:
- GUID m_guid;
- static cfg_var * list;
- cfg_var * next;
+ static cfg_var_writer * g_list;
+ cfg_var_writer * m_next;
- cfg_var(const cfg_var& ) {throw pfc::exception_not_implemented();}
- const cfg_var & operator=(const cfg_var& ) {throw pfc::exception_not_implemented();}
+ PFC_CLASS_NOT_COPYABLE_EX(cfg_var_writer)
+};
+
+//! Base class for configuration variable classes; provides self-registration mechaisms and methods to set/retrieve configuration data; those methods are automatically called for all registered instances by backend when configuration file is being read or written.\n
+//! Note that cfg_var class and its derivatives may be only instantiated statically (as static objects or members of other static objects), NEVER dynamically (operator new, local variables, members of objects instantiated as such).
+class NOVTABLE cfg_var : public cfg_var_reader, public cfg_var_writer {
+protected:
+ //! @param p_guid GUID of the variable, used to identify variable implementations owning specific configuration file entries when reading the configuration file back. You must generate a new GUID every time you declare a new cfg_var.
+ cfg_var(const GUID & p_guid) : cfg_var_reader(p_guid), cfg_var_writer(p_guid) {}
+public:
+ GUID get_guid() const {return cfg_var_reader::m_guid;}
};
//! Generic integer config variable class. Template parameter can be used to specify integer type to use.\n
@@ -68,8 +94,7 @@ typedef cfg_int_t<bool> cfg_bool; //! String config variable. Stored in the stream with int32 header containing size in bytes, followed by non-null-terminated UTF-8 data.\n
//! Note that cfg_var class and its derivatives may be only instantiated statically (as static objects or members of other static objects), NEVER dynamically (operator new, local variables, members of objects instantiated as such).
-class cfg_string : public cfg_var, public pfc::string8
-{
+class cfg_string : public cfg_var, public pfc::string8 {
protected:
void get_data_raw(stream_writer * p_stream,abort_callback & p_abort);
void set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort);
@@ -83,7 +108,33 @@ public: inline const cfg_string& operator=(const char* p_val) {set_string(p_val);return *this;}
inline operator const char * () const {return get_ptr();}
+};
+
+class cfg_string_mt : public cfg_var {
+protected:
+ void get_data_raw(stream_writer * p_stream,abort_callback & p_abort) {
+ insync(m_sync);
+ p_stream->write_object(m_val.get_ptr(),m_val.length(),p_abort);
+ }
+ void set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) {
+ pfc::string8_fastalloc temp;
+ p_stream->read_string_raw(temp,p_abort);
+ set(temp);
+ }
+public:
+ cfg_string_mt(const GUID & id, const char * defVal) : cfg_var(id), m_val(defVal) {}
+ void get(pfc::string_base & out) const {
+ insync(m_sync);
+ out = m_val;
+ }
+ void set(const char * val, t_size valLen = ~0) {
+ insync(m_sync);
+ m_val.set_string(val, valLen);
+ }
+private:
+ mutable critical_section m_sync;
+ pfc::string8 m_val;
};
//! Struct config variable template. Warning: not endian safe, should be used only for nonportable code.\n
@@ -115,4 +166,124 @@ public: };
+template<typename TObj>
+class cfg_objList : public cfg_var, public pfc::list_t<TObj> {
+public:
+ typedef cfg_objList<TObj> t_self;
+ cfg_objList(const GUID& guid) : cfg_var(guid) {}
+ template<typename TSource, unsigned Count> cfg_objList(const GUID& guid, const TSource (& source)[Count]) : cfg_var(guid) {
+ reset(source);
+ }
+ template<typename TSource, unsigned Count> void reset(const TSource (& source)[Count]) {
+ set_size(Count); for(t_size walk = 0; walk < Count; ++walk) (*this)[walk] = source[walk];
+ }
+ void get_data_raw(stream_writer * p_stream,abort_callback & p_abort) {
+ stream_writer_formatter<> out(*p_stream,p_abort);
+ out << pfc::downcast_guarded<t_uint32>(get_size());
+ for(t_size walk = 0; walk < get_size(); ++walk) out << (*this)[walk];
+ }
+ void set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) {
+ try {
+ stream_reader_formatter<> in(*p_stream,p_abort);
+ t_uint32 count; in >> count;
+ set_count(count);
+ for(t_uint32 walk = 0; walk < count; ++walk) in >> (*this)[walk];
+ } catch(...) {
+ remove_all();
+ throw;
+ }
+ }
+ template<typename t_in> t_self & operator=(t_in const & source) {remove_all(); add_items(source); return *this;}
+ template<typename t_in> t_self & operator+=(t_in const & p_source) {add_item(p_source); return *this;}
+ template<typename t_in> t_self & operator|=(t_in const & p_source) {add_items(p_source); return *this;}
+};
+template<typename TList>
+class cfg_objListEx : public cfg_var, public TList {
+public:
+ typedef cfg_objListEx<TList> t_self;
+ cfg_objListEx(const GUID & guid) : cfg_var(guid) {}
+ void get_data_raw(stream_writer * p_stream, abort_callback & p_abort) {
+ stream_writer_formatter<> out(*p_stream,p_abort);
+ out << pfc::downcast_guarded<t_uint32>(this->get_count());
+ for(typename TList::const_iterator walk = this->first(); walk.is_valid(); ++walk) out << *walk;
+ }
+ void set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) {
+ remove_all();
+ stream_reader_formatter<> in(*p_stream,p_abort);
+ t_uint32 count; in >> count;
+ for(t_uint32 walk = 0; walk < count; ++walk) {
+ typename TList::t_item item; in >> item; this->add_item(item);
+ }
+ }
+ template<typename t_in> t_self & operator=(t_in const & source) {remove_all(); add_items(source); return *this;}
+ template<typename t_in> t_self & operator+=(t_in const & p_source) {add_item(p_source); return *this;}
+ template<typename t_in> t_self & operator|=(t_in const & p_source) {add_items(p_source); return *this;}
+};
+
+template<typename TObj>
+class cfg_obj : public cfg_var, public TObj {
+public:
+ cfg_obj(const GUID& guid) : cfg_var(guid), TObj() {}
+ template<typename TInitData> cfg_obj(const GUID& guid,const TInitData& initData) : cfg_var(guid), TObj(initData) {}
+
+ TObj & val() {return *this;}
+ TObj const & val() const {return *this;}
+
+ void get_data_raw(stream_writer * p_stream,abort_callback & p_abort) {
+ stream_writer_formatter<> out(*p_stream,p_abort);
+ const TObj * ptr = this;
+ out << *ptr;
+ }
+ void set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) {
+ stream_reader_formatter<> in(*p_stream,p_abort);
+ TObj * ptr = this;
+ in >> *ptr;
+ }
+};
+
+template<typename TObj, typename TImport> class cfg_objListImporter : private cfg_var_reader {
+public:
+ typedef cfg_objList<TObj> TMasterVar;
+ cfg_objListImporter(TMasterVar & var, const GUID & guid) : m_var(var), cfg_var_reader(guid) {}
+
+ private:
+ void set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) {
+ TImport temp;
+ try {
+ stream_reader_formatter<> in(*p_stream,p_abort);
+ t_uint32 count; in >> count;
+ m_var.set_count(count);
+ for(t_uint32 walk = 0; walk < count; ++walk) {
+ in >> temp;
+ m_var[walk] = temp;
+ }
+ } catch(...) {
+ m_var.remove_all();
+ throw;
+ }
+ }
+ TMasterVar & m_var;
+};
+template<typename TMap> class cfg_objMap : private cfg_var, public TMap {
+public:
+ cfg_objMap(const GUID & id) : cfg_var(id) {}
+private:
+ void get_data_raw(stream_writer * p_stream,abort_callback & p_abort) {
+ stream_writer_formatter<> out(*p_stream, p_abort);
+ out << pfc::downcast_guarded<t_uint32>(this->get_count());
+ for(typename TMap::const_iterator walk = this->first(); walk.is_valid(); ++walk) {
+ out << walk->m_key << walk->m_value;
+ }
+ }
+ void set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) {
+ remove_all();
+ stream_reader_formatter<> in(*p_stream, p_abort);
+ t_uint32 count; in >> count;
+ for(t_uint32 walk = 0; walk < count; ++walk) {
+ TMap::t_key key; in >> key; PFC_ASSERT( !this->have_item(key) );
+ try { in >> this->find_or_add( key ); } catch(...) { this->remove(key); throw; }
+ }
+ }
+};
+
#endif
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/chapterizer.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/chapterizer.cpp index e933088..2187060 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/chapterizer.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/chapterizer.cpp @@ -4,21 +4,93 @@ void chapter_list::copy(const chapter_list & p_source) {
t_size n, count = p_source.get_chapter_count();
set_chapter_count(count);
- for(n=0;n<count;n++)
- set_info(n,p_source.get_info(n));
+ for(n=0;n<count;n++) set_info(n,p_source.get_info(n));
+ set_pregap(p_source.get_pregap());
}
-bool chapterizer::g_find(service_ptr_t<chapterizer> & p_out,const char * p_path,abort_callback & p_abort)
+bool chapterizer::g_find(service_ptr_t<chapterizer> & p_out,const char * p_path)
{
service_ptr_t<chapterizer> ptr;
service_enum_t<chapterizer> e;
- while(e.next(ptr))
- {
- if (ptr->is_our_file(p_path,p_abort))
- {
+ while(e.next(ptr)) {
+ if (ptr->is_our_path(p_path)) {
p_out = ptr;
return true;
}
}
return false;
-}
\ No newline at end of file +}
+
+bool chapterizer::g_is_pregap_capable(const char * p_path) {
+ service_ptr_t<chapterizer> ptr;
+ service_enum_t<chapterizer> e;
+ while(e.next(ptr)) {
+ if (ptr->supports_pregaps() && ptr->is_our_path(p_path)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+cuesheet_format_index_time::cuesheet_format_index_time(double p_time)
+{
+ t_uint64 ticks = audio_math::time_to_samples(p_time,75);
+ t_uint64 seconds = ticks / 75; ticks %= 75;
+ t_uint64 minutes = seconds / 60; seconds %= 60;
+ m_buffer << pfc::format_uint(minutes,2) << ":" << pfc::format_uint(seconds,2) << ":" << pfc::format_uint(ticks,2);
+}
+
+double cuesheet_parse_index_time_e(const char * p_string,t_size p_length)
+{
+ return (double) cuesheet_parse_index_time_ticks_e(p_string,p_length) / 75.0;
+}
+
+unsigned cuesheet_parse_index_time_ticks_e(const char * p_string,t_size p_length)
+{
+ p_length = pfc::strlen_max(p_string,p_length);
+ t_size ptr = 0;
+ t_size splitmarks[2];
+ t_size splitptr = 0;
+ for(ptr=0;ptr<p_length;ptr++)
+ {
+ if (p_string[ptr] == ':')
+ {
+ if (splitptr >= 2) throw std::exception("invalid INDEX time syntax",0);
+ splitmarks[splitptr++] = ptr;
+ }
+ else if (!pfc::char_is_numeric(p_string[ptr])) throw std::exception("invalid INDEX time syntax",0);
+ }
+
+ t_size minutes_base = 0, minutes_length = 0, seconds_base = 0, seconds_length = 0, frames_base = 0, frames_length = 0;
+
+ switch(splitptr)
+ {
+ case 0:
+ frames_base = 0;
+ frames_length = p_length;
+ break;
+ case 1:
+ seconds_base = 0;
+ seconds_length = splitmarks[0];
+ frames_base = splitmarks[0] + 1;
+ frames_length = p_length - frames_base;
+ break;
+ case 2:
+ minutes_base = 0;
+ minutes_length = splitmarks[0];
+ seconds_base = splitmarks[0] + 1;
+ seconds_length = splitmarks[1] - seconds_base;
+ frames_base = splitmarks[1] + 1;
+ frames_length = p_length - frames_base;
+ break;
+ }
+
+ unsigned ret = 0;
+
+ if (frames_length > 0) ret += pfc::atoui_ex(p_string + frames_base,frames_length);
+ if (seconds_length > 0) ret += 75 * pfc::atoui_ex(p_string + seconds_base,seconds_length);
+ if (minutes_length > 0) ret += 60 * 75 * pfc::atoui_ex(p_string + minutes_base,minutes_length);
+
+ return ret;
+}
+
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/chapterizer.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/chapterizer.h index 1197567..dd4578e 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/chapterizer.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/chapterizer.h @@ -1,6 +1,5 @@ //! Interface for object storing list of chapters.
-class NOVTABLE chapter_list
-{
+class NOVTABLE chapter_list {
public:
//! Returns number of chapters.
virtual t_size get_chapter_count() const = 0;
@@ -16,6 +15,9 @@ public: //! @param p_info New chapter description. Note that length part of file_info is used to calculate chapter marks.
virtual void set_info(t_size p_chapter,const file_info & p_info) = 0;
+ virtual double get_pregap() const = 0;
+ virtual void set_pregap(double val) = 0;
+
//! Copies contents of specified chapter_list object to this object.
void copy(const chapter_list & p_source);
@@ -27,34 +29,39 @@ protected: };
//! Implements chapter_list.
-class chapter_list_impl : public chapter_list
-{
+template<typename file_info_ = file_info_impl>
+class chapter_list_impl_t : public chapter_list {
public:
- chapter_list_impl(const chapter_list_impl & p_source) {copy(p_source);}
- chapter_list_impl(const chapter_list & p_source) {copy(p_source);}
- chapter_list_impl() {}
+ chapter_list_impl_t() : m_pregap() {}
+ typedef chapter_list_impl_t<file_info_> t_self;
+ chapter_list_impl_t(const chapter_list & p_source) : m_pregap() {copy(p_source);}
- const chapter_list_impl & operator=(const chapter_list_impl & p_source) {copy(p_source); return *this;}
- const chapter_list_impl & operator=(const chapter_list & p_source) {copy(p_source); return *this;}
+ const t_self & operator=(const chapter_list & p_source) {copy(p_source); return *this;}
t_size get_chapter_count() const {return m_infos.get_size();}
const file_info & get_info(t_size p_chapter) const {return m_infos[p_chapter];}
void set_chapter_count(t_size p_count) {m_infos.set_size(p_count);}
void set_info(t_size p_chapter,const file_info & p_info) {m_infos[p_chapter] = p_info;}
+ file_info_ & get_info_(t_size p_chapter) {return m_infos[p_chapter];}
+
+ double get_pregap() const {return m_pregap;}
+ void set_pregap(double val) {PFC_ASSERT(val >= 0); m_pregap = val;}
private:
- pfc::array_t<file_info_impl> m_infos;
+ pfc::array_t<file_info_> m_infos;
+ double m_pregap;
};
+typedef chapter_list_impl_t<> chapter_list_impl;
+
//! This service implements chapter list editing operations for various file formats, e.g. for MP4 chapters or CD images with embedded cuesheets. Used by converter "encode single file with chapters" feature.
-class NOVTABLE chapterizer : public service_base
-{
+class NOVTABLE chapterizer : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(chapterizer);
public:
//! Tests whether specified path is supported by this implementation.
- //! @param p_path Path of file to examine.
- //! @param p_abort abort_callback object signaling user aborting the operation.
- virtual bool is_our_file(const char * p_path,abort_callback & p_abort) = 0;
+ //! @param p_ext Extension of the file being processed.
+ virtual bool is_our_path(const char * p_path) = 0;
//! Writes new chapter list to specified file.
//! @param p_path Path of file to modify.
@@ -67,8 +74,24 @@ public: //! @param p_abort abort_callback object signaling user aborting the operation.
virtual void get_chapters(const char * p_path,chapter_list & p_list,abort_callback & p_abort) = 0;
+ virtual bool supports_pregaps() = 0;
+
//! Static helper, tries to find chapterizer interface that supports specified file.
- static bool g_find(service_ptr_t<chapterizer> & p_out,const char * p_path,abort_callback & p_abort);
+ static bool g_find(service_ptr_t<chapterizer> & p_out,const char * p_path);
- FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(chapterizer);
-};
\ No newline at end of file + static bool g_is_pregap_capable(const char * p_path);
+};
+
+
+
+unsigned cuesheet_parse_index_time_ticks_e(const char * p_string,t_size p_length);
+double cuesheet_parse_index_time_e(const char * p_string,t_size p_length);
+
+class cuesheet_format_index_time
+{
+public:
+ cuesheet_format_index_time(double p_time);
+ inline operator const char*() const {return m_buffer;}
+private:
+ pfc::string_formatter m_buffer;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/commandline.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/commandline.cpp index 60ef4c4..b76fd73 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/commandline.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/commandline.cpp @@ -1,27 +1,12 @@ #include "foobar2000.h"
-void commandline_handler_metadb_handle::on_file(const char * url)
-{
-
- abort_callback_impl blah;
-
- {
- playlist_loader_callback_impl callback(blah);
-
- bool fail = false;
- try {
- playlist_loader::g_process_path_ex(url,callback);
- } catch(std::exception const & e) {
- console::formatter() << "Unhandled exception in playlist loader: " << e;
- fail = true;
- } catch(...) {
- console::formatter() << "Unhandled exception in playlist loader";
- fail = true;
- }
-
- if (!fail) {
- t_size n,m=callback.get_count();
- for(n=0;n<m;n++) on_file(callback.get_item(n));
- }
+void commandline_handler_metadb_handle::on_file(const char * url) {
+ metadb_handle_list handles;
+ try {
+ static_api_ptr_t<metadb_io>()->path_to_handles_simple(url, handles);
+ } catch(std::exception const & e) {
+ console::complain("Path evaluation failure", e);
+ return;
}
+ for(t_size walk = 0; walk < handles.get_size(); ++walk) on_file(handles[walk]);
}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/commandline.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/commandline.h index fd970bf..fd827b0 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/commandline.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/commandline.h @@ -1,8 +1,3 @@ -#ifndef _FOOBAR2000_SDK_COMMANDLINE_H_
-#define _FOOBAR2000_SDK_COMMANDLINE_H_
-
-#include "service.h"
-
class NOVTABLE commandline_handler : public service_base
{
public:
@@ -20,7 +15,7 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(commandline_handler);
};
-class commandline_handler_metadb_handle : public commandline_handler//helper
+class commandline_handler_metadb_handle : public commandline_handler//helper
{
protected:
virtual void on_file(const char * url);
@@ -44,7 +39,3 @@ how commandline_handler is used: template<typename T>
class commandline_handler_factory_t : public service_factory_t<T> {};
-
-
-
-#endif //_FOOBAR2000_SDK_COMMANDLINE_H_
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/completion_notify.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/completion_notify.h index c78071c..4781de6 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/completion_notify.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/completion_notify.h @@ -15,7 +15,13 @@ public: FB2K_MAKE_SERVICE_INTERFACE(completion_notify,service_base);
};
-//! Helper implementation.
+//! Implementation helper.
+class completion_notify_dummy : public completion_notify {
+public:
+ void on_completion(unsigned p_code) {}
+};
+
+//! Implementation helper.
class completion_notify_orphanable : public completion_notify {
public:
virtual void orphan() = 0;
@@ -39,10 +45,55 @@ private: };
template<typename t_receiver>
-service_ptr_t<completion_notify_orphanable> completion_notify_create(t_receiver * p_receiver,unsigned p_taskid) {
- service_ptr_t<completion_notify_impl<t_receiver> > instance = new service_impl_t<completion_notify_impl<t_receiver> >();
+service_nnptr_t<completion_notify_orphanable> completion_notify_create(t_receiver * p_receiver,unsigned p_taskid) {
+ service_nnptr_t<completion_notify_impl<t_receiver> > instance = new service_impl_t<completion_notify_impl<t_receiver> >();
instance->setup(p_receiver,p_taskid);
return instance;
}
-typedef service_ptr_t<completion_notify> completion_notify_ptr;
\ No newline at end of file +typedef service_ptr_t<completion_notify> completion_notify_ptr;
+typedef service_ptr_t<completion_notify_orphanable> completion_notify_orphanable_ptr;
+typedef service_nnptr_t<completion_notify> completion_notify_nnptr;
+typedef service_nnptr_t<completion_notify_orphanable> completion_notify_orphanable_nnptr;
+
+//! Helper base class for classes that manage nonblocking tasks and get notified back thru completion_notify interface.
+class completion_notify_receiver {
+public:
+ completion_notify::ptr create_or_get_task(unsigned p_id) {
+ completion_notify_orphanable_ptr ptr;
+ if (!m_tasks.query(p_id,ptr)) {
+ ptr = completion_notify_create(this,p_id);
+ m_tasks.set(p_id,ptr);
+ }
+ return ptr;
+ }
+ completion_notify_ptr create_task(unsigned p_id) {
+ completion_notify_orphanable_ptr ptr;
+ if (m_tasks.query(p_id,ptr)) ptr->orphan();
+ ptr = completion_notify_create(this,p_id);
+ m_tasks.set(p_id,ptr);
+ return ptr;
+ }
+ bool have_task(unsigned p_id) const {
+ return m_tasks.have_item(p_id);
+ }
+ void orphan_task(unsigned p_id) {
+ completion_notify_orphanable_ptr ptr;
+ if (m_tasks.query(p_id,ptr)) {
+ ptr->orphan();
+ m_tasks.remove(p_id);
+ }
+ }
+ ~completion_notify_receiver() {
+ orphan_all_tasks();
+ }
+ void orphan_all_tasks() {
+ m_tasks.enumerate(orphanfunc);
+ m_tasks.remove_all();
+ }
+
+ virtual void on_task_completion(unsigned p_id,unsigned p_status) {}
+private:
+ static void orphanfunc(unsigned,completion_notify_orphanable_nnptr p_item) {p_item->orphan();}
+ pfc::map_t<unsigned,completion_notify_orphanable_nnptr> m_tasks;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/component.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/component.h index ecc069d..8a81bb9 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/component.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/component.h @@ -1,44 +1,55 @@ -#ifndef _COMPONENT_H_
-#define _COMPONENT_H_
-
#include "foobar2000.h"
+// This is a helper class that gets reliably static-instantiated in all components so any special code that must be executed on startup can be shoved into its constructor.
+class foobar2000_component_globals {
+public:
+ foobar2000_component_globals() {
+#ifndef _DEBUG
+ ::OverrideCrtAbort();
+#endif
+ }
+};
+
class NOVTABLE foobar2000_client
{
public:
typedef service_factory_base* pservice_factory_base;
- enum {FOOBAR2000_CLIENT_VERSION_COMPATIBLE = 70, FOOBAR2000_CLIENT_VERSION = 72}; //changes everytime global compatibility is broken
- virtual t_uint32 FB2KAPI get_version() = 0;
- virtual pservice_factory_base FB2KAPI get_service_list() = 0;
+ enum {
+ FOOBAR2000_CLIENT_VERSION_COMPATIBLE = 72,
+ FOOBAR2000_CLIENT_VERSION = FOOBAR2000_TARGET_VERSION,
+ };
+ virtual t_uint32 get_version() = 0;
+ virtual pservice_factory_base get_service_list() = 0;
- virtual void FB2KAPI get_config(stream_writer * p_stream,abort_callback & p_abort) = 0;
- virtual void FB2KAPI set_config(stream_reader * p_stream,abort_callback & p_abort) = 0;
- virtual void FB2KAPI set_library_path(const char * path,const char * name) = 0;
- virtual void FB2KAPI services_init(bool val) = 0;
+ virtual void get_config(stream_writer * p_stream,abort_callback & p_abort) = 0;
+ virtual void set_config(stream_reader * p_stream,abort_callback & p_abort) = 0;
+ virtual void set_library_path(const char * path,const char * name) = 0;
+ virtual void services_init(bool val) = 0;
virtual bool is_debug() = 0;
protected:
foobar2000_client() {}
~foobar2000_client() {}
};
-class NOVTABLE foobar2000_api
-{
+class NOVTABLE foobar2000_api {
public:
- virtual service_class_ref FB2KAPI service_enum_find_class(const GUID & p_guid) = 0;
- virtual bool FB2KAPI service_enum_create(service_ptr_t<service_base> & p_out,service_class_ref p_class,t_size p_index) = 0;
- virtual t_size FB2KAPI service_enum_get_count(service_class_ref p_class) = 0;
- virtual HWND FB2KAPI get_main_window()=0;
- virtual bool FB2KAPI assert_main_thread()=0;
- virtual bool FB2KAPI is_main_thread()=0;
- virtual bool FB2KAPI is_shutting_down()=0;
- virtual pcchar FB2KAPI get_profile_path()=0;
- virtual bool FB2KAPI is_initializing() = 0;
+ virtual service_class_ref service_enum_find_class(const GUID & p_guid) = 0;
+ virtual bool service_enum_create(service_ptr_t<service_base> & p_out,service_class_ref p_class,t_size p_index) = 0;
+ virtual t_size service_enum_get_count(service_class_ref p_class) = 0;
+ virtual HWND get_main_window()=0;
+ virtual bool assert_main_thread()=0;
+ virtual bool is_main_thread()=0;
+ virtual bool is_shutting_down()=0;
+ virtual const char * get_profile_path()=0;
+ virtual bool is_initializing() = 0;
+
+ //New in 0.9.6
+ virtual bool is_portable_mode_enabled() = 0;
+ virtual bool is_quiet_mode_enabled() = 0;
protected:
foobar2000_api() {}
~foobar2000_api() {}
};
-extern foobar2000_api * g_api;
-
-#endif
\ No newline at end of file +extern foobar2000_api * g_foobar2000_api;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/componentversion.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/componentversion.h index a3a3d3d..b0ca6fa 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/componentversion.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/componentversion.h @@ -1,8 +1,5 @@ -#ifndef _COMPONENTVERSION_H_
-#define _COMPONENTVERSION_H_
-
-class NOVTABLE componentversion : public service_base
-{
+//! Entrypoint interface for declaring component's version information. Instead of implementing this directly, use DECLARE_COMPONENT_VERSION().
+class NOVTABLE componentversion : public service_base {
public:
virtual void get_file_name(pfc::string_base & out)=0;
virtual void get_component_name(pfc::string_base & out)=0;
@@ -12,8 +9,8 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(componentversion);
};
-class componentversion_impl_simple : public componentversion
-{
+//! Implementation helper. You typically want to use DECLARE_COMPONENT_VERSION() instead.
+class componentversion_impl_simple : public componentversion {
const char * name,*version,*about;
public:
//do not derive/override
@@ -24,8 +21,8 @@ public: explicit componentversion_impl_simple(const char * p_name,const char * p_version,const char * p_about) : name(p_name), version(p_version), about(p_about ? p_about : "") {}
};
-class componentversion_impl_copy : public componentversion
-{
+//! Implementation helper. You typically want to use DECLARE_COMPONENT_VERSION() instead.
+class componentversion_impl_copy : public componentversion {
pfc::string8 name,version,about;
public:
//do not derive/override
@@ -49,13 +46,49 @@ public: componentversion_impl_copy_factory(const char * p_name,const char * p_version,const char * p_about) : __componentversion_impl_copy_factory(p_name,p_version,p_about) {}
};
+//! Use this to declare your component's version information. Parameters must ba plain const char * string constants. \n
+//! You should have only one DECLARE_COMPONENT_VERSION() per component DLL. Having more than one will confuse component updater's version matching. \n
+//! Please keep your version numbers formatted as: N[.N[.N....]][ alpha|beta|RC[ N[.N...]] \n
+//! Sample version numbers, in ascending order: 0.9 < 0.10 < 1.0 alpha 1 < 1.0 alpha 2 < 1.0 beta 1 < 1.0 RC < 1.0 RC1 < 1.0 < 1.1 < 1.10 \n
+//! For a working sample of how foobar2000 sorts version numbers, see http://www.foobar2000.org/versionator.php \n
+//! Example: DECLARE_COMPONENT_VERSION("blah","1.3.3.7","")
#define DECLARE_COMPONENT_VERSION(NAME,VERSION,ABOUT) \
- static componentversion_impl_simple_factory g_componentversion_service(NAME,VERSION,ABOUT);
+ namespace {class componentversion_myimpl : public componentversion { public: componentversion_myimpl() {PFC_ASSERT( ABOUT );} \
+ void get_file_name(pfc::string_base & out) {out = core_api::get_my_file_name();} \
+ void get_component_name(pfc::string_base & out) {out = NAME;} \
+ void get_component_version(pfc::string_base & out) {out = VERSION;} \
+ void get_about_message(pfc::string_base & out) {out = ABOUT;} \
+ }; static service_factory_single_t<componentversion_myimpl> g_componentversion_myimpl_factory; }
+ // static componentversion_impl_simple_factory g_componentversion_service(NAME,VERSION,ABOUT);
+//! Same as DECLARE_COMPONENT_VERSION(), but parameters can be dynamically generated strings rather than compile-time constants.
#define DECLARE_COMPONENT_VERSION_COPY(NAME,VERSION,ABOUT) \
static componentversion_impl_copy_factory g_componentversion_service(NAME,VERSION,ABOUT);
-//usage: DECLARE_COMPONENT_VERSION("blah","v1.337",(const char*)NULL)
-//_copy version copies strings around instead of keeping pointers (bigger but sometimes needed, eg. if strings are created as string_printf() or something inside constructor
-#endif
\ No newline at end of file +//! \since 1.0
+//! Allows components to cleanly abort app startup in case the installation appears to have become corrupted.
+class component_installation_validator : public service_base {
+public:
+ virtual bool is_installed_correctly() = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(component_installation_validator)
+};
+
+//! Simple implementation of component_installation_validator that makes sure that our component DLL has not been renamed around by idiot users.
+class component_installation_validator_filename : public component_installation_validator {
+public:
+ component_installation_validator_filename(const char * dllName) : m_dllName(dllName) {}
+ bool is_installed_correctly() {
+ const char * path = core_api::get_my_full_path();
+ path += pfc::scan_filename(path);
+ bool retVal = ( strcmp(path, m_dllName) == 0 );
+ PFC_ASSERT( retVal );
+ return retVal;
+ }
+private:
+ const char * const m_dllName;
+};
+
+#define VALIDATE_COMPONENT_FILENAME(FN) \
+ static service_factory_single_t<component_installation_validator_filename> g_component_installation_validator_filename(FN);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_io_callback.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_io_callback.h index 157cf0c..4b83dce 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_io_callback.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_io_callback.h @@ -1,17 +1,23 @@ -#ifndef _config_io_callback_h_
-#define _config_io_callback_h_
-
-class NOVTABLE config_io_callback : public service_base
-{
+//! Implementing this interface lets you maintain your own configuration files rather than depending on the cfg_var system. \n
+//! Note that you must not make assumptions about what happens first: config_io_callback::on_read(), initialization of cfg_var values or config_io_callback::on_read() in other components. Order of these things is undefined and will change with each run. \n
+//! Use service_factory_single_t<myclass> to register your implementations. Do not call other people's implementations, core is responsible for doing that when appropriate.
+class NOVTABLE config_io_callback : public service_base {
public:
+ //! Called on startup. You can read your configuration file from here. \n
+ //! Hint: use core_api::get_profile_path() to retrieve the path of the folder where foobar2000 configuration files are stored.
virtual void on_read() = 0;
+ //! Called typically on shutdown but you should expect a call at any point after on_read(). You can write your configuration file from here.
+ //! Hint: use core_api::get_profile_path() to retrieve the path of the folder where foobar2000 configuration files are stored.
+ //! @param reset If set to true, our configuration is being reset, so you should wipe your files rather than rewrite them with current configuration.
virtual void on_write(bool reset) = 0;
- //for core use only
- static void g_on_read();
- static void g_on_write(bool reset);
-
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(config_io_callback);
};
-#endif //_config_io_callback_h_
\ No newline at end of file +//! \since 1.0
+class NOVTABLE config_io_callback_v2 : public config_io_callback {
+ FB2K_MAKE_SERVICE_INTERFACE(config_io_callback_v2, config_io_callback)
+public:
+ //! Implement optionally. Called to quickly flush recent configuration changes. If your instance of config_io_callback needs to perform timeconsuming tasks when saving, you should skip implementing this method entirely.
+ virtual void on_quicksave() = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_object.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_object.cpp index 6ff59c5..8de3814 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_object.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_object.cpp @@ -60,7 +60,7 @@ bool config_object::get_data_bool_simple(bool p_default) { bool ret = p_default;
get_data_bool(ret);
return ret;
- } catch(std::exception const &) {return p_default;}
+ } catch(...) {return p_default;}
}
t_int32 config_object::get_data_int32_simple(t_int32 p_default) {
@@ -68,7 +68,7 @@ t_int32 config_object::get_data_int32_simple(t_int32 p_default) { t_int32 ret = p_default;
get_data_int32(ret);
return ret;
- } catch(std::exception const &) {return p_default;}
+ } catch(...) {return p_default;}
}
void config_object::g_get_data_int32(const GUID & p_guid,t_int32 & p_out) {
@@ -145,18 +145,18 @@ namespace { t_size config_object::get_data_raw(void * p_out,t_size p_bytes) {
t_size ret = 0;
- get_data(&stream_writer_fixedbuffer(p_out,p_bytes,ret),abort_callback_impl());
+ get_data(&stream_writer_fixedbuffer(p_out,p_bytes,ret),abort_callback_dummy());
return ret;
}
t_size config_object::get_data_raw_length() {
t_size ret = 0;
- get_data(&stream_writer_get_length(ret),abort_callback_impl());
+ get_data(&stream_writer_get_length(ret),abort_callback_dummy());
return ret;
}
void config_object::set_data_raw(const void * p_data,t_size p_bytes, bool p_notify) {
- set_data(&stream_reader_memblock_ref(p_data,p_bytes),abort_callback_impl(),p_notify);
+ set_data(&stream_reader_memblock_ref(p_data,p_bytes),abort_callback_dummy(),p_notify);
}
void config_object::set_data_string(const char * p_data,t_size p_length) {
@@ -164,7 +164,7 @@ void config_object::set_data_string(const char * p_data,t_size p_length) { }
void config_object::get_data_string(pfc::string_base & p_out) {
- get_data(&stream_writer_string(p_out),abort_callback_impl());
+ get_data(&stream_writer_string(p_out),abort_callback_dummy());
}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_object_impl.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_object_impl.h index ccd4106..13445e0 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_object_impl.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/config_object_impl.h @@ -49,8 +49,21 @@ private: typedef service_factory_single_transparent_t<config_object_impl> config_object_factory;
template<t_size p_size>
-class config_object_fixed_impl_t : public config_object, private cfg_var
-{
+class config_object_fixed_const_impl_t : public config_object {
+public:
+ config_object_fixed_const_impl_t(const GUID & p_guid, const void * p_data) : m_guid(p_guid) {memcpy(m_data,p_data,p_size);}
+ GUID get_guid() const {return m_guid;}
+
+ void get_data(stream_writer * p_stream, abort_callback & p_abort) const { p_stream->write_object(m_data,p_size,p_abort); }
+ void set_data(stream_reader * p_stream, abort_callback & p_abort, bool p_notify) { PFC_ASSERT(!"Should not get here."); }
+
+private:
+ t_uint8 m_data[p_size];
+ const GUID m_guid;
+};
+
+template<t_size p_size>
+class config_object_fixed_impl_t : public config_object, private cfg_var {
public:
GUID get_guid() const {return cfg_var::get_guid();}
@@ -88,14 +101,17 @@ private: };
+template<t_size p_size, bool isConst> class _config_object_fixed_impl_switch;
+template<t_size p_size> class _config_object_fixed_impl_switch<p_size,false> { public: typedef config_object_fixed_impl_t<p_size> type; };
+template<t_size p_size> class _config_object_fixed_impl_switch<p_size,true> { public: typedef config_object_fixed_const_impl_t<p_size> type; };
-template<t_size p_size>
-class config_object_fixed_factory_t : public service_factory_single_transparent_t<config_object_fixed_impl_t<p_size> >
+template<t_size p_size, bool isConst = false>
+class config_object_fixed_factory_t : public service_factory_single_transparent_t< typename _config_object_fixed_impl_switch<p_size,isConst>::type >
{
public:
config_object_fixed_factory_t(const GUID & p_guid,const void * p_initval)
:
- service_factory_single_transparent_t<config_object_fixed_impl_t<p_size> >
+ service_factory_single_transparent_t< typename _config_object_fixed_impl_switch<p_size,isConst>::type >
(p_guid,p_initval)
{}
};
@@ -104,20 +120,21 @@ public: class config_object_string_factory : public config_object_factory
{
public:
- config_object_string_factory(const GUID & p_guid,const char * p_string,t_size p_string_length = infinite)
- : config_object_factory(p_guid,p_string,pfc::strlen_max(p_string,infinite)) {}
+ config_object_string_factory(const GUID & p_guid,const char * p_string,t_size p_string_length = ~0)
+ : config_object_factory(p_guid,p_string,pfc::strlen_max(p_string,~0)) {}
};
-class config_object_bool_factory : public config_object_fixed_factory_t<1>
-{
+template<bool isConst = false>
+class config_object_bool_factory_t : public config_object_fixed_factory_t<1,isConst> {
public:
- config_object_bool_factory(const GUID & p_guid,bool p_initval)
- : config_object_fixed_factory_t<1>(p_guid,&p_initval) {}
+ config_object_bool_factory_t(const GUID & p_guid,bool p_initval)
+ : config_object_fixed_factory_t<1,isConst>(p_guid,&p_initval) {}
};
+typedef config_object_bool_factory_t<> config_object_bool_factory;
-template<class T>
-class config_object_int_factory_t : public config_object_fixed_factory_t<sizeof(T)>
+template<class T,bool isConst = false>
+class config_object_int_factory_t : public config_object_fixed_factory_t<sizeof(T),isConst>
{
private:
template<class T>
@@ -154,4 +171,4 @@ private: typedef service_factory_single_transparent_t<config_object_notify_impl_simple> config_object_notify_simple_factory;
-#endif _CONFIG_OBJECT_IMPL_H_
\ No newline at end of file +#endif _CONFIG_OBJECT_IMPL_H_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/console.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/console.cpp index 2c2c352..ad1d9b1 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/console.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/console.cpp @@ -2,8 +2,8 @@ void console::info(const char * p_message) {print(p_message);}
-void console::error(const char * p_message) {formatter() << "ERROR : " << p_message;}
-void console::warning(const char * p_message) {formatter() << "WARNING : " << p_message;}
+void console::error(const char * p_message) {complain("Error", p_message);}
+void console::warning(const char * p_message) {complain("Warning", p_message);}
void console::info_location(const playable_location & src) {print_location(src);}
void console::info_location(const metadb_handle_ptr & src) {print_location(src);}
@@ -18,12 +18,19 @@ void console::print_location(const playable_location & src) formatter() << src;
}
+void console::complain(const char * what, const char * msg) {
+ formatter() << what << ": " << msg;
+}
+void console::complain(const char * what, std::exception const & e) {
+ complain(what, e.what());
+}
+
void console::print(const char* p_message)
{
if (core_api::are_services_available()) {
service_ptr_t<console_receiver> ptr;
service_enum_t<console_receiver> e;
- while(e.next(ptr)) ptr->print(p_message,infinite);
+ while(e.next(ptr)) ptr->print(p_message,~0);
}
}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/console.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/console.h index 0377259..eab6ba6 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/console.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/console.h @@ -1,6 +1,3 @@ -#ifndef _CONSOLE_H_
-#define _CONSOLE_H_
-
//! Namespace with functions for sending text to console. All functions are fully multi-thread safe, though they must not be called during dll initialization or deinitialization (e.g. static object constructors or destructors) when service system is not available.
namespace console
{
@@ -21,15 +18,27 @@ namespace console public:
~formatter() {if (!is_empty()) console::print(get_ptr());}
};
+ void complain(const char * what, const char * msg);
+ void complain(const char * what, std::exception const & e);
+
+ class timer_scope {
+ public:
+ timer_scope(const char * name) : m_name(name) {m_timer.start();}
+ ~timer_scope() {
+ try {
+ console::formatter() << m_name << ": " << pfc::format_time_ex(m_timer.query(), 6);
+ } catch(...) {}
+ }
+ private:
+ pfc::hires_timer m_timer;
+ const char * const m_name;
+ };
};
-//! Interface receiving console output. Do not reimplement or call directly; use console namespace functions instead.
-class NOVTABLE console_receiver : public service_base
-{
+//! Interface receiving console output. Do not call directly; use console namespace functions instead.
+class NOVTABLE console_receiver : public service_base {
public:
virtual void print(const char * p_message,t_size p_message_length) = 0;
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(console_receiver);
};
-
-#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/contextmenu.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/contextmenu.h index c441e1a..b8fd951 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/contextmenu.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/contextmenu.h @@ -1,6 +1,4 @@ -#ifndef _FOOBAR2000_MENU_ITEM_H_
-#define _FOOBAR2000_MENU_ITEM_H_
-
+//! Reserved for future use.
typedef void * t_glyph;
@@ -11,16 +9,22 @@ public: FLAG_DISABLED = 2,
FLAG_GRAYED = 4,
FLAG_DISABLED_GRAYED = FLAG_DISABLED|FLAG_GRAYED,
+ FLAG_RADIOCHECKED = 8, //new in 0.9.5.2 - overrides FLAG_CHECKED, set together with FLAG_CHECKED for backwards compatibility.
};
enum t_type {
- TYPE_POPUP,TYPE_COMMAND,TYPE_SEPARATOR
+ type_group,
+ type_command,
+ type_separator,
+
+ //for compatibility
+ TYPE_POPUP = type_group,TYPE_COMMAND = type_command,TYPE_SEPARATOR = type_separator,
};
- virtual bool get_display_data(pfc::string_base & p_out,unsigned & p_displayflags,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller) = 0;
+ virtual bool get_display_data(pfc::string_base & p_out,unsigned & p_displayflags,metadb_handle_list_cref p_data,const GUID & p_caller) = 0;
virtual t_type get_type() = 0;
- virtual void execute(const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller) = 0;
- virtual t_glyph get_glyph(const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller) {return 0;}//RESERVED
+ virtual void execute(metadb_handle_list_cref p_data,const GUID & p_caller) = 0;
+ virtual t_glyph get_glyph(metadb_handle_list_cref p_data,const GUID & p_caller) {return 0;}//RESERVED
virtual t_size get_children_count() = 0;
virtual contextmenu_item_node * get_child(t_size p_index) = 0;
virtual bool get_description(pfc::string_base & p_out) = 0;
@@ -58,7 +62,7 @@ class NOVTABLE contextmenu_item_node_popup : public contextmenu_item_node {
public:
t_type get_type() {return TYPE_POPUP;}
- void execute(const pfc::list_base_const_t<metadb_handle_ptr> & data,const GUID & caller) {}
+ void execute(metadb_handle_list_cref data,const GUID & caller) {}
bool get_description(pfc::string_base & p_out) {return false;}
};
@@ -66,7 +70,7 @@ class NOVTABLE contextmenu_item_node_root_popup : public contextmenu_item_node_r {
public:
t_type get_type() {return TYPE_POPUP;}
- void execute(const pfc::list_base_const_t<metadb_handle_ptr> & data,const GUID & caller) {}
+ void execute(metadb_handle_list_cref data,const GUID & caller) {}
bool get_description(pfc::string_base & p_out) {return false;}
};
@@ -74,16 +78,18 @@ class contextmenu_item_node_separator : public contextmenu_item_node {
public:
t_type get_type() {return TYPE_SEPARATOR;}
- void execute(const pfc::list_base_const_t<metadb_handle_ptr> & data,const GUID & caller) {}
+ void execute(metadb_handle_list_cref data,const GUID & caller) {}
bool get_description(pfc::string_base & p_out) {return false;}
t_size get_children_count() {return 0;}
- bool get_display_data(pfc::string_base & p_out,unsigned & p_displayflags,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller)
+ bool get_display_data(pfc::string_base & p_out,unsigned & p_displayflags,metadb_handle_list_cref p_data,const GUID & p_caller)
{
p_displayflags = 0;
p_out = "---";
return true;
}
contextmenu_item_node * get_child(t_size) {return NULL;}
+ GUID get_guid() {return pfc::guid_null;}
+ bool is_mappable_shortcut() {return false;}
};
/*!
@@ -99,36 +105,85 @@ public: DEFAULT_ON,
};
+ //! Retrieves number of menu items provided by this contextmenu_item implementation.
virtual unsigned get_num_items() = 0;
- virtual contextmenu_item_node_root * instantiate_item(unsigned p_index,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller) = 0;
+ //! Instantiates a context menu item (including sub-node tree for items that contain dynamically-generated sub-items).
+ virtual contextmenu_item_node_root * instantiate_item(unsigned p_index,metadb_handle_list_cref p_data,const GUID & p_caller) = 0;
+ //! Retrieves GUID of the context menu item.
virtual GUID get_item_guid(unsigned p_index) = 0;
+ //! Retrieves human-readable name of the context menu item.
virtual void get_item_name(unsigned p_index,pfc::string_base & p_out) = 0;
- virtual void get_item_default_path(unsigned p_index,pfc::string_base & p_out) = 0;
+ //! Obsolete since v1.0, don't use or override in new components.
+ virtual void get_item_default_path(unsigned p_index,pfc::string_base & p_out) {p_out = "";}
+ //! Retrieves item's description to show in the status bar. Set p_out to the string to be displayed and return true if you provide a description, return false otherwise.
virtual bool get_item_description(unsigned p_index,pfc::string_base & p_out) = 0;
+ //! Controls default state of context menu preferences for this item: \n
+ //! Return DEFAULT_ON to show this item in the context menu by default - useful for most cases. \n
+ //! Return DEFAULT_OFF to hide this item in the context menu by default - useful for rarely used utility commands. \n
+ //! Return FORCE_OFF to hide this item by default and prevent the user from making it visible (very rarely used). \n
+ //! Values returned by this method should be constant for this context menu item and not change later. Do not use this to conditionally hide the item - return false from get_display_data() instead.
virtual t_enabled_state get_enabled_state(unsigned p_index) = 0;
- virtual void item_execute_simple(unsigned p_index,const GUID & p_node,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller) = 0;
+ //! Executes the menu item command without going thru the instantiate_item path. For items with dynamically-generated sub-items, p_node is identifies of the sub-item command to execute.
+ virtual void item_execute_simple(unsigned p_index,const GUID & p_node,metadb_handle_list_cref p_data,const GUID & p_caller) = 0;
+
+ bool item_get_display_data_root(pfc::string_base & p_out,unsigned & displayflags,unsigned p_index,metadb_handle_list_cref p_data,const GUID & p_caller);
+ bool item_get_display_data(pfc::string_base & p_out,unsigned & displayflags,unsigned p_index,const GUID & p_node,metadb_handle_list_cref p_data,const GUID & p_caller);
- bool item_get_display_data_root(pfc::string_base & p_out,unsigned & displayflags,unsigned p_index,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller);
- bool item_get_display_data(pfc::string_base & p_out,unsigned & displayflags,unsigned p_index,const GUID & p_node,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller);
+ GUID get_parent_fallback();
+ GUID get_parent_();
- static const GUID caller_now_playing;
+ //! Deprecated - use caller_active_playlist_selection instead.
static const GUID caller_playlist;
+
+ static const GUID caller_active_playlist_selection, caller_active_playlist, caller_playlist_manager, caller_now_playing, caller_keyboard_shortcut_list, caller_media_library_viewer;
static const GUID caller_undefined;
- static const GUID caller_keyboard_shortcut_list;
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(contextmenu_item);
};
+//! \since 1.0
+class NOVTABLE contextmenu_item_v2 : public contextmenu_item {
+ FB2K_MAKE_SERVICE_INTERFACE(contextmenu_item_v2, contextmenu_item)
+public:
+ virtual double get_sort_priority() {return 0;}
+ virtual GUID get_parent() {return get_parent_fallback();}
+};
+
//! contextmenu_item implementation helper for implementing non-dynamically-generated context menu items; derive from this instead of from contextmenu_item directly if your menu items are static.
-class NOVTABLE contextmenu_item_simple : public contextmenu_item
-{
+class NOVTABLE contextmenu_item_simple : public contextmenu_item_v2 {
private:
- class contextmenu_item_node_impl : public contextmenu_item_node_root_leaf
+public:
+ //! Same as contextmenu_item_node::t_flags.
+ enum t_flags
{
+ FLAG_CHECKED = 1,
+ FLAG_DISABLED = 2,
+ FLAG_GRAYED = 4,
+ FLAG_DISABLED_GRAYED = FLAG_DISABLED|FLAG_GRAYED,
+ FLAG_RADIOCHECKED = 8, //new in 0.9.5.2 - overrides FLAG_CHECKED, set together with FLAG_CHECKED for backwards compatibility.
+ };
+
+
+ // Functions to be overridden by implementers (some are not mandatory).
+ virtual t_enabled_state get_enabled_state(unsigned p_index) {return contextmenu_item::DEFAULT_ON;}
+ virtual unsigned get_num_items() = 0;
+ virtual void get_item_name(unsigned p_index,pfc::string_base & p_out) = 0;
+ virtual void context_command(unsigned p_index,metadb_handle_list_cref p_data,const GUID& p_caller) = 0;
+ virtual bool context_get_display(unsigned p_index,metadb_handle_list_cref p_data,pfc::string_base & p_out,unsigned & p_displayflags,const GUID & p_caller) {
+ PFC_ASSERT(p_index>=0 && p_index<get_num_items());
+ get_item_name(p_index,p_out);
+ return true;
+ }
+ virtual GUID get_item_guid(unsigned p_index) = 0;
+ virtual bool get_item_description(unsigned p_index,pfc::string_base & p_out) = 0;
+
+
+private:
+ class contextmenu_item_node_impl : public contextmenu_item_node_root_leaf {
public:
contextmenu_item_node_impl(contextmenu_item_simple * p_owner,unsigned p_index) : m_owner(p_owner), m_index(p_index) {}
- bool get_display_data(pfc::string_base & p_out,unsigned & p_displayflags,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller) {return m_owner->get_display_data(m_index,p_data,p_out,p_displayflags,p_caller);}
- void execute(const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller) {m_owner->context_command(m_index,p_data,p_caller);}
+ bool get_display_data(pfc::string_base & p_out,unsigned & p_displayflags,metadb_handle_list_cref p_data,const GUID & p_caller) {return m_owner->get_display_data(m_index,p_data,p_out,p_displayflags,p_caller);}
+ void execute(metadb_handle_list_cref p_data,const GUID & p_caller) {m_owner->context_command(m_index,p_data,p_caller);}
bool get_description(pfc::string_base & p_out) {return m_owner->get_item_description(m_index,p_out);}
GUID get_guid() {return pfc::guid_null;}
bool is_mappable_shortcut() {return m_owner->item_is_mappable_shortcut(m_index);}
@@ -137,13 +192,13 @@ private: unsigned m_index;
};
- contextmenu_item_node_root * instantiate_item(unsigned p_index,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller)
+ contextmenu_item_node_root * instantiate_item(unsigned p_index,metadb_handle_list_cref p_data,const GUID & p_caller)
{
return new contextmenu_item_node_impl(this,p_index);
}
- void item_execute_simple(unsigned p_index,const GUID & p_node,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID & p_caller)
+ void item_execute_simple(unsigned p_index,const GUID & p_node,metadb_handle_list_cref p_data,const GUID & p_caller)
{
if (p_node == pfc::guid_null)
context_command(p_index,p_data,p_caller);
@@ -155,7 +210,7 @@ private: }
- virtual bool get_display_data(unsigned n,const pfc::list_base_const_t<metadb_handle_ptr> & data,pfc::string_base & p_out,unsigned & displayflags,const GUID & caller)
+ virtual bool get_display_data(unsigned n,metadb_handle_list_cref data,pfc::string_base & p_out,unsigned & displayflags,const GUID & caller)
{
bool rv = false;
assert(n>=0 && n<get_num_items());
@@ -165,37 +220,16 @@ private: }
return rv;
}
-public:
- //! Same as contextmenu_item_node::t_flags.
- enum t_flags
- {
- FLAG_CHECKED = 1,
- FLAG_DISABLED = 2,
- FLAG_GRAYED = 4,
- FLAG_DISABLED_GRAYED = FLAG_DISABLED|FLAG_GRAYED,
- };
-
-
- virtual t_enabled_state get_enabled_state(unsigned p_index) {return contextmenu_item::DEFAULT_ON;}
- virtual unsigned get_num_items()=0;
- virtual void get_item_name(unsigned p_index,pfc::string_base & p_out)=0;
- virtual void get_item_default_path(unsigned p_index,pfc::string_base & p_out) = 0;
- virtual void context_command(unsigned p_index,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID& p_caller)=0;
- virtual bool context_get_display(unsigned p_index,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,pfc::string_base & p_out,unsigned & p_displayflags,const GUID & p_caller) {
- PFC_ASSERT(p_index>=0 && p_index<get_num_items());
- get_item_name(p_index,p_out);
- return true;
- }
- virtual GUID get_item_guid(unsigned p_index) = 0;
- virtual bool get_item_description(unsigned p_index,pfc::string_base & p_out) = 0;
};
+//! Helper.
template<typename T>
class contextmenu_item_factory_t : public service_factory_single_t<T> {};
+//! Helper.
#define DECLARE_CONTEXT_MENU_ITEM(P_CLASSNAME,P_NAME,P_DEFAULTPATH,P_FUNC,P_GUID,P_DESCRIPTION) \
namespace { \
class P_CLASSNAME : public contextmenu_item_simple { \
@@ -203,7 +237,7 @@ class contextmenu_item_factory_t : public service_factory_single_t<T> {}; unsigned get_num_items() {return 1;} \
void get_item_name(unsigned p_index,pfc::string_base & p_out) {p_out = P_NAME;} \
void get_item_default_path(unsigned p_index,pfc::string_base & p_out) {p_out = P_DEFAULTPATH;} \
- void context_command(unsigned p_index,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID& p_caller) {P_FUNC(p_data);} \
+ void context_command(unsigned p_index,metadb_handle_list_cref p_data,const GUID& p_caller) {P_FUNC(p_data);} \
GUID get_item_guid(unsigned p_index) {return P_GUID;} \
bool get_item_description(unsigned p_index,pfc::string_base & p_out) {if (P_DESCRIPTION[0] == 0) return false;p_out = P_DESCRIPTION; return true;} \
}; \
@@ -212,4 +246,91 @@ class contextmenu_item_factory_t : public service_factory_single_t<T> {}; -#endif //_FOOBAR2000_MENU_ITEM_H_
\ No newline at end of file +
+//! New in 0.9.5.1. Static methods safe to use in prior versions as it will use slow fallback mode when the service isn't present. \n
+//! Functionality provided by menu_item_resolver methods isn't much different from just walking all registered contextmenu_item / mainmenu_commands implementations to find the command we want, but it uses a hint map to locate the service we're looking for without walking all of them which may be significantly faster in certain scenarios.
+class menu_item_resolver : public service_base {
+public:
+ virtual bool resolve_context_command(const GUID & id, service_ptr_t<class contextmenu_item> & out, t_uint32 & out_index) = 0;
+ virtual bool resolve_main_command(const GUID & id, service_ptr_t<class mainmenu_commands> & out, t_uint32 & out_index) = 0;
+
+ static bool g_resolve_context_command(const GUID & id, service_ptr_t<class contextmenu_item> & out, t_uint32 & out_index);
+ static bool g_resolve_main_command(const GUID & id, service_ptr_t<class mainmenu_commands> & out, t_uint32 & out_index);
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(menu_item_resolver)
+};
+
+//! \since 1.0
+class NOVTABLE contextmenu_group : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(contextmenu_group);
+public:
+ virtual GUID get_guid() = 0;
+ virtual GUID get_parent() = 0;
+ virtual double get_sort_priority() = 0;
+};
+
+//! \since 1.0
+class NOVTABLE contextmenu_group_popup : public contextmenu_group {
+ FB2K_MAKE_SERVICE_INTERFACE(contextmenu_group_popup, contextmenu_group)
+public:
+ virtual void get_display_string(pfc::string_base & out) = 0;
+ void get_name(pfc::string_base & out) {get_display_string(out);}
+};
+
+class contextmenu_groups {
+public:
+ static const GUID root, utilities, tagging, replaygain, fileoperations, playbackstatistics, properties, convert, legacy;
+};
+
+class contextmenu_group_impl : public contextmenu_group {
+public:
+ contextmenu_group_impl(const GUID & guid, const GUID & parent, double sortPriority = 0) : m_guid(guid), m_parent(parent), m_sortPriority(sortPriority) {}
+ GUID get_guid() {return m_guid;}
+ GUID get_parent() {return m_parent;}
+ double get_sort_priority() {return m_sortPriority;}
+private:
+ const GUID m_guid, m_parent;
+ const double m_sortPriority;
+};
+
+class contextmenu_group_popup_impl : public contextmenu_group_popup {
+public:
+ contextmenu_group_popup_impl(const GUID & guid, const GUID & parent, const char * name, double sortPriority = 0) : m_guid(guid), m_parent(parent), m_sortPriority(sortPriority), m_name(name) {}
+ GUID get_guid() {return m_guid;}
+ GUID get_parent() {return m_parent;}
+ double get_sort_priority() {return m_sortPriority;}
+ void get_display_string(pfc::string_base & out) {out = m_name;}
+private:
+ const GUID m_guid, m_parent;
+ const double m_sortPriority;
+ const char * const m_name;
+};
+
+
+
+namespace contextmenu_priorities {
+ enum {
+ root_queue = -100,
+ root_main = -50,
+ root_tagging,
+ root_fileoperations,
+ root_convert,
+ root_utilities,
+ root_replaygain,
+ root_playbackstatistics,
+ root_legacy = 99,
+ root_properties = 100,
+ };
+};
+
+
+
+class contextmenu_group_factory : public service_factory_single_t<contextmenu_group_impl> {
+public:
+ contextmenu_group_factory(const GUID & guid, const GUID & parent, double sortPriority = 0) : service_factory_single_t<contextmenu_group_impl>(guid, parent, sortPriority) {}
+};
+
+class contextmenu_group_popup_factory : public service_factory_single_t<contextmenu_group_popup_impl> {
+public:
+ contextmenu_group_popup_factory(const GUID & guid, const GUID & parent, const char * name, double sortPriority = 0) : service_factory_single_t<contextmenu_group_popup_impl>(guid, parent, name, sortPriority) {}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/contextmenu_manager.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/contextmenu_manager.h index 3493617..ad50b29 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/contextmenu_manager.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/contextmenu_manager.h @@ -1,7 +1,3 @@ -#ifndef _FOOBAR2000_MENU_MANAGER_H_
-#define _FOOBAR2000_MENU_MANAGER_H_
-
-
class NOVTABLE keyboard_shortcut_manager : public service_base
{
public:
@@ -20,32 +16,39 @@ public: virtual bool process_keydown_ex(shortcut_type type,const pfc::list_base_const_t<metadb_handle_ptr> & data,unsigned keycode,const GUID & caller)=0;
bool on_keydown(shortcut_type type,WPARAM wp);
bool on_keydown_context(const pfc::list_base_const_t<metadb_handle_ptr> & data,WPARAM wp,const GUID & caller);
+
bool on_keydown_auto(WPARAM wp);
bool on_keydown_auto_playlist(WPARAM wp);
bool on_keydown_auto_context(const pfc::list_base_const_t<metadb_handle_ptr> & data,WPARAM wp,const GUID & caller);
- virtual bool get_key_description_for_action(const GUID & p_command,const GUID & p_subcommand, pfc::string_base & out, shortcut_type type, bool is_global)=0;
+ bool on_keydown_restricted_auto(WPARAM wp);
+ bool on_keydown_restricted_auto_playlist(WPARAM wp);
+ bool on_keydown_restricted_auto_context(const pfc::list_base_const_t<metadb_handle_ptr> & data,WPARAM wp,const GUID & caller);
-
- FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(keyboard_shortcut_manager);
-/*
-usage:
-
- in a windowproc:
+ virtual bool get_key_description_for_action(const GUID & p_command,const GUID & p_subcommand, pfc::string_base & out, shortcut_type type, bool is_global)=0;
- case WM_KEYDOWN:
- keyboard_shortcut_manager::get()->on_keydown(wparam);
- break;
- case WM_SYSKEYDOWN:
- keyboard_shortcut_manager::get()->on_keydown(wparam);
- break;
+ static bool is_text_key(t_uint32 vkCode);
+ static bool is_typing_key(t_uint32 vkCode);
+ static bool is_typing_key_combo(t_uint32 vkCode, t_uint32 modifiers);
+ static bool is_typing_modifier(t_uint32 flags);
+ static bool is_typing_message(HWND editbox, const MSG * msg);
+ static bool is_typing_message(const MSG * msg);
- return value is true if key got translated to one of user-configured actions, false if not
- */
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(keyboard_shortcut_manager);
};
+//! New in 0.9.5.
+class keyboard_shortcut_manager_v2 : public keyboard_shortcut_manager {
+public:
+ //! Deprecates old keyboard_shortcut_manager methods. If the action requires selected items, they're obtained from ui_selection_manager API automatically.
+ virtual bool process_keydown_simple(t_uint32 keycode) = 0;
+
+ //! Helper for use with message filters.
+ bool pretranslate_message(const MSG * msg, HWND thisPopupWnd);
+ FB2K_MAKE_SERVICE_INTERFACE(keyboard_shortcut_manager_v2,keyboard_shortcut_manager);
+};
class NOVTABLE contextmenu_node {
public:
@@ -71,22 +74,33 @@ class NOVTABLE contextmenu_manager : public service_base public:
enum
{
+ flag_show_shortcuts = 1 << 0,
+ flag_show_shortcuts_global = 1 << 1,
+ //! \since 1.0
+ //! To control which commands are shown, you should specify either flag_view_reduced or flag_view_full. If neither is specified, the implementation will decide automatically based on shift key being pressed, for backwards compatibility.
+ flag_view_reduced = 1 << 2,
+ //! \since 1.0
+ //! To control which commands are shown, you should specify either flag_view_reduced or flag_view_full. If neither is specified, the implementation will decide automatically based on shift key being pressed, for backwards compatibility.
+ flag_view_full = 1 << 3,
+
+ //for compatibility
FLAG_SHOW_SHORTCUTS = 1,
FLAG_SHOW_SHORTCUTS_GLOBAL = 2,
};
- virtual void init_context(const pfc::list_base_const_t<metadb_handle_ptr> & data,unsigned flags)=0;//flags - see FLAG_* above
- virtual void init_context_playlist(unsigned flags)=0;
- virtual contextmenu_node * get_root()=0;//releasing contextmenu_manager service releaases nodes; root may be null in case of error or something
+
+ virtual void init_context(metadb_handle_list_cref data,unsigned flags) = 0;
+ virtual void init_context_playlist(unsigned flags) = 0;
+ virtual contextmenu_node * get_root() = 0;//releasing contextmenu_manager service releaases nodes; root may be null in case of error or something
virtual contextmenu_node * find_by_id(unsigned id)=0;
virtual void set_shortcut_preference(const keyboard_shortcut_manager::shortcut_type * data,unsigned count)=0;
- static void g_create(service_ptr_t<contextmenu_manager> & p_out) {p_out = standard_api_create_t<contextmenu_manager>();}
+ static void g_create(service_ptr_t<contextmenu_manager> & p_out) {standard_api_create_t(p_out);}
#ifdef WIN32
static void win32_build_menu(HMENU menu,contextmenu_node * parent,int base_id,int max_id);//menu item identifiers are base_id<=N<base_id+max_id (if theres too many items, they will be clipped)
- static void win32_run_menu_context(HWND parent,const pfc::list_base_const_t<metadb_handle_ptr> & data, const POINT * pt = 0,unsigned flags = 0);
+ static void win32_run_menu_context(HWND parent,metadb_handle_list_cref data, const POINT * pt = 0,unsigned flags = 0);
static void win32_run_menu_context_playlist(HWND parent,const POINT * pt = 0,unsigned flags = 0);
void win32_run_menu_popup(HWND parent,const POINT * pt = 0);
void win32_build_menu(HMENU menu,int base_id,int max_id) {win32_build_menu(menu,get_root(),base_id,max_id);}
@@ -94,15 +108,21 @@ public: #endif
- virtual void init_context_ex(const pfc::list_base_const_t<metadb_handle_ptr> & data,unsigned flags,const GUID & caller)=0;
+ virtual void init_context_ex(metadb_handle_list_cref data,unsigned flags,const GUID & caller)=0;
virtual bool init_context_now_playing(unsigned flags)=0;//returns false if not playing
bool execute_by_id(unsigned id);
+ bool get_description_by_id(unsigned id,pfc::string_base & out);
+
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(contextmenu_manager);
};
-
-
-#endif //_FOOBAR2000_MENU_MANAGER_H_
\ No newline at end of file +//! \since 1.0
+class NOVTABLE contextmenu_group_manager : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(contextmenu_group_manager)
+public:
+ virtual GUID path_to_group(const char * path) = 0;
+ virtual void group_to_path(const GUID & group, pfc::string_base & path) = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/core_api.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/core_api.h index d63d6eb..808f988 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/core_api.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/core_api.h @@ -1,11 +1,8 @@ -#ifndef _CORE_API_H_
-#define _CORE_API_H_
+#ifndef _FB2K_CORE_API_H_
+#define _FB2K_CORE_API_H_
namespace core_api {
- //! Exception thrown by APIs locked to main app thread when called from another thread.
- PFC_DECLARE_EXCEPTION(exception_wrong_thread,pfc::exception_bug_check,"This method can be called only from the main thread");
-
//! Retrieves HINSTANCE of calling DLL.
HINSTANCE get_my_instance();
//! Retrieves filename of calling dll, excluding extension, e.g. "foo_asdf"
@@ -18,7 +15,7 @@ namespace core_api { bool are_services_available();
//! Tests whether calling thread is main app thread, and shows diagnostic message in debugger output if it's not.
bool assert_main_thread();
- //! Throws exception_wrong_thread if calling thread is not main app thread.
+ //! Triggers a bug check if the calling thread is not the main app thread.
void ensure_main_thread();
//! Returns true if calling thread is main app thread, false otherwise.
bool is_main_thread();
@@ -28,6 +25,14 @@ namespace core_api { bool is_initializing();
//! Returns filesystem path to directory with user settings, e.g. file://c:\documents_and_settings\username\blah\foobar2000
const char * get_profile_path();
+
+ //! Returns whether foobar2000 has been installed in "portable" mode.
+ bool is_portable_mode_enabled();
+
+ //! Returns whether foobar2000 is currently running in quiet mode. \n
+ //! Quiet mode bypasses all GUI features, disables Media Library and does not save any changes to app configuration. \n
+ //! Your component should not display any forms of user interface when running in quiet mode, as well as avoid saving configuration on its own (no need to worry if you only rely on cfg_vars or config_io_callback, they will simply be ignored on shutdown).
+ bool is_quiet_mode_enabled();
};
-#endif
\ No newline at end of file +#endif
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/coreversion.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/coreversion.h index 38436a6..f786444 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/coreversion.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/coreversion.h @@ -1,6 +1,3 @@ -#ifndef _COREVERSION_H_
-#define _COREVERSION_H_
-
class NOVTABLE core_version_info : public service_base {
public:
virtual const char * get_version_string() = 0;
@@ -19,7 +16,21 @@ public: virtual const char * get_version_as_text() = 0;//"N.N.N.N"
virtual t_core_version_data get_version() = 0;
+ //! Determine whether running foobar2000 version is newer or equal to the specified version, eg. test_version(0,9,5,0) for 0.9.5.
+ bool test_version(t_uint32 major, t_uint32 minor1, t_uint32 minor2, t_uint32 minor3) {
+ const t_core_version_data v = get_version();
+ if (v.m_major < major) return false;
+ else if (v.m_major > major) return true;
+ // major version matches
+ else if (v.m_minor1 < minor1) return false;
+ else if (v.m_minor1 > minor1) return true;
+ // minor1 version matches
+ else if (v.m_minor2 < minor2) return false;
+ else if (v.m_minor2 > minor2) return true;
+ // minor2 version matches
+ else if (v.m_minor3 < minor3) return false;
+ else return true;
+ }
+
FB2K_MAKE_SERVICE_INTERFACE(core_version_info_v2, core_version_info);
};
-
-#endif //_COREVERSION_H_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/decode_postprocessor.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/decode_postprocessor.h new file mode 100644 index 0000000..25d4c1c --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/decode_postprocessor.h @@ -0,0 +1,161 @@ +//! \since 1.1
+//! This service is essentially a special workaround to easily decode DTS/HDCD content stored in files pretending to contain plain PCM data. \n
+//! Callers: Instead of calling this directly, you probably want to use input_postprocessed template. \n
+//! Implementers: This service is called only by specific decoders, not by all of them! Implementing your own to provide additional functionality is not recommended!
+class decode_postprocessor_instance : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(decode_postprocessor_instance, service_base);
+public:
+ enum {
+ //! End of stream. Flush any buffered data during this call.
+ flag_eof = 1 << 0,
+ //! Stream has already been altered by another instance.
+ flag_altered = 1 << 1,
+ };
+ //! @returns True if the chunk list has been altered by the call, false if not - to tell possible other running instances whether the stream has already been altered or not.
+ virtual bool run(dsp_chunk_list & p_chunk_list,t_uint32 p_flags,abort_callback & p_abort) = 0;
+ virtual bool get_dynamic_info(file_info & p_out) = 0;
+ virtual void flush() = 0;
+ virtual double get_buffer_ahead() = 0;
+};
+
+//! \since 1.1
+//! Entrypoint class for instantiating decode_postprocessor_instance. See decode_postprocessor_instance documentation for more information. \n
+//! Instead of calling this directly, you probably want to use input_postprocessed template.
+class decode_postprocessor_entry : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(decode_postprocessor_entry)
+public:
+ virtual bool instantiate(const file_info & info, decode_postprocessor_instance::ptr & out) = 0;
+};
+
+
+//! Helper class for managing decode_postprocessor_instance objects. See also: input_postprocessed.
+class decode_postprocessor {
+public:
+ typedef decode_postprocessor_instance::ptr item;
+ void initialize(const file_info & info) {
+ m_items.remove_all();
+ service_enum_t<decode_postprocessor_entry> e;
+ decode_postprocessor_entry::ptr ptr;
+ while(e.next(ptr)) {
+ item i;
+ if (ptr->instantiate(info, i)) m_items += i;
+ }
+ }
+ void run(dsp_chunk_list & p_chunk_list,bool p_eof,abort_callback & p_abort) {
+ t_uint32 flags = p_eof ? decode_postprocessor_instance::flag_eof : 0;
+ for(t_size walk = 0; walk < m_items.get_size(); ++walk) {
+ if (m_items[walk]->run(p_chunk_list, flags, p_abort)) flags |= decode_postprocessor_instance::flag_altered;
+ }
+ }
+ void flush() {
+ for(t_size walk = 0; walk < m_items.get_size(); ++walk) {
+ m_items[walk]->flush();
+ }
+ }
+ static bool should_bother() {
+ return service_factory_base::is_service_present(decode_postprocessor_entry::class_guid);
+ }
+ bool is_active() const {
+ return m_items.get_size() > 0;
+ }
+ bool get_dynamic_info(file_info & p_out) {
+ bool rv = false;
+ for(t_size walk = 0; walk < m_items.get_size(); ++walk) {
+ if (m_items[walk]->get_dynamic_info(p_out)) rv = true;
+ }
+ return rv;
+ }
+ void close() {
+ m_items.remove_all();
+ }
+ double get_buffer_ahead() {
+ double acc = 0;
+ for(t_size walk = 0; walk < m_items.get_size(); ++walk) {
+ pfc::max_acc(acc, m_items[walk]->get_buffer_ahead());
+ }
+ return acc;
+ }
+private:
+ pfc::list_t<item> m_items;
+};
+
+//! Generic template to add decode_postprocessor support to your input class. Works with both single-track and multi-track inputs.
+template<typename baseclass> class input_postprocessed : public baseclass {
+public:
+ void decode_initialize(t_uint32 p_subsong,unsigned p_flags,abort_callback & p_abort) {
+ m_chunks.remove_all();
+ m_haveEOF = false;
+ m_toSkip = 0;
+ m_postproc.close();
+ if ((p_flags & input_flag_testing_integrity) == 0 && m_postproc.should_bother()) {
+ file_info_impl info;
+ get_info(p_subsong, info, p_abort);
+ m_postproc.initialize(info);
+ }
+ baseclass::decode_initialize(p_subsong, p_flags, p_abort);
+ }
+ void decode_initialize(unsigned p_flags,abort_callback & p_abort) {
+ m_chunks.remove_all();
+ m_haveEOF = false;
+ m_toSkip = 0;
+ m_postproc.close();
+ if ((p_flags & (input_flag_testing_integrity|input_flag_no_postproc)) == 0 && m_postproc.should_bother()) {
+ file_info_impl info;
+ get_info(info, p_abort);
+ m_postproc.initialize(info);
+ }
+ baseclass::decode_initialize(p_flags, p_abort);
+ }
+ bool decode_run(audio_chunk & p_chunk,abort_callback & p_abort) {
+ if (m_postproc.is_active()) {
+ for(;;) {
+ p_abort.check();
+ if (m_chunks.get_count() > 0) {
+ audio_chunk * c = m_chunks.get_item(0);
+ if (m_toSkip > 0) {
+ if (!c->process_skip(m_toSkip)) {
+ m_chunks.remove_by_idx(0);
+ continue;
+ }
+ }
+ p_chunk = *c;
+ m_chunks.remove_by_idx(0);
+ return true;
+ }
+ if (m_haveEOF) return false;
+ if (!baseclass::decode_run(*m_chunks.insert_item(0), p_abort)) {
+ m_haveEOF = true;
+ m_chunks.remove_by_idx(0);
+ }
+ m_postproc.run(m_chunks, m_haveEOF, p_abort);
+ }
+ } else {
+ return baseclass::decode_run(p_chunk, p_abort);
+ }
+ }
+ bool decode_run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) {
+ if (m_postproc.is_active()) {
+ throw pfc::exception_not_implemented();
+ } else {
+ return baseclass::decode_run_raw(p_chunk, p_raw, p_abort);
+ }
+ }
+ bool decode_get_dynamic_info(file_info & p_out, double & p_timestamp_delta) {
+ bool rv = baseclass::decode_get_dynamic_info(p_out, p_timestamp_delta);
+ if (m_postproc.get_dynamic_info(p_out)) rv = true;
+ return rv;
+ }
+ void decode_seek(double p_seconds,abort_callback & p_abort) {
+ m_chunks.remove_all();
+ m_haveEOF = false;
+ m_postproc.flush();
+ double target = pfc::max_t<double>(0, p_seconds - m_postproc.get_buffer_ahead());
+ m_toSkip = p_seconds - target;
+ baseclass::decode_seek(target, p_abort);
+ }
+private:
+ dsp_chunk_list_impl m_chunks;
+ bool m_haveEOF;
+ double m_toSkip;
+ decode_postprocessor m_postproc;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp.cpp index d7b39d5..db4d945 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp.cpp @@ -349,6 +349,14 @@ bool resampler_entry::g_create(service_ptr_t<dsp> & p_out,unsigned p_srate_from, }
+bool dsp_chain_config::equals(dsp_chain_config const & v1, dsp_chain_config const & v2) {
+ const t_size count = v1.get_count();
+ if (count != v2.get_count()) return false;
+ for(t_size walk = 0; walk < count; ++walk) {
+ if (v1.get_item(walk) != v2.get_item(walk)) return false;
+ }
+ return true;
+}
void dsp_chain_config::get_name_list(pfc::string_base & p_out) const
{
const t_size count = get_count();
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp.h index 07a617d..55e7585 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp.h @@ -1,3 +1,4 @@ +//! Interface to a DSP chunk list. A DSP chunk list object is passed to the DSP chain each time, since DSPs are allowed to remove processed chunks or insert new ones.
class NOVTABLE dsp_chunk_list {
public:
virtual t_size get_count() const = 0;
@@ -79,7 +80,7 @@ public: virtual void run_v2(dsp_chunk_list * p_chunk_list,const metadb_handle_ptr & p_cur_file,int p_flags,abort_callback & p_abort) = 0;
private:
void run(dsp_chunk_list * p_chunk_list,const metadb_handle_ptr & p_cur_file,int p_flags) {
- run_v2(p_chunk_list,p_cur_file,p_flags,abort_callback_impl());
+ run_v2(p_chunk_list,p_cur_file,p_flags,abort_callback_dummy());
}
FB2K_MAKE_SERVICE_INTERFACE(dsp_v2,dsp);
@@ -104,12 +105,17 @@ private: metadb_handle* m_cur_file;
void run_v2(dsp_chunk_list * p_list,const metadb_handle_ptr & p_cur_file,int p_flags,abort_callback & p_abort);
protected:
- bool get_cur_file(metadb_handle_ptr & p_out) {p_out = m_cur_file; return p_out.is_valid();}// call only from on_chunk / on_endoftrack (on_endoftrack will give info on track being finished); may return null !!
+ //! Call only from on_chunk / on_endoftrack (on_endoftrack will give info on track being finished).\n
+ //! May return false when there's no known track and the metadb_handle ptr will be empty/null.
+ bool get_cur_file(metadb_handle_ptr & p_out) {p_out = m_cur_file; return p_out.is_valid();}
dsp_impl_base_t() : m_list(NULL), m_cur_file(NULL), m_chunk_ptr(0) {}
- audio_chunk * insert_chunk(t_size p_hint_size = 0) //call only from on_endoftrack / on_endofplayback / on_chunk
- {//hint_size - optional, amout of buffer space you want to use
+ //! Inserts a new chunk of audio data. \n
+ //! You can call this only from on_chunk(), on_endofplayback() and on_endoftrack(). You're NOT allowed to call this from flush() which should just drop any queued data.
+ //! @param hint_size Optional, amount of buffer space that you require (in audio_samples). This is just a hint for memory allocation logic and will not cause the framework to allocate the chunk for you.
+ //! @returns A pointer to the newly allocated chunk. Pass the audio data you want to insert to this chunk object. The chunk is owned by the framework, you can't delete it etc.
+ audio_chunk * insert_chunk(t_size p_hint_size = 0) {
PFC_ASSERT(m_list != NULL);
return m_list->insert_item(m_chunk_ptr++,p_hint_size);
}
@@ -134,7 +140,8 @@ protected: public:
//! To be overridden by a DSP implementation.\n
- //! Flushes the DSP (reinitializes / drops any buffered data). Called after seeking, etc.
+ //! Flushes the DSP (drops any buffered data). The implementation should reset the DSP to the same state it was in before receiving any audio data. \n
+ //! Called after seeking, etc.
virtual void flush() = 0;
//! To be overridden by a DSP implementation.\n
//! Retrieves amount of data buffered by the DSP, for syncing visualisation.
@@ -146,8 +153,8 @@ public: //! Signaling this may interfere with gapless playback in certain scenarios (forces flush of DSPs placed before you) so don't use it unless you have reasons to.
virtual bool need_track_change_mark() = 0;
private:
- dsp_impl_base_t(const t_self&) {throw pfc::exception_bug_check();}
- const t_self & operator=(const t_self &) {throw pfc::exception_bug_check();}
+ dsp_impl_base_t(const t_self&) {throw pfc::exception_bug_check_v2();}
+ const t_self & operator=(const t_self &) {throw pfc::exception_bug_check_v2();}
};
template<class t_baseclass>
@@ -396,8 +403,21 @@ public: void instantiate(service_list_t<dsp> & p_out);
void get_name_list(pfc::string_base & p_out) const;
+
+ static bool equals(dsp_chain_config const & v1, dsp_chain_config const & v2);
+
+ bool operator==(const dsp_chain_config & other) const {return equals(*this, other);}
+ bool operator!=(const dsp_chain_config & other) const {return !equals(*this, other);}
};
+FB2K_STREAM_READER_OVERLOAD(dsp_chain_config) {
+ value.contents_from_stream(&stream.m_stream, stream.m_abort); return stream;
+}
+
+FB2K_STREAM_WRITER_OVERLOAD(dsp_chain_config) {
+ value.contents_to_stream(&stream.m_stream, stream.m_abort); return stream;
+}
+
class dsp_chain_config_impl : public dsp_chain_config
{
public:
@@ -432,4 +452,42 @@ public: private:
dsp_chain_config_impl m_data;
-};
\ No newline at end of file +};
+
+
+
+
+//! Helper.
+class dsp_preset_parser : public stream_reader_formatter<> {
+public:
+ dsp_preset_parser(const dsp_preset & in) : m_data(in), _m_stream(in.get_data(),in.get_data_size()), stream_reader_formatter(_m_stream,_m_abort) {}
+
+ void reset() {_m_stream.reset();}
+ t_size get_remaining() const {return _m_stream.get_remaining();}
+
+ void assume_empty() const {
+ if (get_remaining() != 0) throw exception_io_data();
+ }
+
+ GUID get_owner() const {return m_data.get_owner();}
+private:
+ const dsp_preset & m_data;
+ abort_callback_dummy _m_abort;
+ stream_reader_memblock_ref _m_stream;
+};
+
+//! Helper.
+class dsp_preset_builder : public stream_writer_formatter<> {
+public:
+ dsp_preset_builder() : stream_writer_formatter(_m_stream,_m_abort) {}
+ void finish(const GUID & id, dsp_preset & out) {
+ out.set_owner(id);
+ out.set_data(_m_stream.m_buffer.get_ptr(), _m_stream.m_buffer.get_size());
+ }
+ void reset() {
+ _m_stream.m_buffer.set_size(0);
+ }
+private:
+ abort_callback_dummy _m_abort;
+ stream_writer_buffer_simple _m_stream;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp_manager.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp_manager.cpp index fc36489..56a7e99 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp_manager.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp_manager.cpp @@ -86,7 +86,7 @@ double dsp_manager::run(dsp_chunk_list * p_list,const metadb_handle_ptr & p_cur_ for(t_dsp_chain::iterator iter = newchain.first(); iter.is_valid(); ++iter) {
if (iter->m_dsp.is_empty()) {
- if (!dsp_entry::g_instantiate(iter->m_dsp,iter->m_preset)) throw pfc::exception_bug_check();
+ if (!dsp_entry::g_instantiate(iter->m_dsp,iter->m_preset)) throw pfc::exception_bug_check_v2();
}
}
@@ -134,4 +134,55 @@ void dsp_manager::flush() }
-bool dsp_manager::is_active() {return m_config.get_count()>0;}
\ No newline at end of file +bool dsp_manager::is_active() const {return m_config.get_count()>0;}
+
+void dsp_config_manager::core_enable_dsp(const dsp_preset & preset) {
+ dsp_chain_config_impl cfg;
+ get_core_settings(cfg);
+
+ bool found = false;
+ bool changed = false;
+ t_size n,m = cfg.get_count();
+ for(n=0;n<m;n++) {
+ if (cfg.get_item(n).get_owner() == preset.get_owner()) {
+ found = true;
+ if (cfg.get_item(n) != preset) {
+ cfg.replace_item(preset,n);
+ changed = true;
+ }
+ break;
+ }
+ }
+ if (!found) {cfg.insert_item(preset,0); changed = true;}
+
+ if (changed) set_core_settings(cfg);
+}
+void dsp_config_manager::core_disable_dsp(const GUID & id) {
+ dsp_chain_config_impl cfg;
+ get_core_settings(cfg);
+
+ t_size n,m = cfg.get_count();
+ bit_array_bittable mask(m);
+ bool changed = false;
+ for(n=0;n<m;n++) {
+ bool axe = (cfg.get_item(n).get_owner() == id) ? true : false;
+ if (axe) changed = true;
+ mask.set(n,axe);
+ }
+ if (changed) {
+ cfg.remove_mask(mask);
+ set_core_settings(cfg);
+ }
+}
+
+bool dsp_config_manager::core_query_dsp(const GUID & id, dsp_preset & out) {
+ dsp_chain_config_impl cfg;
+ get_core_settings(cfg);
+ for(t_size n=0;n<cfg.get_count();n++) {
+ const dsp_preset & entry = cfg.get_item(n);
+ if (entry.get_owner() == id) {
+ out = entry; return true;
+ }
+ }
+ return false;
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp_manager.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp_manager.h index e3405ac..6dbb01d 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp_manager.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/dsp_manager.h @@ -1,22 +1,30 @@ -struct t_dsp_chain_entry {
- service_ptr_t<dsp> m_dsp;
- dsp_preset_impl m_preset;
- bool m_recycle_flag;
-};
-typedef pfc::chain_list_t<t_dsp_chain_entry> t_dsp_chain;
-
+//! Helper class for running audio data through a DSP chain.
class dsp_manager {
public:
dsp_manager() : m_config_changed(false) {}
+ //! Alters the DSP chain configuration. Should be called before the first run() to set the configuration but can be also called anytime later between run() calls.
void set_config( const dsp_chain_config & p_data );
+ //! Runs DSP on the specified chunk list.
+ //! @returns Current DSP latency in seconds.
double run(dsp_chunk_list * p_list,const metadb_handle_ptr & p_cur_file,unsigned p_flags,abort_callback & p_abort);
+ //! Flushes the DSP (e.g. when seeking).
void flush();
+
+ //! Equivalent to set_config() with empty configuration.
void close();
- bool is_active();
+ //! Returns whether there's at least one active DSP in the configuration.
+ bool is_active() const;
private:
+ struct t_dsp_chain_entry {
+ service_ptr_t<dsp> m_dsp;
+ dsp_preset_impl m_preset;
+ bool m_recycle_flag;
+ };
+ typedef pfc::chain_list_v2_t<t_dsp_chain_entry> t_dsp_chain;
+
t_dsp_chain m_chain;
dsp_chain_config_impl m_config;
bool m_config_changed;
@@ -27,26 +35,47 @@ private: const dsp_manager & operator=(const dsp_manager&) {throw pfc::exception_not_implemented();}
};
-
-class dsp_config_manager : public service_base
-{
+//! Core API for accessing core playback DSP settings as well as spawning DSP configuration dialogs. \n
+//! Use static_api_ptr_t<dsp_config_manager>() to instantiate.
+class dsp_config_manager : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(dsp_config_manager);
public:
+ //! Retrieves current core playback DSP settings.
virtual void get_core_settings(dsp_chain_config & p_out) = 0;
+ //! Changes current core playback DSP settings.
virtual void set_core_settings(const dsp_chain_config & p_data) = 0;
+ //! Runs a modal DSP settings dialog.
+ //! @param p_data DSP chain configuration to edit - contains initial configuration to put in the dialog when called, receives the new configuration on successful edit.
+ //! @returns True when user approved DSP configuration changes (pressed the "OK" button), false when the user cancelled them ("Cancel" button).
virtual bool configure_popup(dsp_chain_config & p_data,HWND p_parent,const char * p_title) = 0;
-
+
+ //! Spawns an embedded DSP settings dialog.
+ //! @param p_initdata Initial DSP chain configuration to put in the dialog.
+ //! @param p_parent Parent window to contain the embedded dialog.
+ //! @param p_id Control ID of the embedded dialog. The parent window will receive a WM_COMMAND with BN_CLICKED and this identifier when user changes settings in the embedded dialog.
+ //! @param p_from_modal Must be set to true when the parent window is a modal dialog, false otherwise.
virtual HWND configure_embedded(const dsp_chain_config & p_initdata,HWND p_parent,unsigned p_id,bool p_from_modal) = 0;
+ //! Retrieves current settings from an embedded DSP settings dialog. See also: configure_embedded().
virtual void configure_embedded_retrieve(HWND wnd,dsp_chain_config & p_data) = 0;
+ //! Changes current settings in an embedded DSP settings dialog. See also: configure_embedded().
virtual void configure_embedded_change(HWND wnd,const dsp_chain_config & p_data) = 0;
- FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(dsp_config_manager);
+
+ //! Helper - enables a DSP in core playback settings.
+ void core_enable_dsp(const dsp_preset & preset);
+ //! Helper - disables a DSP in core playback settings.
+ void core_disable_dsp(const GUID & id);
+ //! Helper - if a DSP with the specified identifier is present in playback settings, retrieves its configuration and returns true, otherwise returns false.
+ bool core_query_dsp(const GUID & id, dsp_preset & out);
};
-class NOVTABLE dsp_config_callback : public service_base
-{
+//! Callback class for getting notified about core playback DSP settings getting altered. \n
+//! Register your implementations with static service_factory_single_t<myclass> g_myclass_factory;
+class NOVTABLE dsp_config_callback : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(dsp_config_callback);
public:
+ //! Called when core playback DSP settings change. \n
+ //! Note: you must not try to alter core playback DSP settings inside this callback, or call anything else that possibly alters core playback DSP settings.
virtual void on_core_settings_change(const dsp_chain_config & p_newdata) = 0;
-
- FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(dsp_config_callback);
-};
\ No newline at end of file +};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/event_logger.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/event_logger.h new file mode 100644 index 0000000..20e3f7c --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/event_logger.h @@ -0,0 +1,19 @@ +class NOVTABLE event_logger : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(event_logger, service_base);
+public:
+ enum {
+ severity_status,
+ severity_warning,
+ severity_error
+ };
+ void log_status(const char * line) {log_entry(line, severity_status);}
+ void log_warning(const char * line) {log_entry(line, severity_warning);}
+ void log_error(const char * line) {log_entry(line, severity_error);}
+
+ virtual void log_entry(const char * line, unsigned severity) = 0;
+};
+
+class event_logger_fallback : public event_logger {
+public:
+ void log_entry(const char * line, unsigned) {console::print(line);}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/exceptions.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/exceptions.h new file mode 100644 index 0000000..2de28dc --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/exceptions.h @@ -0,0 +1,13 @@ +#if FOOBAR2000_TARGET_VERSION >= 76
+
+//! Base class for exceptions that should show a human readable message when caught in app entrypoint function rather than crash and send a crash report.
+PFC_DECLARE_EXCEPTION(exception_messagebox,pfc::exception,"Internal Error");
+
+//! Base class for exceptions that should result in a quiet app shutdown.
+PFC_DECLARE_EXCEPTION(exception_shutdownrequest,pfc::exception,"Shutdown Request");
+
+
+PFC_DECLARE_EXCEPTION(exception_installdamaged, exception_messagebox, "Internal error - one or more of the installed components have been damaged.");
+PFC_DECLARE_EXCEPTION(exception_out_of_resources, exception_messagebox, "Not enough system resources available.");
+
+#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info.cpp index 2af249d..d325e2c 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info.cpp @@ -5,20 +5,20 @@ t_size file_info::meta_find_ex(const char * p_name,t_size p_name_length) const t_size n, m = meta_get_count();
for(n=0;n<m;n++)
{
- if (pfc::stricmp_ascii_ex(meta_enum_name(n),infinite,p_name,p_name_length) == 0) return n;
+ if (pfc::stricmp_ascii_ex(meta_enum_name(n),pfc_infinite,p_name,p_name_length) == 0) return n;
}
- return infinite;
+ return pfc_infinite;
}
bool file_info::meta_exists_ex(const char * p_name,t_size p_name_length) const
{
- return meta_find_ex(p_name,p_name_length) != infinite;
+ return meta_find_ex(p_name,p_name_length) != pfc_infinite;
}
void file_info::meta_remove_field_ex(const char * p_name,t_size p_name_length)
{
t_size index = meta_find_ex(p_name,p_name_length);
- if (index!=infinite) meta_remove_index(index);
+ if (index!=pfc_infinite) meta_remove_index(index);
}
@@ -40,7 +40,7 @@ void file_info::meta_remove_value(t_size p_index,t_size p_value) t_size file_info::meta_get_count_by_name_ex(const char * p_name,t_size p_name_length) const
{
t_size index = meta_find_ex(p_name,p_name_length);
- if (index == infinite) return 0;
+ if (index == pfc_infinite) return 0;
return meta_enum_value_count(index);
}
@@ -48,14 +48,14 @@ t_size file_info::info_find_ex(const char * p_name,t_size p_name_length) const {
t_size n, m = info_get_count();
for(n=0;n<m;n++) {
- if (pfc::stricmp_ascii_ex(info_enum_name(n),infinite,p_name,p_name_length) == 0) return n;
+ if (pfc::stricmp_ascii_ex(info_enum_name(n),pfc_infinite,p_name,p_name_length) == 0) return n;
}
- return infinite;
+ return pfc_infinite;
}
bool file_info::info_exists_ex(const char * p_name,t_size p_name_length) const
{
- return info_find_ex(p_name,p_name_length) != infinite;
+ return info_find_ex(p_name,p_name_length) != pfc_infinite;
}
void file_info::info_remove_index(t_size p_index)
@@ -71,7 +71,7 @@ void file_info::info_remove_all() bool file_info::info_remove_ex(const char * p_name,t_size p_name_length)
{
t_size index = info_find_ex(p_name,p_name_length);
- if (index != infinite)
+ if (index != pfc_infinite)
{
info_remove_index(index);
return true;
@@ -79,6 +79,13 @@ bool file_info::info_remove_ex(const char * p_name,t_size p_name_length) else return false;
}
+void file_info::overwrite_meta(const file_info & p_source) {
+ const t_size total = p_source.meta_get_count();
+ for(t_size walk = 0; walk < total; ++walk) {
+ copy_meta_single(p_source, walk);
+ }
+}
+
void file_info::copy_meta_single(const file_info & p_source,t_size p_index)
{
copy_meta_single_rename(p_source,p_index,p_source.meta_enum_name(p_index));
@@ -88,7 +95,7 @@ void file_info::copy_meta_single_nocheck(const file_info & p_source,t_size p_ind {
const char * name = p_source.meta_enum_name(p_index);
t_size n, m = p_source.meta_enum_value_count(p_index);
- t_size new_index = infinite;
+ t_size new_index = pfc_infinite;
for(n=0;n<m;n++)
{
const char * value = p_source.meta_enum_value(p_index,n);
@@ -100,25 +107,25 @@ void file_info::copy_meta_single_nocheck(const file_info & p_source,t_size p_ind void file_info::copy_meta_single_by_name_ex(const file_info & p_source,const char * p_name,t_size p_name_length)
{
t_size index = p_source.meta_find_ex(p_name,p_name_length);
- if (index != infinite) copy_meta_single(p_source,index);
+ if (index != pfc_infinite) copy_meta_single(p_source,index);
}
void file_info::copy_info_single_by_name_ex(const file_info & p_source,const char * p_name,t_size p_name_length)
{
t_size index = p_source.info_find_ex(p_name,p_name_length);
- if (index != infinite) copy_info_single(p_source,index);
+ if (index != pfc_infinite) copy_info_single(p_source,index);
}
void file_info::copy_meta_single_by_name_nocheck_ex(const file_info & p_source,const char * p_name,t_size p_name_length)
{
t_size index = p_source.meta_find_ex(p_name,p_name_length);
- if (index != infinite) copy_meta_single_nocheck(p_source,index);
+ if (index != pfc_infinite) copy_meta_single_nocheck(p_source,index);
}
void file_info::copy_info_single_by_name_nocheck_ex(const file_info & p_source,const char * p_name,t_size p_name_length)
{
t_size index = p_source.info_find_ex(p_name,p_name_length);
- if (index != infinite) copy_info_single_nocheck(p_source,index);
+ if (index != pfc_infinite) copy_info_single_nocheck(p_source,index);
}
void file_info::copy_info_single(const file_info & p_source,t_size p_index)
@@ -165,7 +172,7 @@ void file_info::copy(const file_info & p_source) const char * file_info::meta_get_ex(const char * p_name,t_size p_name_length,t_size p_index) const
{
t_size index = meta_find_ex(p_name,p_name_length);
- if (index == infinite) return 0;
+ if (index == pfc_infinite) return 0;
t_size max = meta_enum_value_count(index);
if (p_index >= max) return 0;
return meta_enum_value(index,p_index);
@@ -174,7 +181,7 @@ const char * file_info::meta_get_ex(const char * p_name,t_size p_name_length,t_s const char * file_info::info_get_ex(const char * p_name,t_size p_name_length) const
{
t_size index = info_find_ex(p_name,p_name_length);
- if (index == infinite) return 0;
+ if (index == pfc_infinite) return 0;
return info_enum_value(index);
}
@@ -290,11 +297,11 @@ void file_info::reset_replaygain() void file_info::copy_meta_single_rename_ex(const file_info & p_source,t_size p_index,const char * p_new_name,t_size p_new_name_length)
{
t_size n, m = p_source.meta_enum_value_count(p_index);
- t_size new_index = infinite;
+ t_size new_index = pfc_infinite;
for(n=0;n<m;n++)
{
const char * value = p_source.meta_enum_value(p_index,n);
- if (n == 0) new_index = meta_set_ex(p_new_name,p_new_name_length,value,infinite);
+ if (n == 0) new_index = meta_set_ex(p_new_name,p_new_name_length,value,pfc_infinite);
else meta_add_value(new_index,value);
}
}
@@ -302,7 +309,7 @@ void file_info::copy_meta_single_rename_ex(const file_info & p_source,t_size p_i t_size file_info::meta_add_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length)
{
t_size index = meta_find_ex(p_name,p_name_length);
- if (index == infinite) return meta_set_nocheck_ex(p_name,p_name_length,p_value,p_value_length);
+ if (index == pfc_infinite) return meta_set_nocheck_ex(p_name,p_name_length,p_value,p_value_length);
else
{
meta_add_value_ex(index,p_value,p_value_length);
@@ -361,18 +368,22 @@ bool file_info::are_meta_fields_identical(t_size p_index1,t_size p_index2) const }
-bool file_info::meta_format(const char * p_name,pfc::string_base & p_out) const
-{
- p_out.reset();
- t_size index = meta_find(p_name);
- if (index == infinite) return false;
+void file_info::meta_format_entry(t_size index, pfc::string_base & out, const char * separator) const {
+ out.reset();
t_size val, count = meta_enum_value_count(index);
- if (count == 0) return false;
+ PFC_ASSERT( count > 0);
for(val=0;val<count;val++)
{
- if (val > 0) p_out += ", ";
- p_out += meta_enum_value(index,val);
+ if (val > 0) out += separator;
+ out += meta_enum_value(index,val);
}
+}
+
+bool file_info::meta_format(const char * p_name,pfc::string_base & p_out, const char * separator) const {
+ p_out.reset();
+ t_size index = meta_find(p_name);
+ if (index == pfc_infinite) return false;
+ meta_format_entry(index, p_out, separator);
return true;
}
@@ -387,7 +398,8 @@ bool file_info::is_encoding_lossy() const { if (pfc::stricmp_ascii(encoding,"lossy") == 0 /*|| pfc::stricmp_ascii(encoding,"hybrid") == 0*/) return true;
} else {
//the old way
- if (info_get("bitspersample") == NULL) return true;
+ //disabled: don't whine if we're not sure what we're dealing with - might be a file with info not-yet-loaded in oddball cases or a mod file
+ //if (info_get("bitspersample") == NULL) return true;
}
return false;
}
@@ -425,11 +437,20 @@ bool file_info::g_is_meta_equal(const file_info & p_item1,const file_info & p_it bool file_info::g_is_info_equal(const file_info & p_item1,const file_info & p_item2) {
t_size count = p_item1.info_get_count();
- if (count != p_item2.info_get_count()) return false;
+ if (count != p_item2.info_get_count()) {
+ //uDebugLog() << "info count mismatch";
+ return false;
+ }
for(t_size n1=0; n1<count; n1++) {
t_size n2 = p_item2.info_find(p_item1.info_enum_name(n1));
- if (n2 == infinite) return false;
- if (strcmp(p_item1.info_enum_value(n1),p_item2.info_enum_value(n2)) != 0) return false;
+ if (n2 == pfc_infinite) {
+ //uDebugLog() << "item2 does not have " << p_item1.info_enum_name(n1);
+ return false;
+ }
+ if (strcmp(p_item1.info_enum_value(n1),p_item2.info_enum_value(n2)) != 0) {
+ //uDebugLog() << "value mismatch: " << p_item1.info_enum_name(n1);
+ return false;
+ }
}
return true;
}
@@ -444,4 +465,17 @@ bool file_info::g_is_valid_field_name(const char * p_name,t_size p_length) { if (!is_valid_field_name_char(p_name[walk])) return false;
}
return walk > 0;
+}
+
+void file_info::to_console() const {
+ console::formatter() << "File info dump:";
+ if (get_length() > 0) console::formatter() << "Duration: " << pfc::format_time_ex(get_length(), 6);
+ pfc::string_formatter temp;
+ for(t_size metaWalk = 0; metaWalk < meta_get_count(); ++metaWalk) {
+ meta_format_entry(metaWalk, temp);
+ console::formatter() << "Meta: " << meta_enum_name(metaWalk) << " = " << temp;
+ }
+ for(t_size infoWalk = 0; infoWalk < info_get_count(); ++infoWalk) {
+ console::formatter() << "Info: " << info_enum_name(infoWalk) << " = " << info_enum_value(infoWalk);
+ }
}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info.h index 19eaef3..30add3c 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info.h @@ -1,6 +1,3 @@ -#ifndef _FILE_INFO_H_
-#define _FILE_INFO_H_
-
//! Structure containing ReplayGain scan results from some playable object, also providing various helper methods to manipulate those results.
struct replaygain_info
{
@@ -20,14 +17,14 @@ struct replaygain_info inline bool format_album_peak(char p_buffer[text_buffer_size]) const {return g_format_peak(m_album_peak,p_buffer);}
inline bool format_track_peak(char p_buffer[text_buffer_size]) const {return g_format_peak(m_track_peak,p_buffer);}
- void set_album_gain_text(const char * p_text,t_size p_text_len = infinite);
- void set_track_gain_text(const char * p_text,t_size p_text_len = infinite);
- void set_album_peak_text(const char * p_text,t_size p_text_len = infinite);
- void set_track_peak_text(const char * p_text,t_size p_text_len = infinite);
+ void set_album_gain_text(const char * p_text,t_size p_text_len = pfc_infinite);
+ void set_track_gain_text(const char * p_text,t_size p_text_len = pfc_infinite);
+ void set_album_peak_text(const char * p_text,t_size p_text_len = pfc_infinite);
+ void set_track_peak_text(const char * p_text,t_size p_text_len = pfc_infinite);
- static bool g_is_meta_replaygain(const char * p_name,t_size p_name_len = infinite);
+ static bool g_is_meta_replaygain(const char * p_name,t_size p_name_len = pfc_infinite);
bool set_from_meta_ex(const char * p_name,t_size p_name_len,const char * p_value,t_size p_value_len);
- inline bool set_from_meta(const char * p_name,const char * p_value) {return set_from_meta_ex(p_name,infinite,p_value,infinite);}
+ inline bool set_from_meta(const char * p_name,const char * p_value) {return set_from_meta_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
inline bool is_album_gain_present() const {return m_album_gain != gain_invalid;}
inline bool is_track_gain_present() const {return m_track_gain != gain_invalid;}
@@ -57,13 +54,19 @@ static const replaygain_info replaygain_info_invalid = {replaygain_info::gain_in //! Main interface class for information about some playable object.
class NOVTABLE file_info {
public:
- //! Retrieves length, in seconds.
+ //! Retrieves audio duration, in seconds. \n
+ //! Note that the reported duration should not be assumed to be the exact length of the track -\n
+ //! with many popular audio formats, exact duration is impossible to determine without performing a full decode pass;\n
+ //! with other formats, the decoded data may be shorter than reported due to truncation other damage.
virtual double get_length() const = 0;
- //! Sets length, in seconds.
+ //! Sets audio duration, in seconds. \n
+ //! Note that the reported duration should not be assumed to be the exact length of the track -\n
+ //! with many popular audio formats, exact duration is impossible to determine without performing a full decode pass;\n
+ //! with other formats, the decoded data may be shorter than reported due to truncation other damage.
virtual void set_length(double p_length) = 0;
//! Sets ReplayGain information.
- virtual void set_replaygain(const replaygain_info & p_info) = 0;
+ virtual void set_replaygain(const replaygain_info & p_info) = 0;
//! Retrieves ReplayGain information.
virtual replaygain_info get_replaygain() const = 0;
@@ -120,7 +123,8 @@ public: void meta_add_value_ex(t_size p_index,const char * p_value,t_size p_value_length);
t_size meta_add_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length);
t_size meta_calc_total_value_count() const;
- bool meta_format(const char * p_name,pfc::string_base & p_out) const;
+ bool meta_format(const char * p_name,pfc::string_base & p_out, const char * separator = ", ") const;
+ void meta_format_entry(t_size index, pfc::string_base & p_out, const char * separator = ", ") const;//same as meta_format but takes index instead of meta name.
bool info_exists_ex(const char * p_name,t_size p_name_length) const;
@@ -129,29 +133,29 @@ public: bool info_remove_ex(const char * p_name,t_size p_name_length);
const char * info_get_ex(const char * p_name,t_size p_name_length) const;
- inline t_size meta_find(const char * p_name) const {return meta_find_ex(p_name,infinite);}
- inline bool meta_exists(const char * p_name) const {return meta_exists_ex(p_name,infinite);}
- inline void meta_remove_field(const char * p_name) {meta_remove_field_ex(p_name,infinite);}
- inline t_size meta_set(const char * p_name,const char * p_value) {return meta_set_ex(p_name,infinite,p_value,infinite);}
- inline void meta_insert_value(t_size p_index,t_size p_value_index,const char * p_value) {meta_insert_value_ex(p_index,p_value_index,p_value,infinite);}
- inline void meta_add_value(t_size p_index,const char * p_value) {meta_add_value_ex(p_index,p_value,infinite);}
- inline const char* meta_get(const char * p_name,t_size p_index) const {return meta_get_ex(p_name,infinite,p_index);}
- inline t_size meta_get_count_by_name(const char * p_name) const {return meta_get_count_by_name_ex(p_name,infinite);}
- inline t_size meta_add(const char * p_name,const char * p_value) {return meta_add_ex(p_name,infinite,p_value,infinite);}
- inline void meta_modify_value(t_size p_index,t_size p_value_index,const char * p_value) {meta_modify_value_ex(p_index,p_value_index,p_value,infinite);}
+ inline t_size meta_find(const char * p_name) const {return meta_find_ex(p_name,pfc_infinite);}
+ inline bool meta_exists(const char * p_name) const {return meta_exists_ex(p_name,pfc_infinite);}
+ inline void meta_remove_field(const char * p_name) {meta_remove_field_ex(p_name,pfc_infinite);}
+ inline t_size meta_set(const char * p_name,const char * p_value) {return meta_set_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
+ inline void meta_insert_value(t_size p_index,t_size p_value_index,const char * p_value) {meta_insert_value_ex(p_index,p_value_index,p_value,pfc_infinite);}
+ inline void meta_add_value(t_size p_index,const char * p_value) {meta_add_value_ex(p_index,p_value,pfc_infinite);}
+ inline const char* meta_get(const char * p_name,t_size p_index) const {return meta_get_ex(p_name,pfc_infinite,p_index);}
+ inline t_size meta_get_count_by_name(const char * p_name) const {return meta_get_count_by_name_ex(p_name,pfc_infinite);}
+ inline t_size meta_add(const char * p_name,const char * p_value) {return meta_add_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
+ inline void meta_modify_value(t_size p_index,t_size p_value_index,const char * p_value) {meta_modify_value_ex(p_index,p_value_index,p_value,pfc_infinite);}
- inline t_size info_set(const char * p_name,const char * p_value) {return info_set_ex(p_name,infinite,p_value,infinite);}
- inline t_size info_find(const char * p_name) const {return info_find_ex(p_name,infinite);}
- inline t_size info_exists(const char * p_name) const {return info_exists_ex(p_name,infinite);}
- inline bool info_remove(const char * p_name) {return info_remove_ex(p_name,infinite);}
- inline const char * info_get(const char * p_name) const {return info_get_ex(p_name,infinite);}
+ inline t_size info_set(const char * p_name,const char * p_value) {return info_set_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
+ inline t_size info_find(const char * p_name) const {return info_find_ex(p_name,pfc_infinite);}
+ inline bool info_exists(const char * p_name) const {return info_exists_ex(p_name,pfc_infinite);}
+ inline bool info_remove(const char * p_name) {return info_remove_ex(p_name,pfc_infinite);}
+ inline const char * info_get(const char * p_name) const {return info_get_ex(p_name,pfc_infinite);}
bool info_set_replaygain_ex(const char * p_name,t_size p_name_len,const char * p_value,t_size p_value_len);
- inline bool info_set_replaygain(const char * p_name,const char * p_value) {return info_set_replaygain_ex(p_name,infinite,p_value,infinite);}
+ inline bool info_set_replaygain(const char * p_name,const char * p_value) {return info_set_replaygain_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
void info_set_replaygain_auto_ex(const char * p_name,t_size p_name_len,const char * p_value,t_size p_value_len);
- inline void info_set_replaygain_auto(const char * p_name,const char * p_value) {info_set_replaygain_auto_ex(p_name,infinite,p_value,infinite);}
+ inline void info_set_replaygain_auto(const char * p_name,const char * p_value) {info_set_replaygain_auto_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
@@ -159,13 +163,14 @@ public: void copy_info_single(const file_info & p_source,t_size p_index);
void copy_meta_single_by_name_ex(const file_info & p_source,const char * p_name,t_size p_name_length);
void copy_info_single_by_name_ex(const file_info & p_source,const char * p_name,t_size p_name_length);
- inline void copy_meta_single_by_name(const file_info & p_source,const char * p_name) {copy_meta_single_by_name_ex(p_source,p_name,infinite);}
- inline void copy_info_single_by_name(const file_info & p_source,const char * p_name) {copy_info_single_by_name_ex(p_source,p_name,infinite);}
+ inline void copy_meta_single_by_name(const file_info & p_source,const char * p_name) {copy_meta_single_by_name_ex(p_source,p_name,pfc_infinite);}
+ inline void copy_info_single_by_name(const file_info & p_source,const char * p_name) {copy_info_single_by_name_ex(p_source,p_name,pfc_infinite);}
void reset();
void reset_replaygain();
void copy_meta_single_rename_ex(const file_info & p_source,t_size p_index,const char * p_new_name,t_size p_new_name_length);
- inline void copy_meta_single_rename(const file_info & p_source,t_size p_index,const char * p_new_name) {copy_meta_single_rename_ex(p_source,p_index,p_new_name,infinite);}
+ inline void copy_meta_single_rename(const file_info & p_source,t_size p_index,const char * p_new_name) {copy_meta_single_rename_ex(p_source,p_index,p_new_name,pfc_infinite);}
void overwrite_info(const file_info & p_source);
+ void overwrite_meta(const file_info & p_source);
t_int64 info_get_int(const char * name) const;
t_int64 info_get_length_samples() const;
@@ -189,6 +194,8 @@ public: void merge(const pfc::list_base_const_t<const file_info*> & p_sources);
+ void merge_fallback(const file_info & fallback);
+
bool are_meta_fields_identical(t_size p_index1,t_size p_index2) const;
inline const file_info & operator=(const file_info & p_source) {copy(p_source);return *this;}
@@ -199,15 +206,20 @@ public: //! Unsafe - does not check whether the field already exists and will result in duplicates if it does - call only when appropriate checks have been applied externally.
t_size __meta_add_unsafe_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {return meta_set_nocheck_ex(p_name,p_name_length,p_value,p_value_length);}
//! Unsafe - does not check whether the field already exists and will result in duplicates if it does - call only when appropriate checks have been applied externally.
- t_size __meta_add_unsafe(const char * p_name,const char * p_value) {return meta_set_nocheck_ex(p_name,infinite,p_value,infinite);}
+ t_size __meta_add_unsafe(const char * p_name,const char * p_value) {return meta_set_nocheck_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
//! Unsafe - does not check whether the field already exists and will result in duplicates if it does - call only when appropriate checks have been applied externally.
t_size __info_add_unsafe_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {return info_set_nocheck_ex(p_name,p_name_length,p_value,p_value_length);}
//! Unsafe - does not check whether the field already exists and will result in duplicates if it does - call only when appropriate checks have been applied externally.
- t_size __info_add_unsafe(const char * p_name,const char * p_value) {return info_set_nocheck_ex(p_name,infinite,p_value,infinite);}
+ t_size __info_add_unsafe(const char * p_name,const char * p_value) {return info_set_nocheck_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
+
+ void _copy_meta_single_nocheck(const file_info & p_source,t_size p_index) {copy_meta_single_nocheck(p_source, p_index);}
- static bool g_is_valid_field_name(const char * p_name,t_size p_length = infinite);
- typedef pfc::comparator_stricmp_ascii field_name_comparator;
+ static bool g_is_valid_field_name(const char * p_name,t_size p_length = pfc_infinite);
+ //typedef pfc::comparator_stricmp_ascii field_name_comparator;
+ typedef pfc::string::comparatorCaseInsensitiveASCII field_name_comparator;
+
+ void to_console() const;
protected:
file_info() {}
~file_info() {}
@@ -215,14 +227,11 @@ protected: void copy_info_single_nocheck(const file_info & p_source,t_size p_index);
void copy_meta_single_by_name_nocheck_ex(const file_info & p_source,const char * p_name,t_size p_name_length);
void copy_info_single_by_name_nocheck_ex(const file_info & p_source,const char * p_name,t_size p_name_length);
- inline void copy_meta_single_by_name_nocheck(const file_info & p_source,const char * p_name) {copy_meta_single_by_name_nocheck_ex(p_source,p_name,infinite);}
- inline void copy_info_single_by_name_nocheck(const file_info & p_source,const char * p_name) {copy_info_single_by_name_nocheck_ex(p_source,p_name,infinite);}
+ inline void copy_meta_single_by_name_nocheck(const file_info & p_source,const char * p_name) {copy_meta_single_by_name_nocheck_ex(p_source,p_name,pfc_infinite);}
+ inline void copy_info_single_by_name_nocheck(const file_info & p_source,const char * p_name) {copy_info_single_by_name_nocheck_ex(p_source,p_name,pfc_infinite);}
virtual t_size meta_set_nocheck_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) = 0;
virtual t_size info_set_nocheck_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) = 0;
- inline t_size meta_set_nocheck(const char * p_name,const char * p_value) {return meta_set_nocheck_ex(p_name,infinite,p_value,infinite);}
- inline t_size info_set_nocheck(const char * p_name,const char * p_value) {return info_set_nocheck_ex(p_name,infinite,p_value,infinite);}
+ inline t_size meta_set_nocheck(const char * p_name,const char * p_value) {return meta_set_nocheck_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
+ inline t_size info_set_nocheck(const char * p_name,const char * p_value) {return info_set_nocheck_ex(p_name,pfc_infinite,p_value,pfc_infinite);}
};
-
-
-#endif //_FILE_INFO_H_
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_impl.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_impl.cpp index f55be0e..9d98d75 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_impl.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_impl.cpp @@ -196,7 +196,7 @@ void file_info_impl_utils::meta_entry::insert_value(t_size p_value_index,const c {
pfc::string_simple temp;
temp.set_string(p_value,p_value_length);
- pfc::insert_swap_t(m_values,temp,p_value_index);
+ pfc::insert_t(m_values,temp,p_value_index);
}
void file_info_impl_utils::meta_entry::modify_value(t_size p_value_index,const char * p_value,t_size p_value_length)
@@ -239,5 +239,5 @@ void file_info_impl_utils::info_storage::copy_from(const file_info & p_info) t_size n, count;
count = p_info.info_get_count();
m_info.set_count(count);
- for(n=0;n<count;n++) m_info[n].init(p_info.info_enum_name(n),infinite,p_info.info_enum_value(n),infinite);
+ for(n=0;n<count;n++) m_info[n].init(p_info.info_enum_name(n),~0,p_info.info_enum_value(n),~0);
}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_impl.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_impl.h index 5d76695..def8413 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_impl.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_impl.h @@ -80,9 +80,9 @@ namespace file_info_impl_utils { inline t_size get_count() const {return m_data.get_size();}
- inline const char * get_name(t_size p_index) const {assert(p_index < m_data.get_size()); return m_data[p_index].get_name();}
- inline const char * get_value(t_size p_index,t_size p_value_index) const {assert(p_index < m_data.get_size()); return m_data[p_index].get_value(p_value_index);}
- inline t_size get_value_count(t_size p_index) const {assert(p_index < m_data.get_size()); return m_data[p_index].get_value_count();}
+ inline const char * get_name(t_size p_index) const {PFC_ASSERT(p_index < m_data.get_size()); return m_data[p_index].get_name();}
+ inline const char * get_value(t_size p_index,t_size p_value_index) const {PFC_ASSERT(p_index < m_data.get_size()); return m_data[p_index].get_value(p_value_index);}
+ inline t_size get_value_count(t_size p_index) const {PFC_ASSERT(p_index < m_data.get_size()); return m_data[p_index].get_value_count();}
private:
meta_entry_array m_data;
@@ -141,6 +141,4 @@ private: replaygain_info m_replaygain;
};
-typedef file_info_impl file_info_i;//for compatibility
-
-#endif
\ No newline at end of file +#endif
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_merge.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_merge.cpp index e7aba0d..0597374 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_merge.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_info_merge.cpp @@ -11,7 +11,7 @@ static t_size merge_tags_calc_rating_by_index(const file_info & p_info,t_size p_ static t_size merge_tags_calc_rating(const file_info & p_info,const char * p_field) {
t_size field_index = p_info.meta_find(p_field);
t_size ret = 0;
- if (field_index != infinite) {
+ if (field_index != ~0) {
return merge_tags_calc_rating_by_index(p_info,field_index);
} else {
return 0;
@@ -127,4 +127,20 @@ void file_info::overwrite_info(const file_info & p_source) { for(t_size n=0;n<count;n++) {
info_set(p_source.info_enum_name(n),p_source.info_enum_value(n));
}
+}
+
+
+void file_info::merge_fallback(const file_info & source) {
+ set_replaygain( replaygain_info::g_merge(get_replaygain(), source.get_replaygain() ) );
+ if (get_length() <= 0) set_length(source.get_length());
+ t_size count = source.info_get_count();
+ for(t_size infoWalk = 0; infoWalk < count; ++infoWalk) {
+ const char * name = source.info_enum_name(infoWalk);
+ if (!info_exists(name)) __info_add_unsafe(name, source.info_enum_value(infoWalk));
+ }
+ count = source.meta_get_count();
+ for(t_size metaWalk = 0; metaWalk < count; ++metaWalk) {
+ const char * name = source.meta_enum_name(metaWalk);
+ if (!meta_exists(name)) _copy_meta_single_nocheck(source, metaWalk);
+ }
}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_operation_callback.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_operation_callback.cpp index b1d883b..e812a1d 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_operation_callback.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_operation_callback.cpp @@ -3,15 +3,10 @@ static void g_on_files_deleted_sorted(const pfc::list_base_const_t<const char *> & p_items)
{
- static_api_ptr_t<library_manager>()->on_files_deleted_sorted(p_items);
+ //static_api_ptr_t<library_manager>()->on_files_deleted_sorted(p_items);
static_api_ptr_t<playlist_manager>()->on_files_deleted_sorted(p_items);
- service_ptr_t<file_operation_callback> ptr;
- service_enum_t<file_operation_callback> e;
- while(e.next(ptr))
- {
- ptr->on_files_deleted_sorted(p_items);
- }
+ FB2K_FOR_EACH_SERVICE(file_operation_callback, on_files_deleted_sorted(p_items));
}
static void g_on_files_moved_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to)
@@ -19,22 +14,12 @@ static void g_on_files_moved_sorted(const pfc::list_base_const_t<const char *> & static_api_ptr_t<playlist_manager>()->on_files_moved_sorted(p_from,p_to);
static_api_ptr_t<playlist_manager>()->on_files_deleted_sorted(p_from);
- service_ptr_t<file_operation_callback> ptr;
- service_enum_t<file_operation_callback> e;
- while(e.next(ptr))
- {
- ptr->on_files_moved_sorted(p_from,p_to);
- }
+ FB2K_FOR_EACH_SERVICE(file_operation_callback, on_files_moved_sorted(p_from,p_to));
}
static void g_on_files_copied_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to)
{
- service_ptr_t<file_operation_callback> ptr;
- service_enum_t<file_operation_callback> e;
- while(e.next(ptr))
- {
- ptr->on_files_copied_sorted(p_from,p_to);
- }
+ FB2K_FOR_EACH_SERVICE(file_operation_callback, on_files_copied_sorted(p_from,p_to));
}
void file_operation_callback::g_on_files_deleted(const pfc::list_base_const_t<const char *> & p_items)
@@ -91,3 +76,54 @@ void file_operation_callback::g_on_files_copied(const pfc::list_base_const_t<con }
}
}
+bool file_operation_callback::g_search_sorted_list(const pfc::list_base_const_t<const char*> & p_list,const char * p_string,t_size & p_index) {
+ return pfc::binarySearch<metadb::path_comparator>::run(p_list,0,p_list.get_count(),p_string,p_index);
+}
+
+bool file_operation_callback::g_update_list_on_moved_ex(metadb_handle_list_ref p_list,t_pathlist p_from,t_pathlist p_to, metadb_handle_list_ref itemsAdded, metadb_handle_list_ref itemsRemoved) {
+ static_api_ptr_t<metadb> api;
+ bool changed = false;
+ itemsAdded.remove_all(); itemsRemoved.remove_all();
+ for(t_size walk = 0; walk < p_list.get_count(); ++walk) {
+ metadb_handle_ptr item = p_list[walk];
+ t_size index;
+ if (g_search_sorted_list(p_from,item->get_path(),index)) {
+ metadb_handle_ptr newItem;
+ api->handle_create_replace_path_canonical(newItem,item,p_to[index]);
+ p_list.replace_item(walk,newItem);
+ changed = true;
+ itemsAdded.add_item(newItem); itemsRemoved.add_item(item);
+ }
+ }
+ return changed;
+}
+bool file_operation_callback::g_update_list_on_moved(metadb_handle_list_ref p_list,const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to) {
+ static_api_ptr_t<metadb> api;
+ bool changed = false;
+ for(t_size walk = 0; walk < p_list.get_count(); ++walk) {
+ metadb_handle_ptr item = p_list[walk];
+ t_size index;
+ if (g_search_sorted_list(p_from,item->get_path(),index)) {
+ metadb_handle_ptr newItem;
+ api->handle_create_replace_path_canonical(newItem,item,p_to[index]);
+ p_list.replace_item(walk,newItem);
+ changed = true;
+ }
+ }
+ return changed;
+}
+
+
+bool file_operation_callback::g_mark_dead_entries(metadb_handle_list_cref items, bit_array_var & mask, t_pathlist deadPaths) {
+ bool found = false;
+ const t_size total = items.get_count();
+ for(t_size walk = 0; walk < total; ++walk) {
+ t_size index;
+ if (g_search_sorted_list(deadPaths,items[walk]->get_path(),index)) {
+ mask.set(walk,true); found = true;
+ } else {
+ mask.set(walk,false);
+ }
+ }
+ return found;
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_operation_callback.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_operation_callback.h index f6eba0a..7118e50 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_operation_callback.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/file_operation_callback.h @@ -3,23 +3,64 @@ //! Interface to notify component system about files being deleted or moved. Operates in app's main thread only.
-class file_operation_callback : public service_base
-{
+class NOVTABLE file_operation_callback : public service_base {
public:
+ typedef const pfc::list_base_const_t<const char *> & t_pathlist;
//! p_items is a metadb::path_compare sorted list of files that have been deleted.
- virtual void on_files_deleted_sorted(const pfc::list_base_const_t<const char *> & p_items) = 0;
+ virtual void on_files_deleted_sorted(t_pathlist p_items) = 0;
//! p_from is a metadb::path_compare sorted list of files that have been moved, p_to is a list of corresponding target locations.
- virtual void on_files_moved_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to) = 0;
+ virtual void on_files_moved_sorted(t_pathlist p_from,t_pathlist p_to) = 0;
//! p_from is a metadb::path_compare sorted list of files that have been copied, p_to is a list of corresponding target locations.
- virtual void on_files_copied_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to) = 0;
+ virtual void on_files_copied_sorted(t_pathlist p_from,t_pathlist p_to) = 0;
static void g_on_files_deleted(const pfc::list_base_const_t<const char *> & p_items);
static void g_on_files_moved(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to);
static void g_on_files_copied(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to);
+ static bool g_search_sorted_list(const pfc::list_base_const_t<const char*> & p_list,const char * p_string,t_size & p_index);
+ static bool g_update_list_on_moved(metadb_handle_list_ref p_list,t_pathlist p_from,t_pathlist p_to);
+
+ static bool g_update_list_on_moved_ex(metadb_handle_list_ref p_list,t_pathlist p_from,t_pathlist p_to, metadb_handle_list_ref itemsAdded, metadb_handle_list_ref itemsRemoved);
+
+ static bool g_mark_dead_entries(metadb_handle_list_cref items, bit_array_var & mask, t_pathlist deadPaths);
+
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(file_operation_callback);
};
-#endif //_FILE_OPERATION_CALLBACK_H_
\ No newline at end of file +
+//! New in 0.9.5.
+class NOVTABLE file_operation_callback_dynamic {
+public:
+ //! p_items is a metadb::path_compare sorted list of files that have been deleted.
+ virtual void on_files_deleted_sorted(const pfc::list_base_const_t<const char *> & p_items) = 0;
+ //! p_from is a metadb::path_compare sorted list of files that have been moved, p_to is a list of corresponding target locations.
+ virtual void on_files_moved_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to) = 0;
+ //! p_from is a metadb::path_compare sorted list of files that have been copied, p_to is a list of corresponding target locations.
+ virtual void on_files_copied_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to) = 0;
+};
+
+//! New in 0.9.5.
+class NOVTABLE file_operation_callback_dynamic_manager : public service_base {
+public:
+ virtual void register_callback(file_operation_callback_dynamic * p_callback) = 0;
+ virtual void unregister_callback(file_operation_callback_dynamic * p_callback) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(file_operation_callback_dynamic_manager);
+};
+
+//! New in 0.9.5.
+class file_operation_callback_dynamic_impl_base : public file_operation_callback_dynamic {
+public:
+ file_operation_callback_dynamic_impl_base() {static_api_ptr_t<file_operation_callback_dynamic_manager>()->register_callback(this);}
+ ~file_operation_callback_dynamic_impl_base() {static_api_ptr_t<file_operation_callback_dynamic_manager>()->unregister_callback(this);}
+
+ void on_files_deleted_sorted(const pfc::list_base_const_t<const char *> & p_items) {}
+ void on_files_moved_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to) {}
+ void on_files_copied_sorted(const pfc::list_base_const_t<const char *> & p_from,const pfc::list_base_const_t<const char *> & p_to) {}
+
+ PFC_CLASS_NOT_COPYABLE_EX(file_operation_callback_dynamic_impl_base);
+};
+
+#endif //_FILE_OPERATION_CALLBACK_H_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem.cpp index 950e8fd..5cc6879 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem.cpp @@ -1,5 +1,7 @@ #include "foobar2000.h"
+static const char unpack_prefix[] = "unpack://";
+static const unsigned unpack_prefix_len = 9;
void unpacker::g_open(service_ptr_t<file> & p_out,const service_ptr_t<file> & p,abort_callback & p_abort)
{
@@ -63,8 +65,8 @@ void filesystem::g_get_canonical_path(const char * path,pfc::string_base & out) if (e.first(ptr)) do {
if (ptr->get_canonical_path(path,out)) return;
} while(e.next(ptr));
- //no one wants to process this, lets copy over
- out.set_string(path);
+ //no one wants to process this, let's copy over
+ out = path;
}
void filesystem::g_get_display_path(const char * path,pfc::string_base & out)
@@ -73,16 +75,22 @@ void filesystem::g_get_display_path(const char * path,pfc::string_base & out) service_ptr_t<filesystem> ptr;
if (!g_get_interface(ptr,path))
{
- //noone wants to process this, lets copy over
- out.set_string(path);
+ //no one wants to process this, let's copy over
+ out = path;
}
else
{
if (!ptr->get_display_path(path,out))
- out.set_string(path);
+ out = path;
}
}
+filesystem::ptr filesystem::g_get_interface(const char * path) {
+ filesystem::ptr rv;
+ if (!g_get_interface(rv, path)) throw exception_io_no_handler_for_path();
+ return rv;
+
+}
bool filesystem::g_get_interface(service_ptr_t<filesystem> & p_out,const char * path)
{
service_enum_t<filesystem> e;
@@ -101,23 +109,12 @@ bool filesystem::g_get_interface(service_ptr_t<filesystem> & p_out,const char * void filesystem::g_open(service_ptr_t<file> & p_out,const char * path,t_open_mode mode,abort_callback & p_abort)
{
TRACK_CALL_TEXT("filesystem::g_open");
- service_ptr_t<filesystem> fs;
- if (!g_get_interface(fs,path)) throw exception_io_no_handler_for_path();
- fs->open(p_out,path,mode,p_abort);
+ g_get_interface(path)->open(p_out,path,mode,p_abort);
}
+
void filesystem::g_open_timeout(service_ptr_t<file> & p_out,const char * p_path,t_open_mode p_mode,double p_timeout,abort_callback & p_abort) {
- pfc::lores_timer timer;
- timer.start();
- for(;;) {
- try {
- g_open(p_out,p_path,p_mode,p_abort);
- break;
- } catch(exception_io_sharing_violation) {
- if (timer.query() > p_timeout) throw;
- p_abort.sleep(0.01);
- }
- }
+ FB2K_RETRY_ON_SHARING_VIOLATION( g_open(p_out, p_path, p_mode, p_abort), p_abort, p_timeout);
}
bool filesystem::g_exists(const char * p_path,abort_callback & p_abort)
@@ -141,58 +138,24 @@ bool filesystem::g_exists_writeable(const char * p_path,abort_callback & p_abort }
void filesystem::g_remove(const char * p_path,abort_callback & p_abort) {
- service_ptr_t<filesystem> fs;
- if (!g_get_interface(fs,p_path)) throw exception_io_no_handler_for_path();
- fs->remove(p_path,p_abort);
+ g_get_interface(p_path)->remove(p_path,p_abort);
}
void filesystem::g_remove_timeout(const char * p_path,double p_timeout,abort_callback & p_abort) {
- pfc::lores_timer timer;
- timer.start();
- for(;;) {
- try {
- g_remove(p_path,p_abort);
- break;
- } catch(exception_io_sharing_violation) {
- if (timer.query() > p_timeout) throw;
- p_abort.sleep(0.01);
- }
- }
+ FB2K_RETRY_ON_SHARING_VIOLATION( g_remove(p_path, p_abort), p_abort, p_timeout );
}
void filesystem::g_move_timeout(const char * p_src,const char * p_dst,double p_timeout,abort_callback & p_abort) {
- pfc::lores_timer timer;
- timer.start();
- for(;;) {
- try {
- g_move(p_src,p_dst,p_abort);
- break;
- } catch(exception_io_sharing_violation) {
- if (timer.query() > p_timeout) throw;
- p_abort.sleep(0.01);
- }
- }
+ FB2K_RETRY_ON_SHARING_VIOLATION( g_move(p_src, p_dst, p_abort), p_abort, p_timeout );
}
void filesystem::g_copy_timeout(const char * p_src,const char * p_dst,double p_timeout,abort_callback & p_abort) {
- pfc::lores_timer timer;
- timer.start();
- for(;;) {
- try {
- g_copy(p_src,p_dst,p_abort);
- break;
- } catch(exception_io_sharing_violation) {
- if (timer.query() > p_timeout) throw;
- p_abort.sleep(0.01);
- }
- }
+ FB2K_RETRY_ON_SHARING_VIOLATION( g_copy(p_src, p_dst, p_abort), p_abort, p_timeout );
}
void filesystem::g_create_directory(const char * p_path,abort_callback & p_abort)
{
- service_ptr_t<filesystem> fs;
- if (!g_get_interface(fs,p_path)) throw exception_io_no_handler_for_path();
- fs->create_directory(p_path,p_abort);
+ g_get_interface(p_path)->create_directory(p_path,p_abort);
}
void filesystem::g_move(const char * src,const char * dst,abort_callback & p_abort) {
@@ -209,9 +172,8 @@ void filesystem::g_move(const char * src,const char * dst,abort_callback & p_abo void filesystem::g_list_directory(const char * p_path,directory_callback & p_out,abort_callback & p_abort)
{
- service_ptr_t<filesystem> ptr;
- if (!g_get_interface(ptr,p_path)) throw exception_io_no_handler_for_path();
- ptr->list_directory(p_path,p_out,p_abort);
+ TRACK_CALL_TEXT("filesystem::g_list_directory");
+ g_get_interface(p_path)->list_directory(p_path,p_out,p_abort);
}
@@ -224,7 +186,7 @@ static void path_pack_string(pfc::string_base & out,const char * src) out.add_char('|');
}
-static int path_unpack_string(pfc::string8 & out,const char * src)
+static int path_unpack_string(pfc::string_base & out,const char * src)
{
int ptr=0;
if (src[ptr++]!='|') return -1;
@@ -240,26 +202,23 @@ static int path_unpack_string(pfc::string8 & out,const char * src) ptr++;
}
if (src[ptr]!='|') return -1;
- out.add_string(&src[start],len);
+ out.set_string(&src[start],len);
ptr++;
return ptr;
}
void filesystem::g_open_precache(service_ptr_t<file> & p_out,const char * p_path,abort_callback & p_abort) {
- service_ptr_t<filesystem> fs;
- if (!g_get_interface(fs,p_path)) throw exception_io_no_handler_for_path();
+ service_ptr_t<filesystem> fs = g_get_interface(p_path);
if (fs->is_remote(p_path)) throw exception_io_object_is_remote();
fs->open(p_out,p_path,open_mode_read,p_abort);
}
bool filesystem::g_is_remote(const char * p_path) {
- service_ptr_t<filesystem> fs;
- if (g_get_interface(fs,p_path)) return fs->is_remote(p_path);
- else throw exception_io_no_handler_for_path();
+ return g_get_interface(p_path)->is_remote(p_path);
}
-bool filesystem::g_is_remote_safe(const char * p_path) {
+bool filesystem::g_is_recognized_and_remote(const char * p_path) {
service_ptr_t<filesystem> fs;
if (g_get_interface(fs,p_path)) return fs->is_remote(p_path);
else return false;
@@ -314,7 +273,7 @@ bool archive_impl::get_canonical_path(const char * path,pfc::string_base & out) bool archive_impl::is_our_path(const char * path)
{
- if (strncmp(path,"unpack://",9)) return false;
+ if (!g_is_unpack_path(path)) return false;
const char * type = get_archive_type();
path += 9;
while(*type)
@@ -397,8 +356,21 @@ bool archive_impl::relative_path_parse(const char * relative_path,const char * p return false;
}
-bool archive_impl::g_parse_unpack_path(const char * path,pfc::string8 & archive,pfc::string8 & file)
-{
+bool archive_impl::g_parse_unpack_path_ex(const char * path,pfc::string_base & archive,pfc::string_base & file, pfc::string_base & type) {
+ PFC_ASSERT( g_is_unpack_path(path) );
+ const char * base = path + unpack_prefix_len; // strstr(path, "//");
+ const char * split = strchr(path,'|');
+ if (base == NULL || split == NULL || base > split) return false;
+ // base += 2;
+ type.set_string( base, split - base );
+ int delta = path_unpack_string(archive,split);
+ if (delta<0) return false;
+ split += delta;
+ file = split;
+ return true;
+}
+bool archive_impl::g_parse_unpack_path(const char * path,pfc::string_base & archive,pfc::string_base & file) {
+ PFC_ASSERT( g_is_unpack_path(path) );
path = strchr(path,'|');
if (!path) return false;
int delta = path_unpack_string(archive,path);
@@ -408,9 +380,13 @@ bool archive_impl::g_parse_unpack_path(const char * path,pfc::string8 & archive, return true;
}
+bool archive_impl::g_is_unpack_path(const char * path) {
+ return strncmp(path,unpack_prefix,unpack_prefix_len) == 0;
+}
+
void archive_impl::g_make_unpack_path(pfc::string_base & path,const char * archive,const char * file,const char * name)
{
- path = "unpack://";
+ path = unpack_prefix;
path += name;
path_pack_string(path,archive);
path += file;
@@ -513,7 +489,6 @@ namespace { }
private:
pfc::string8_fastalloc m_target;
-// t_io_result m_status;
};
}
@@ -533,9 +508,9 @@ void filesystem::g_copy(const char * src,const char * dst,abort_callback & p_abo if (size > 0) {
try {
file::g_transfer_object(r_src,r_dst,size,p_abort);
- } catch(std::exception) {
+ } catch(...) {
r_dst.release();
- try {g_remove(dst,abort_callback_impl());} catch(std::exception) {}
+ try {g_remove(dst,abort_callback_dummy());} catch(...) {}
throw;
}
}
@@ -604,9 +579,7 @@ void archive_impl::create_directory(const char * path,abort_callback &) { void filesystem::g_get_stats(const char * p_path,t_filestats & p_stats,bool & p_is_writeable,abort_callback & p_abort) {
TRACK_CALL_TEXT("filesystem::g_get_stats");
- service_ptr_t<filesystem> fs;
- if (!g_get_interface(fs,p_path)) throw exception_io_no_handler_for_path();
- return fs->get_stats(p_path,p_stats,p_is_writeable,p_abort);
+ return g_get_interface(p_path)->get_stats(p_path,p_stats,p_is_writeable,p_abort);
}
void archive_impl::get_stats(const char * p_path,t_filestats & p_stats,bool & p_is_writeable,abort_callback & p_abort) {
@@ -637,14 +610,24 @@ t_filetimestamp foobar2000_io::filetimestamp_from_system_timer() }
void stream_reader::read_string_ex(pfc::string_base & p_out,t_size p_bytes,abort_callback & p_abort) {
- char * ptr = p_out.lock_buffer(p_bytes);
- try {
- read_object(ptr,p_bytes,p_abort);
- } catch(...) {
- p_out.unlock_buffer();
- throw;
+ const t_size expBase = 64*1024;
+ if (p_bytes > expBase) {
+ pfc::array_t<char> temp;
+ t_size allocWalk = expBase;
+ t_size done = 0;
+ for(;;) {
+ const t_size target = pfc::min_t(allocWalk, p_bytes);
+ temp.set_size(target);
+ read_object(temp.get_ptr() + done, target - done, p_abort);
+ if (target == p_bytes) break;
+ done = target;
+ allocWalk <<= 1;
+ }
+ p_out.set_string(temp.get_ptr(), p_bytes);
+ } else {
+ pfc::string_buffer buf(p_out, p_bytes);
+ read_object(buf.get_ptr(),p_bytes,p_abort);
}
- p_out.unlock_buffer();
}
void stream_reader::read_string(pfc::string_base & p_out,abort_callback & p_abort)
{
@@ -664,13 +647,16 @@ void stream_reader::read_string_raw(pfc::string_base & p_out,abort_callback & p_ if (delta_done < delta) break;
}
}
-
-void stream_writer::write_string(const char * p_string,abort_callback & p_abort) {
- t_uint32 len = pfc::downcast_guarded<t_uint32>(strlen(p_string));
+void stream_writer::write_string(const char * p_string,t_size p_len,abort_callback & p_abort) {
+ t_uint32 len = pfc::downcast_guarded<t_uint32>(pfc::strlen_max(p_string,p_len));
write_lendian_t(len,p_abort);
write_object(p_string,len,p_abort);
}
+void stream_writer::write_string(const char * p_string,abort_callback & p_abort) {
+ write_string(p_string,~0,p_abort);
+}
+
void stream_writer::write_string_raw(const char * p_string,abort_callback & p_abort) {
write_object(p_string,strlen(p_string),p_abort);
}
@@ -680,21 +666,6 @@ void file::truncate(t_uint64 p_position,abort_callback & p_abort) { }
-format_filetimestamp::format_filetimestamp(t_filetimestamp p_timestamp) {
-#ifdef _WIN32
- SYSTEMTIME st; FILETIME ft;
- if (FileTimeToLocalFileTime((FILETIME*)&p_timestamp,&ft)) {
- if (FileTimeToSystemTime(&ft,&st)) {
- m_buffer
- << pfc::format_uint(st.wYear,4) << "-" << pfc::format_uint(st.wMonth,2) << "-" << pfc::format_uint(st.wDay,2) << " "
- << pfc::format_uint(st.wHour,2) << ":" << pfc::format_uint(st.wMinute,2) << ":" << pfc::format_uint(st.wSecond,2);
- } else m_buffer << "<invalid timestamp>";
- } else m_buffer << "<invalid timestamp>";
-#else
-#error portme
-#endif
-}
-
#ifdef _WIN32
namespace {
//rare/weird win32 errors that didn't make it to the main API
@@ -702,6 +673,7 @@ namespace { PFC_DECLARE_EXCEPTION(exception_io_invalid_drive, exception_io_not_found,"Drive not found");
PFC_DECLARE_EXCEPTION(exception_io_win32, exception_io,"Generic win32 I/O error");
PFC_DECLARE_EXCEPTION(exception_io_buffer_overflow, exception_io,"The file name is too long");
+ PFC_DECLARE_EXCEPTION(exception_io_invalid_path_syntax, exception_io,"Invalid path syntax");
class exception_io_win32_ex : public exception_io_win32 {
public:
@@ -712,7 +684,9 @@ namespace { pfc::string8 m_msg;
};
}
-void foobar2000_io::exception_io_from_win32(DWORD p_code) {
+PFC_NORETURN void foobar2000_io::exception_io_from_win32(DWORD p_code) {
+ //pfc::string_fixed_t<32> debugMsg; debugMsg << "Win32 I/O error #" << (t_uint32)p_code;
+ //TRACK_CALL_TEXT(debugMsg);
switch(p_code) {
case ERROR_ALREADY_EXISTS:
case ERROR_FILE_EXISTS:
@@ -751,6 +725,10 @@ void foobar2000_io::exception_io_from_win32(DWORD p_code) { throw exception_io_buffer_overflow();
case ERROR_DISK_CHANGE:
throw exception_io_disk_change();
+ case ERROR_DIR_NOT_EMPTY:
+ throw exception_io_directory_not_empty();
+ case ERROR_INVALID_NAME:
+ throw exception_io_invalid_path_syntax();
default:
throw exception_io_win32_ex(p_code);
}
@@ -784,7 +762,7 @@ t_filesize file::get_remaining(abort_callback & p_abort) { t_filesize file::g_transfer(service_ptr_t<file> p_src,service_ptr_t<file> p_dst,t_filesize p_bytes,abort_callback & p_abort) {
- return g_transfer(pfc::safe_cast<stream_reader*>(p_src.get_ptr()),pfc::safe_cast<stream_writer*>(p_dst.get_ptr()),p_bytes,p_abort);
+ return g_transfer(pfc::implicit_cast<stream_reader*>(p_src.get_ptr()),pfc::implicit_cast<stream_writer*>(p_dst.get_ptr()),p_bytes,p_abort);
}
void file::g_transfer_object(service_ptr_t<file> p_src,service_ptr_t<file> p_dst,t_filesize p_bytes,abort_callback & p_abort) {
@@ -796,7 +774,7 @@ void file::g_transfer_object(service_ptr_t<file> p_src,service_ptr_t<file> p_dst if (newpos > oldsize) p_dst->resize(newpos ,p_abort);
}
}
- g_transfer_object(pfc::safe_cast<stream_reader*>(p_src.get_ptr()),pfc::safe_cast<stream_writer*>(p_dst.get_ptr()),p_bytes,p_abort);
+ g_transfer_object(pfc::implicit_cast<stream_reader*>(p_src.get_ptr()),pfc::implicit_cast<stream_writer*>(p_dst.get_ptr()),p_bytes,p_abort);
}
@@ -818,4 +796,100 @@ void foobar2000_io::generate_temp_location_for_file(pfc::string_base & p_out, co p_out += pfc::format_hexdump(hash.m_data,sizeof(hash.m_data),"");
p_out += ".";
p_out += p_extension;
+}
+
+
+t_filesize file::skip(t_filesize p_bytes,abort_callback & p_abort) {
+ if (p_bytes > 1024 && can_seek()) {
+ const t_filesize size = get_size(p_abort);
+ if (size != filesize_invalid) {
+ const t_filesize position = get_position(p_abort);
+ const t_filesize toskip = pfc::min_t( p_bytes, size - position );
+ seek(position + toskip,p_abort);
+ return toskip;
+ }
+ }
+ return stream_reader::skip(p_bytes,p_abort);
+}
+
+bool foobar2000_io::_extract_native_path_ptr(const char * & p_fspath) {
+ static const char header[] = "file://"; static const t_size headerLen = 7;
+ if (strncmp(p_fspath,header,headerLen) != 0) return false;
+ p_fspath += headerLen;
+ return true;
+}
+bool foobar2000_io::extract_native_path(const char * p_fspath,pfc::string_base & p_native) {
+ if (!_extract_native_path_ptr(p_fspath)) return false;
+ p_native = p_fspath;
+ return true;
+}
+
+bool foobar2000_io::extract_native_path_ex(const char * p_fspath, pfc::string_base & p_native) {
+ if (!_extract_native_path_ptr(p_fspath)) return false;
+ if (p_fspath[0] != '\\' || p_fspath[1] != '\\') {
+ p_native = "\\\\?\\";
+ p_native += p_fspath;
+ } else {
+ p_native = p_fspath;
+ }
+ return true;
+}
+
+pfc::string stream_reader::read_string(abort_callback & p_abort) {
+ t_uint32 len;
+ read_lendian_t(len,p_abort);
+ return read_string_ex(len,p_abort);
+}
+pfc::string stream_reader::read_string_ex(t_size p_len,abort_callback & p_abort) {
+ pfc::rcptr_t<pfc::string8> temp; temp.new_t();
+ read_object(temp->lock_buffer(p_len),p_len,p_abort);
+ temp->unlock_buffer();
+ return pfc::string::t_data(temp);
+}
+
+
+void filesystem::remove_directory_content(const char * path, abort_callback & abort) {
+ class myCallback : public directory_callback {
+ public:
+ bool on_entry(filesystem * p_owner,abort_callback & p_abort,const char * p_url,bool p_is_subdirectory,const t_filestats & p_stats) {
+ if (p_is_subdirectory) p_owner->list_directory(p_url, *this, p_abort);
+ try {
+ p_owner->remove(p_url, p_abort);
+ } catch(exception_io_not_found) {}
+ return true;
+ }
+ };
+ myCallback cb;
+ list_directory(path, cb, abort);
+}
+void filesystem::remove_object_recur(const char * path, abort_callback & abort) {
+ try {
+ remove_directory_content(path, abort);
+ } catch(exception_io_not_found) {}
+ remove(path, abort);
+}
+
+void filesystem::g_remove_object_recur(const char * path, abort_callback & abort) {
+ g_get_interface(path)->remove_object_recur(path, abort);
+}
+
+void foobar2000_io::purgeOldFiles(const char * directory, t_filetimestamp period, abort_callback & abort) {
+
+ class myCallback : public directory_callback {
+ public:
+ myCallback(t_filetimestamp period) : m_base(filetimestamp_from_system_timer() - period) {}
+ bool on_entry(filesystem * p_owner,abort_callback & p_abort,const char * p_url,bool p_is_subdirectory,const t_filestats & p_stats) {
+ if (!p_is_subdirectory && p_stats.m_timestamp < m_base) {
+ try {
+ filesystem::g_remove_timeout(p_url, 1, p_abort);
+ } catch(exception_io_not_found) {}
+ }
+ return true;
+ }
+ private:
+ const t_filetimestamp m_base;
+ };
+
+ myCallback cb(period);
+ filesystem::g_list_directory(directory, cb, abort);
}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem.h index 0960bd4..eda933a 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem.h @@ -1,7 +1,3 @@ -#ifndef _FOOBAR2000_SDK_FILESYSTEM_H_
-#define _FOOBAR2000_SDK_FILESYSTEM_H_
-
-class playlist_loader_callback;
class file_info;
//! Contains various I/O related structures and interfaces.
@@ -17,7 +13,9 @@ namespace foobar2000_io //! Invalid/unknown file timestamp constant. Also see: t_filetimestamp.
const t_filetimestamp filetimestamp_invalid = 0;
//! Invalid/unknown file size constant. Also see: t_filesize.
- const t_filesize filesize_invalid = (t_filesize)(~0);
+ static const t_filesize filesize_invalid = (t_filesize)(~0);
+
+ static const t_filetimestamp filetimestamp_1second_increment = 10000000;
//! Generic I/O error. Root class for I/O failure exception. See relevant default message for description of each derived exception class.
PFC_DECLARE_EXCEPTION(exception_io, pfc::exception,"I/O error");
@@ -57,6 +55,8 @@ namespace foobar2000_io PFC_DECLARE_EXCEPTION(exception_io_file_corrupted, exception_io,"The file is corrupted");
//! The disc required for requested operation is not available.
PFC_DECLARE_EXCEPTION(exception_io_disk_change, exception_io,"Disc not available");
+ //! The directory is not empty.
+ PFC_DECLARE_EXCEPTION(exception_io_directory_not_empty, exception_io,"Directory not empty");
//! Stores file stats (size and timestamp).
struct t_filestats {
@@ -73,7 +73,8 @@ namespace foobar2000_io static const t_filestats filestats_invalid = {filesize_invalid,filetimestamp_invalid};
#ifdef _WIN32
- void exception_io_from_win32(DWORD p_code);
+ PFC_NORETURN void exception_io_from_win32(DWORD p_code);
+#define WIN32_IO_OP(X) {SetLastError(NO_ERROR); if (!(X)) exception_io_from_win32(GetLastError());}
#endif
//! Generic interface to read data from a nonseekable stream. Also see: stream_writer, file. \n
@@ -114,13 +115,32 @@ namespace foobar2000_io //! @param p_abort abort_callback object signaling user aborting the operation.
template<typename T> inline void read_bendian_t(T& p_object,abort_callback & p_abort) {read_object_t(p_object,p_abort); byte_order::order_be_to_native_t(p_object);}
- //! Helper function; reads string (with 32-bit header indicating length in bytes followed by UTF-8 encoded data without null terminator).
+ //! Helper function; reads a string (with a 32-bit header indicating length in bytes followed by UTF-8 encoded data without a null terminator).
void read_string(pfc::string_base & p_out,abort_callback & p_abort);
//! Helper function; alternate way of storing strings; assumes string takes space up to end of stream.
void read_string_raw(pfc::string_base & p_out,abort_callback & p_abort);
+ //! Helper function; reads a string (with a 32-bit header indicating length in bytes followed by UTF-8 encoded data without a null terminator).
+ pfc::string read_string(abort_callback & p_abort);
- //! Helper function; reads string of specified length from the stream.
+ //! Helper function; reads a string of specified length from the stream.
void read_string_ex(pfc::string_base & p_out,t_size p_bytes,abort_callback & p_abort);
+ //! Helper function; reads a string of specified length from the stream.
+ pfc::string read_string_ex(t_size p_len,abort_callback & p_abort);
+
+ template<typename t_outArray>
+ void read_till_eof(t_outArray & out, abort_callback & abort) {
+ pfc::assert_raw_type<typename t_outArray::t_item>();
+ const t_size itemWidth = sizeof(typename t_outArray::t_item);
+ out.set_size(pfc::max_t<t_size>(1,256 / itemWidth)); t_size done = 0;
+ for(;;) {
+ t_size delta = out.get_size() - done;
+ t_size delta2 = read(out.get_ptr() + done, delta * itemWidth, abort ) / itemWidth;
+ done += delta2;
+ if (delta2 != delta) break;
+ out.set_size(out.get_size() << 1);
+ }
+ out.set_size(done);
+ }
protected:
stream_reader() {}
~stream_reader() {}
@@ -155,6 +175,10 @@ namespace foobar2000_io //! Helper function; writes string (with 32-bit header indicating length in bytes followed by UTF-8 encoded data without null terminator).
void write_string(const char * p_string,abort_callback & p_abort);
+ void write_string(const char * p_string,t_size p_len,abort_callback & p_abort);
+
+ template<typename T>
+ void write_string(const T& val,abort_callback & p_abort) {write_string(pfc::stringToPtr(val),p_abort);}
//! Helper function; writes raw string to the stream, with no length info or null terminators.
void write_string_raw(const char * p_string,abort_callback & p_abort);
@@ -189,17 +213,17 @@ namespace foobar2000_io //! @returns Read/write cursor position
virtual t_filesize get_position(abort_callback & p_abort) = 0;
- //! Resizes file to specified size in bytes.
+ //! Resizes file to the specified size in bytes.
//! @param p_abort abort_callback object signaling user aborting the operation.
virtual void resize(t_filesize p_size,abort_callback & p_abort) = 0;
- //! Sets read/write cursor position to specific offset.
+ //! Sets read/write cursor position to the specified offset.
//! @param p_position position to seek to.
//! @param p_abort abort_callback object signaling user aborting the operation.
virtual void seek(t_filesize p_position,abort_callback & p_abort) = 0;
- //! Sets read/write cursor position to specific offset; extended form allowing seeking relative to current position or to end of file.
+ //! Sets read/write cursor position to the specified offset; extended form allowing seeking relative to current position or to end of file.
//! @param p_position Position to seek to; interpretation of this value depends on p_mode parameter.
//! @param p_mode Seeking mode; see t_seek_mode enum values for further description.
//! @param p_abort abort_callback object signaling user aborting the operation.
@@ -269,9 +293,14 @@ namespace foobar2000_io //! Helper; improved performance over g_transfer_file on streams (avoids disk fragmentation when transferring large blocks).
static void g_transfer_object(service_ptr_t<file> p_src,service_ptr_t<file> p_dst,t_filesize p_bytes,abort_callback & p_abort);
+
+ t_filesize skip(t_filesize p_bytes,abort_callback & p_abort);
+
FB2K_MAKE_SERVICE_INTERFACE(file,service_base);
};
+ typedef service_ptr_t<file> file_ptr;
+
//! Special hack for shoutcast metadata nonsense handling. Documentme.
class file_dynamicinfo : public file {
public:
@@ -293,6 +322,18 @@ namespace foobar2000_io };
typedef file_readonly_t<file> file_readonly;
+ class file_streamstub : public file_readonly {
+ public:
+ t_size read(void * p_buffer,t_size p_bytes,abort_callback & p_abort) {return 0;}
+ t_filesize get_size(abort_callback & p_abort) {return filesize_invalid;}
+ t_filesize get_position(abort_callback & p_abort) {return 0;}
+ bool get_content_type(pfc::string_base & p_out) {return false;}
+ bool is_remote() {return true;}
+ void reopen(abort_callback&) {}
+ void seek(t_filesize p_position,abort_callback & p_abort) {throw exception_io_object_not_seekable();}
+ bool can_seek() {return false;}
+ };
+
class filesystem;
class NOVTABLE directory_callback {
@@ -306,6 +347,7 @@ namespace foobar2000_io //! Implementation: standard implementations for local filesystem etc are provided by core.\n
//! Instantiation: use static helper functions rather than calling filesystem interface methods directly, e.g. filesystem::g_open() to open a file.
class NOVTABLE filesystem : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(filesystem);
public:
//! Enumeration specifying how to open a file. See: filesystem::open(), filesystem::g_open().
enum t_open_mode {
@@ -338,15 +380,18 @@ namespace foobar2000_io virtual void list_directory(const char * p_path,directory_callback & p_out,abort_callback & p_abort)=0;
- //! Hint; returns whether this filesystem supports mime types.
+ //! Hint; returns whether this filesystem supports mime types. \n
+ //! When this returns false, all file::get_content_type() calls on files opened thru this filesystem implementation will return false; otherwise, file::get_content_type() calls may return true depending on the file.
virtual bool supports_content_types() = 0;
static void g_get_canonical_path(const char * path,pfc::string_base & out);
static void g_get_display_path(const char * path,pfc::string_base & out);
static bool g_get_interface(service_ptr_t<filesystem> & p_out,const char * path);//path is AFTER get_canonical_path
+ static filesystem::ptr g_get_interface(const char * path);// throws exception_io_no_handler_for_path on failure
static bool g_is_remote(const char * p_path);//path is AFTER get_canonical_path
- static bool g_is_remote_safe(const char * p_path);//path is AFTER get_canonical_path
+ static bool g_is_recognized_and_remote(const char * p_path);//path is AFTER get_canonical_path
+ static bool g_is_remote_safe(const char * p_path) {return g_is_recognized_and_remote(p_path);}
static bool g_is_remote_or_unrecognized(const char * p_path);
static bool g_is_recognized_path(const char * p_path);
@@ -388,7 +433,9 @@ namespace foobar2000_io static bool g_is_valid_directory(const char * path,abort_callback & p_abort);
static bool g_is_empty_directory(const char * path,abort_callback & p_abort);
- FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(filesystem);
+ void remove_object_recur(const char * path, abort_callback & abort);
+ void remove_directory_content(const char * path, abort_callback & abort);
+ static void g_remove_object_recur(const char * path, abort_callback & abort);
};
class directory_callback_impl : public directory_callback
@@ -404,7 +451,7 @@ namespace foobar2000_io pfc::list_t<pfc::rcptr_t<t_entry> > m_data;
bool m_recur;
- static int sortfunc(const pfc::rcptr_const_t<t_entry> & p1, const pfc::rcptr_const_t<t_entry> & p2) {return stricmp_utf8(p1->m_path,p2->m_path);}
+ static int sortfunc(const pfc::rcptr_t<const t_entry> & p1, const pfc::rcptr_t<const t_entry> & p2) {return stricmp_utf8(p1->m_path,p2->m_path);}
public:
bool on_entry(filesystem * owner,abort_callback & p_abort,const char * url,bool is_subdirectory,const t_filestats & p_stats);
@@ -454,13 +501,13 @@ namespace foobar2000_io virtual void open_archive(service_ptr_t<file> & p_out,const char * archive,const char * file, abort_callback & p_abort)=0;//opens for reading
public:
//override these
-
virtual void archive_list(const char * path,const service_ptr_t<file> & p_reader,archive_callback & p_out,bool p_want_readers)=0;
- //playlist_loader_callback ONLY for on_progress calls
-
- static bool g_parse_unpack_path(const char * path,pfc::string8 & archive,pfc::string8 & file);
- static void g_make_unpack_path(pfc::string_base & path,const char * archive,const char * file,const char * name);
+
+ static bool g_is_unpack_path(const char * path);
+ static bool g_parse_unpack_path(const char * path,pfc::string_base & archive,pfc::string_base & file);
+ static bool g_parse_unpack_path_ex(const char * path,pfc::string_base & archive,pfc::string_base & file, pfc::string_base & type);
+ static void g_make_unpack_path(pfc::string_base & path,const char * archive,const char * file,const char * type);
void make_unpack_path(pfc::string_base & path,const char * archive,const char * file);
@@ -472,23 +519,138 @@ namespace foobar2000_io t_filetimestamp filetimestamp_from_system_timer();
- //! Warning: this formats according to system timezone settings, created strings should be used for display only, never for storage.
- class format_filetimestamp {
+#ifdef _WIN32
+ inline t_filetimestamp import_filetimestamp(FILETIME ft) {
+ return *reinterpret_cast<t_filetimestamp*>(&ft);
+ }
+#endif
+
+ void generate_temp_location_for_file(pfc::string_base & p_out, const char * p_origpath,const char * p_extension,const char * p_magic);
+
+
+ static file_ptr fileOpen(const char * p_path,filesystem::t_open_mode p_mode,abort_callback & p_abort,double p_timeout) {
+ file_ptr temp; filesystem::g_open_timeout(temp,p_path,p_mode,p_timeout,p_abort); PFC_ASSERT(temp.is_valid()); return temp;
+ }
+
+ static file_ptr fileOpenReadExisting(const char * p_path,abort_callback & p_abort,double p_timeout = 0) {
+ return fileOpen(p_path,filesystem::open_mode_read,p_abort,p_timeout);
+ }
+ static file_ptr fileOpenWriteExisting(const char * p_path,abort_callback & p_abort,double p_timeout = 0) {
+ return fileOpen(p_path,filesystem::open_mode_write_existing,p_abort,p_timeout);
+ }
+ static file_ptr fileOpenWriteNew(const char * p_path,abort_callback & p_abort,double p_timeout = 0) {
+ return fileOpen(p_path,filesystem::open_mode_write_new,p_abort,p_timeout);
+ }
+
+ template<typename t_list>
+ class directory_callback_retrieveList : public directory_callback {
+ public:
+ directory_callback_retrieveList(t_list & p_list,bool p_getFiles,bool p_getSubDirectories) : m_list(p_list), m_getFiles(p_getFiles), m_getSubDirectories(p_getSubDirectories) {}
+ bool on_entry(filesystem * p_owner,abort_callback & p_abort,const char * p_url,bool p_is_subdirectory,const t_filestats & p_stats) {
+ p_abort.check();
+ if (p_is_subdirectory ? m_getSubDirectories : m_getFiles) {
+ m_list.add_item(p_url);
+ }
+ return true;
+ }
+ private:
+ const bool m_getSubDirectories;
+ const bool m_getFiles;
+ t_list & m_list;
+ };
+ template<typename t_list>
+ class directory_callback_retrieveListEx : public directory_callback {
+ public:
+ directory_callback_retrieveListEx(t_list & p_files, t_list & p_directories) : m_files(p_files), m_directories(p_directories) {}
+ bool on_entry(filesystem * p_owner,abort_callback & p_abort,const char * p_url,bool p_is_subdirectory,const t_filestats & p_stats) {
+ p_abort.check();
+ if (p_is_subdirectory) m_directories += p_url;
+ else m_files += p_url;
+ return true;
+ }
+ private:
+ t_list & m_files;
+ t_list & m_directories;
+ };
+ template<typename t_list> class directory_callback_retrieveListRecur : public directory_callback {
public:
- format_filetimestamp(t_filetimestamp p_timestamp);
- operator const char*() const {return m_buffer;}
- const char * get_ptr() const {return m_buffer;}
+ directory_callback_retrieveListRecur(t_list & p_list) : m_list(p_list) {}
+ bool on_entry(filesystem * owner,abort_callback & p_abort,const char * path, bool isSubdir, const t_filestats&) {
+ if (isSubdir) {
+ try { owner->list_directory(path,*this,p_abort); } catch(exception_io) {}
+ } else {
+ m_list.add_item(path);
+ }
+ return true;
+ }
private:
- pfc::string_fixed_t<32> m_buffer;
+ t_list & m_list;
};
- void generate_temp_location_for_file(pfc::string_base & p_out, const char * p_origpath,const char * p_extension,const char * p_magic);
+ template<typename t_list>
+ static void listFiles(const char * p_path,t_list & p_out,abort_callback & p_abort) {
+ directory_callback_retrieveList<t_list> callback(p_out,true,false);
+ filesystem::g_list_directory(p_path,callback,p_abort);
+ }
+ template<typename t_list>
+ static void listDirectories(const char * p_path,t_list & p_out,abort_callback & p_abort) {
+ directory_callback_retrieveList<t_list> callback(p_out,false,true);
+ filesystem::g_list_directory(p_path,callback,p_abort);
+ }
+ template<typename t_list>
+ static void listFilesAndDirectories(const char * p_path,t_list & p_files,t_list & p_directories,abort_callback & p_abort) {
+ directory_callback_retrieveListEx<t_list> callback(p_files,p_directories);
+ filesystem::g_list_directory(p_path,callback,p_abort);
+ }
+ template<typename t_list>
+ static void listFilesRecur(const char * p_path,t_list & p_out,abort_callback & p_abort) {
+ directory_callback_retrieveListRecur<t_list> callback(p_out);
+ filesystem::g_list_directory(p_path,callback,p_abort);
+ }
+
+ bool extract_native_path(const char * p_fspath,pfc::string_base & p_native);
+ bool _extract_native_path_ptr(const char * & p_fspath);
+ bool extract_native_path_ex(const char * p_fspath, pfc::string_base & p_native);//prepends \\?\ where needed
+
+ template<typename T>
+ pfc::string getPathDisplay(const T& source) {
+ pfc::string_formatter temp;
+ filesystem::g_get_display_path(pfc::stringToPtr(source),temp);
+ return temp.toString();
+ }
+ template<typename T>
+ pfc::string getPathCanonical(const T& source) {
+ pfc::string_formatter temp;
+ filesystem::g_get_canonical_path(pfc::stringToPtr(source),temp);
+ return temp.toString();
+ }
+
+
+ static bool matchContentType(const char * fullString, const char * ourType) {
+ t_size lim = pfc::string_find_first(fullString, ';');
+ if (lim != ~0) {
+ while(lim > 0 && fullString[lim-1] == ' ') --lim;
+ }
+ return pfc::stricmp_ascii_ex(fullString,lim, ourType, ~0) == 0;
+ }
+ static bool matchProtocol(const char * fullString, const char * protocolName) {
+ const t_size len = strlen(protocolName);
+ if (pfc::stricmp_ascii_ex(fullString, len, protocolName, len) != 0) return false;
+ return fullString[len] == ':' && fullString[len+1] == '/' && fullString[len+2] == '/';
+ }
+ static void substituteProtocol(pfc::string_base & out, const char * fullString, const char * protocolName) {
+ const char * base = strstr(fullString, "://");
+ if (base) {
+ out = protocolName; out << base;
+ } else {
+ PFC_ASSERT(!"Should not get here");
+ out = fullString;
+ }
+ }
+
+ void purgeOldFiles(const char * directory, t_filetimestamp period, abort_callback & abort);
}
using namespace foobar2000_io;
#include "filesystem_helper.h"
-
-#endif//_FOOBAR2000_SDK_FILESYSTEM_H_
-
-
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem_helper.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem_helper.cpp index 51f2ecd..e8feb4e 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem_helper.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem_helper.cpp @@ -89,7 +89,7 @@ void stream_reader_chunk::g_skip(stream_reader * p_stream,abort_callback & p_abo t_size reader_membuffer_base::read(void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
p_abort.check_e();
t_size max = get_buffer_size();
- if (max < m_offset) throw pfc::exception_bug_check();
+ if (max < m_offset) throw pfc::exception_bug_check_v2();
max -= m_offset;
t_size delta = p_bytes;
if (delta > max) delta = max;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem_helper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem_helper.h index 07ae3dc..d1810c7 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem_helper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/filesystem_helper.h @@ -1,6 +1,3 @@ -#ifndef _FILESYSTEM_HELPER_H_
-#define _FILESYSTEM_HELPER_H_
-
//helper
class file_path_canonical {
public:
@@ -29,7 +26,7 @@ public: t_size read(void * p_buffer,t_size p_bytes,abort_callback & p_abort);
- void write(const void * p_buffer,t_size p_bytes,abort_callback & p_abort) {throw exception_io_sharing_violation();}
+ void write(const void * p_buffer,t_size p_bytes,abort_callback & p_abort) {throw exception_io_denied();}
t_filesize get_size(abort_callback & p_abort) {return get_buffer_size();}
t_filesize get_position(abort_callback & p_abort) {return m_offset;}
@@ -49,6 +46,22 @@ private: t_size m_offset;
};
+class reader_membuffer_simple : public reader_membuffer_base {
+public:
+ reader_membuffer_simple(const void * ptr, t_size size, t_filetimestamp ts = filetimestamp_invalid, bool is_remote = false) : m_isRemote(is_remote), m_ts(ts) {
+ m_data.set_size_discard(size);
+ memcpy(m_data.get_ptr(), ptr, size);
+ }
+ const void * get_buffer() {return m_data.get_ptr();}
+ t_size get_buffer_size() {return m_data.get_size();}
+ t_filetimestamp get_timestamp(abort_callback & p_abort) {return m_ts;}
+ bool is_remote() {return m_isRemote;}
+private:
+ pfc::array_staticsize_t<t_uint8> m_data;
+ t_filetimestamp m_ts;
+ bool m_isRemote;
+};
+
class reader_membuffer_mirror : public reader_membuffer_base
{
public:
@@ -62,13 +75,17 @@ public: p_out = ptr.get_ptr();
return true;
}
-
+ bool get_content_type(pfc::string_base & out) {
+ if (m_contentType.is_empty()) return false;
+ out = m_contentType; return true;
+ }
private:
const void * get_buffer() {return m_buffer.get_ptr();}
t_size get_buffer_size() {return m_buffer.get_size();}
bool init(const service_ptr_t<file> & p_src,abort_callback & p_abort) {
if (p_src->is_in_memory()) return false;//already buffered
+ if (!p_src->get_content_type(m_contentType)) m_contentType.reset();
m_remote = p_src->is_remote();
t_size size = pfc::downcast_guarded<t_size>(p_src->get_size(p_abort));
@@ -88,6 +105,7 @@ private: t_filetimestamp m_timestamp;
pfc::array_t<char> m_buffer;
bool m_remote;
+ pfc::string8 m_contentType;
};
@@ -97,6 +115,12 @@ class reader_limited : public file_readonly { t_filesize end;
public:
+ static file::ptr g_create(file::ptr base, t_filesize offset, t_filesize size, abort_callback & abort) {
+ service_ptr_t<reader_limited> r = new service_impl_t<reader_limited>();
+ if (offset + size < offset) throw pfc::exception_overflow();
+ r->init(base, offset, offset + size, abort);
+ return r;
+ }
reader_limited() {begin=0;end=0;}
reader_limited(const service_ptr_t<file> & p_r,t_filesize p_begin,t_filesize p_end,abort_callback & p_abort) {
r = p_r;
@@ -141,30 +165,84 @@ public: class stream_reader_memblock_ref : public stream_reader
{
public:
+ template<typename t_array> stream_reader_memblock_ref(const t_array & p_array) : m_data(p_array.get_ptr()), m_data_size(p_array.get_size()), m_pointer(0) {
+ pfc::assert_byte_type<typename t_array::t_item>();
+ }
stream_reader_memblock_ref(const void * p_data,t_size p_data_size) : m_data((const unsigned char*)p_data), m_data_size(p_data_size), m_pointer(0) {}
+ stream_reader_memblock_ref() : m_data(NULL), m_data_size(0), m_pointer(0) {}
+
+ template<typename t_array> void set_data(const t_array & data) {
+ pfc::assert_byte_type<typename t_array::t_item>();
+ set_data(data.get_ptr(), data.get_size());
+ }
+
+ void set_data(const void * data, t_size dataSize) {
+ m_pointer = 0;
+ m_data = reinterpret_cast<const unsigned char*>(data);
+ m_data_size = dataSize;
+ }
+
t_size read(void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
- t_size remaining = m_data_size - m_pointer;
- t_size toread = p_bytes;
- if (toread > remaining) toread = remaining;
- if (toread > 0) {
- memcpy(p_buffer,m_data+m_pointer,toread);
- m_pointer += toread;
+ t_size delta = pfc::min_t(p_bytes, get_remaining());
+ memcpy(p_buffer,m_data+m_pointer,delta);
+ m_pointer += delta;
+ return delta;
+ }
+ void read_object(void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
+ if (p_bytes > get_remaining()) throw exception_io_data_truncation();
+ memcpy(p_buffer,m_data+m_pointer,p_bytes);
+ m_pointer += p_bytes;
+ }
+ t_filesize skip(t_filesize p_bytes,abort_callback & p_abort) {
+ t_size remaining = get_remaining();
+ if (p_bytes >= remaining) {
+ m_pointer = m_data_size; return remaining;
+ } else {
+ m_pointer += (t_size)p_bytes; return p_bytes;
+ }
+ }
+ void skip_object(t_filesize p_bytes,abort_callback & p_abort) {
+ if (p_bytes > get_remaining()) {
+ throw exception_io_data_truncation();
+ } else {
+ m_pointer += (t_size)p_bytes;
}
-
- return toread;
}
+ void seek_(t_size offset) {
+ PFC_ASSERT( offset <= m_data_size );
+ m_pointer = offset;
+ }
+ const void * get_ptr_() const {return m_data + m_pointer;}
+ t_size get_remaining() const {return m_data_size - m_pointer;}
+ void reset() {m_pointer = 0;}
private:
const unsigned char * m_data;
t_size m_data_size,m_pointer;
};
+class stream_writer_buffer_simple : public stream_writer {
+public:
+ void write(const void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
+ p_abort.check();
+ t_size base = m_buffer.get_size();
+ if (base + p_bytes < base) throw std::bad_alloc();
+ m_buffer.set_size(base + p_bytes);
+ memcpy( (t_uint8*) m_buffer.get_ptr() + base, p_buffer, p_bytes );
+ }
+
+ typedef pfc::array_t<t_uint8,pfc::alloc_fast> t_buffer;
+
+ pfc::array_t<t_uint8,pfc::alloc_fast> m_buffer;
+};
+
template<class t_storage>
class stream_writer_buffer_append_ref_t : public stream_writer
{
public:
stream_writer_buffer_append_ref_t(t_storage & p_output) : m_output(p_output) {}
void write(const void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
- pfc::static_assert< sizeof(m_output[0]) == 1>();
+ PFC_STATIC_ASSERT( sizeof(m_output[0]) == 1 );
+ p_abort.check();
t_size base = m_output.get_size();
if (base + p_bytes < base) throw std::bad_alloc();
m_output.set_size(base + p_bytes);
@@ -174,29 +252,34 @@ private: t_storage & m_output;
};
-class stream_reader_limited_ref : public stream_reader
-{
+class stream_reader_limited_ref : public stream_reader {
public:
- stream_reader_limited_ref(stream_reader * p_reader,t_size p_limit) : m_reader(p_reader), m_remaining(p_limit) {}
+ stream_reader_limited_ref(stream_reader * p_reader,t_filesize p_limit) : m_reader(p_reader), m_remaining(p_limit) {}
t_size read(void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
- if (p_bytes > m_remaining) p_bytes = m_remaining;
+ if (p_bytes > m_remaining) p_bytes = (t_size)m_remaining;
t_size done = m_reader->read(p_buffer,p_bytes,p_abort);
m_remaining -= done;
return done;
}
- inline t_size get_remaining() const {return m_remaining;}
+ inline t_filesize get_remaining() const {return m_remaining;}
- void flush_remaining(abort_callback & p_abort)
- {
- if (m_remaining > 0) return skip_object(m_remaining,p_abort);
+ t_filesize skip(t_filesize p_bytes,abort_callback & p_abort) {
+ if (p_bytes > m_remaining) p_bytes = m_remaining;
+ t_filesize done = m_reader->skip(p_bytes,p_abort);
+ m_remaining -= done;
+ return done;
+ }
+
+ void flush_remaining(abort_callback & p_abort) {
+ if (m_remaining > 0) skip_object(m_remaining,p_abort);
}
private:
stream_reader * m_reader;
- t_size m_remaining;
+ t_filesize m_remaining;
};
class stream_writer_chunk_dwordheader : public stream_writer
@@ -262,4 +345,322 @@ private: unsigned char m_buffer[255];
};
-#endif//_FILESYSTEM_HELPER_H_
\ No newline at end of file +class stream_reader_dummy : public stream_reader { t_size read(void * p_buffer,t_size p_bytes,abort_callback & p_abort) {return 0;} };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<bool isBigEndian = false> class stream_reader_formatter {
+public:
+ stream_reader_formatter(stream_reader & p_stream,abort_callback & p_abort) : m_stream(p_stream), m_abort(p_abort) {}
+
+ template<typename t_int> void read_int(t_int & p_out) {
+ if (isBigEndian) m_stream.read_bendian_t(p_out,m_abort);
+ else m_stream.read_lendian_t(p_out,m_abort);
+ }
+
+ void read_raw(void * p_buffer,t_size p_bytes) {
+ m_stream.read_object(p_buffer,p_bytes,m_abort);
+ }
+
+ void skip(t_size p_bytes) {m_stream.skip_object(p_bytes,m_abort);}
+
+ template<typename TArray> void read_raw(TArray& data) {
+ pfc::assert_byte_type<typename TArray::t_item>();
+ read_raw(data.get_ptr(),data.get_size());
+ }
+ template<typename TArray> void read_byte_block(TArray & data) {
+ pfc::assert_byte_type<typename TArray::t_item>();
+ t_uint32 size; read_int(size); data.set_size(size);
+ read_raw(data);
+ }
+ template<typename TArray> void read_array(TArray & data) {
+ t_uint32 size; *this >> size; data.set_size(size);
+ for(t_uint32 walk = 0; walk < size; ++walk) *this >> data[walk];
+ }
+
+ stream_reader & m_stream;
+ abort_callback & m_abort;
+};
+
+template<bool isBigEndian = false> class stream_writer_formatter {
+public:
+ stream_writer_formatter(stream_writer & p_stream,abort_callback & p_abort) : m_stream(p_stream), m_abort(p_abort) {}
+
+ template<typename t_int> void write_int(t_int p_int) {
+ if (isBigEndian) m_stream.write_bendian_t(p_int,m_abort);
+ else m_stream.write_lendian_t(p_int,m_abort);
+ }
+
+ void write_raw(const void * p_buffer,t_size p_bytes) {
+ m_stream.write_object(p_buffer,p_bytes,m_abort);
+ }
+ template<typename TArray> void write_raw(const TArray& data) {
+ pfc::assert_byte_type<typename TArray::t_item>();
+ write_raw(data.get_ptr(),data.get_size());
+ }
+
+ template<typename TArray> void write_byte_block(const TArray& data) {
+ pfc::assert_byte_type<typename TArray::t_item>();
+ write_int( pfc::downcast_guarded<t_uint32>(data.get_size()) );
+ write_raw( data );
+ }
+ template<typename TArray> void write_array(const TArray& data) {
+ const t_uint32 size = pfc::downcast_guarded<t_uint32>(data.get_size());
+ *this << size;
+ for(t_uint32 walk = 0; walk < size; ++walk) *this << data[walk];
+ }
+
+ void write_string(const char * str) {
+ const t_size len = strlen(str);
+ *this << pfc::downcast_guarded<t_uint32>(len);
+ write_raw(str, len);
+ }
+ void write_string(const char * str, t_size len_) {
+ const t_size len = pfc::strlen_max(str, len_);
+ *this << pfc::downcast_guarded<t_uint32>(len);
+ write_raw(str, len);
+ }
+
+ stream_writer & m_stream;
+ abort_callback & m_abort;
+};
+
+#define __DECLARE_UINT_OVERLOADS(TYPE) \
+ template<bool isBigEndian> inline stream_reader_formatter<isBigEndian> & operator>>(stream_reader_formatter<isBigEndian> & p_stream,TYPE & p_int) {p_stream.read_int(p_int); return p_stream;} \
+ template<bool isBigEndian> inline stream_writer_formatter<isBigEndian> & operator<<(stream_writer_formatter<isBigEndian> & p_stream,TYPE p_int) {p_stream.write_int(p_int); return p_stream;}
+
+__DECLARE_UINT_OVERLOADS(t_uint8);
+__DECLARE_UINT_OVERLOADS(t_uint16);
+__DECLARE_UINT_OVERLOADS(t_uint32);
+__DECLARE_UINT_OVERLOADS(t_uint64);
+
+#ifdef _MSC_VER
+//SPECIAL FIX
+__DECLARE_UINT_OVERLOADS(unsigned long);
+#endif
+
+#undef __DECLARE_UINT_OVERLOADS
+
+#define __DECLARE_INT_OVERLOADS(TYPE) \
+ template<bool isBigEndian> inline stream_reader_formatter<isBigEndian> & operator>>(stream_reader_formatter<isBigEndian> & p_stream,TYPE & p_int) {typename pfc::sized_int_t<sizeof(TYPE)>::t_unsigned temp;p_stream.read_int(temp); p_int = (TYPE) temp; return p_stream;} \
+ template<bool isBigEndian> inline stream_writer_formatter<isBigEndian> & operator<<(stream_writer_formatter<isBigEndian> & p_stream,TYPE p_int) {p_stream.write_int((typename pfc::sized_int_t<sizeof(TYPE)>::t_unsigned)p_int); return p_stream;}
+
+__DECLARE_INT_OVERLOADS(t_int8);
+__DECLARE_INT_OVERLOADS(t_int16);
+__DECLARE_INT_OVERLOADS(t_int32);
+__DECLARE_INT_OVERLOADS(t_int64);
+
+#ifdef _MSC_VER
+//SPECIAL FIX
+__DECLARE_INT_OVERLOADS(long);
+#endif
+
+#undef __DECLARE_INT_OVERLOADS
+
+template<typename TVal> class __IsTypeByte {
+public:
+ enum {value = pfc::is_same_type<TVal,t_int8>::value || pfc::is_same_type<TVal,t_uint8>::value};
+};
+
+template<bool isBigEndian,typename TVal,size_t Count> stream_reader_formatter<isBigEndian> & operator>>(stream_reader_formatter<isBigEndian> & p_stream,TVal (& p_array)[Count]) {
+ if (__IsTypeByte<TVal>::value) {
+ p_stream.read_raw(p_array,Count);
+ } else {
+ for(t_size walk = 0; walk < Count; ++walk) p_stream >> p_array[walk];
+ }
+ return p_stream;
+}
+
+template<bool isBigEndian,typename TVal,size_t Count> stream_writer_formatter<isBigEndian> & operator<<(stream_writer_formatter<isBigEndian> & p_stream,TVal const (& p_array)[Count]) {
+ if (__IsTypeByte<TVal>::value) {
+ p_stream.write_raw(p_array,Count);
+ } else {
+ for(t_size walk = 0; walk < Count; ++walk) p_stream << p_array[walk];
+ }
+ return p_stream;
+}
+
+#define FB2K_STREAM_READER_OVERLOAD(type) \
+ template<bool isBigEndian> stream_reader_formatter<isBigEndian> & operator>>(stream_reader_formatter<isBigEndian> & stream,type & value)
+
+#define FB2K_STREAM_WRITER_OVERLOAD(type) \
+ template<bool isBigEndian> stream_writer_formatter<isBigEndian> & operator<<(stream_writer_formatter<isBigEndian> & stream,const type & value)
+
+FB2K_STREAM_READER_OVERLOAD(GUID) {
+ return stream >> value.Data1 >> value.Data2 >> value.Data3 >> value.Data4;
+}
+
+FB2K_STREAM_WRITER_OVERLOAD(GUID) {
+ return stream << value.Data1 << value.Data2 << value.Data3 << value.Data4;
+}
+
+FB2K_STREAM_READER_OVERLOAD(pfc::string) {
+ t_uint32 len; stream >> len;
+ value = stream.m_stream.read_string_ex(len,stream.m_abort);
+ return stream;
+}
+
+FB2K_STREAM_WRITER_OVERLOAD(pfc::string) {
+ stream << pfc::downcast_guarded<t_uint32>(value.length());
+ stream.write_raw(value.ptr(),value.length());
+ return stream;
+}
+
+FB2K_STREAM_READER_OVERLOAD(pfc::string_base) {
+ stream.m_stream.read_string(value, stream.m_abort);
+ return stream;
+}
+FB2K_STREAM_WRITER_OVERLOAD(pfc::string_base) {
+ const char * val = value.get_ptr();
+ const t_size len = strlen(val);
+ stream << pfc::downcast_guarded<t_uint32>(len);
+ stream.write_raw(val,len);
+ return stream;
+}
+
+
+FB2K_STREAM_WRITER_OVERLOAD(float) {
+ union {
+ float f; t_uint32 i;
+ } u; u.f = value;
+ return stream << u.i;
+}
+
+FB2K_STREAM_READER_OVERLOAD(float) {
+ union { float f; t_uint32 i;} u;
+ stream >> u.i; value = u.f;
+ return stream;
+}
+
+FB2K_STREAM_WRITER_OVERLOAD(double) {
+ union {
+ double f; t_uint64 i;
+ } u; u.f = value;
+ return stream << u.i;
+}
+
+FB2K_STREAM_READER_OVERLOAD(double) {
+ union { double f; t_uint64 i;} u;
+ stream >> u.i; value = u.f;
+ return stream;
+}
+
+FB2K_STREAM_WRITER_OVERLOAD(bool) {
+ t_uint8 temp = value ? 1 : 0;
+ return stream << temp;
+}
+FB2K_STREAM_READER_OVERLOAD(bool) {
+ t_uint8 temp; stream >> temp; value = temp != 0;
+ return stream;
+}
+
+template<bool BE = false>
+class stream_writer_formatter_simple : public stream_writer_formatter<BE> {
+public:
+ stream_writer_formatter_simple() : stream_writer_formatter(_m_stream,_m_abort), m_buffer(_m_stream.m_buffer) {}
+
+ typedef stream_writer_buffer_simple::t_buffer t_buffer;
+ t_buffer & m_buffer;
+private:
+ stream_writer_buffer_simple _m_stream;
+ abort_callback_dummy _m_abort;
+};
+
+template<bool BE = false>
+class stream_reader_formatter_simple_ref : public stream_reader_formatter<BE> {
+public:
+ stream_reader_formatter_simple_ref(const void * source, t_size sourceSize) : stream_reader_formatter(_m_stream,_m_abort), _m_stream(source,sourceSize) {}
+ template<typename TSource> stream_reader_formatter_simple_ref(const TSource& source) : stream_reader_formatter(_m_stream,_m_abort), _m_stream(source) {}
+ stream_reader_formatter_simple_ref() : stream_reader_formatter(_m_stream,_m_abort) {}
+
+ void set_data(const void * source, t_size sourceSize) {_m_stream.set_data(source,sourceSize);}
+ template<typename TSource> void set_data(const TSource & source) {_m_stream.set_data(source);}
+
+ void reset() {_m_stream.reset();}
+ t_size get_remaining() {return _m_stream.get_remaining();}
+
+ const void * get_ptr_() const {return _m_stream.get_ptr_();}
+private:
+ stream_reader_memblock_ref _m_stream;
+ abort_callback_dummy _m_abort;
+};
+
+template<bool BE = false>
+class stream_reader_formatter_simple : public stream_reader_formatter_simple_ref<BE> {
+public:
+ stream_reader_formatter_simple() {}
+ stream_reader_formatter_simple(const void * source, t_size sourceSize) {set_data(source,sourceSize);}
+ template<typename TSource> stream_reader_formatter_simple(const TSource & source) {set_data(source);}
+
+ void set_data(const void * source, t_size sourceSize) {
+ m_content.set_data_fromptr(reinterpret_cast<const t_uint8*>(source), sourceSize);
+ onContentChange();
+ }
+ template<typename TSource> void set_data(const TSource & source) {
+ m_content = source;
+ onContentChange();
+ }
+private:
+ void onContentChange() {
+ stream_reader_formatter_simple_ref<BE>::set_data(m_content);
+ }
+ pfc::array_t<t_uint8> m_content;
+};
+
+
+
+
+
+
+template<bool isBigEndian> class _stream_reader_formatter_translator {
+public:
+ _stream_reader_formatter_translator(stream_reader_formatter<isBigEndian> & stream) : m_stream(stream) {}
+ typedef _stream_reader_formatter_translator<isBigEndian> t_self;
+ template<typename t_what> t_self & operator||(t_what & out) {m_stream >> out; return *this;}
+private:
+ stream_reader_formatter<isBigEndian> & m_stream;
+};
+template<bool isBigEndian> class _stream_writer_formatter_translator {
+public:
+ _stream_writer_formatter_translator(stream_writer_formatter<isBigEndian> & stream) : m_stream(stream) {}
+ typedef _stream_writer_formatter_translator<isBigEndian> t_self;
+ template<typename t_what> t_self & operator||(const t_what & in) {m_stream << in; return *this;}
+private:
+ stream_writer_formatter<isBigEndian> & m_stream;
+};
+
+#define FB2K_STREAM_RECORD_OVERLOAD(type, code) \
+ FB2K_STREAM_READER_OVERLOAD(type) { \
+ _stream_reader_formatter_translator<isBigEndian> streamEx(stream); \
+ streamEx || code; \
+ return stream; \
+ } \
+ FB2K_STREAM_WRITER_OVERLOAD(type) { \
+ _stream_writer_formatter_translator<isBigEndian> streamEx(stream); \
+ streamEx || code; \
+ return stream; \
+ }
+
+
+
+
+#define FB2K_RETRY_ON_SHARING_VIOLATION(OP, ABORT, TIMEOUT) \
+ { \
+ pfc::lores_timer timer; timer.start(); \
+ for(;;) try { {OP;} break; } catch(exception_io_sharing_violation) { if (timer.query() > TIMEOUT) throw; ABORT.sleep(0.01); } \
+ }
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000.h index 25ea044..8ee7711 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000.h @@ -1,3 +1,5 @@ +// This is the master foobar2000 SDK header file; it includes headers for all functionality exposed through the SDK project. #include this in your source code, never reference any of the other headers directly.
+
#ifndef _FOOBAR2000_H_
#define _FOOBAR2000_H_
@@ -5,9 +7,13 @@ #error Only UNICODE environment supported.
#endif
+// #define FOOBAR2000_TARGET_VERSION 75 // 0.9.6
+// #define FOOBAR2000_TARGET_VERSION 76 // 1.0
+#define FOOBAR2000_TARGET_VERSION 77 // 1.1
+
#include "../../pfc/pfc.h"
-#include "shared.h"
+#include "../shared/shared.h"
#ifndef NOTHROW
#ifdef _MSC_VER
@@ -26,25 +32,28 @@ typedef const char * pcchar; #include "completion_notify.h"
#include "abort_callback.h"
-#include "audio_chunk.h"
#include "componentversion.h"
#include "preferences_page.h"
#include "coreversion.h"
#include "filesystem.h"
+#include "audio_chunk.h"
#include "cfg_var.h"
#include "mem_block_container.h"
#include "audio_postprocessor.h"
#include "playable_location.h"
#include "file_info.h"
#include "file_info_impl.h"
+#include "hasher_md5.h"
#include "metadb_handle.h"
#include "metadb.h"
#include "console.h"
#include "dsp.h"
#include "dsp_manager.h"
#include "initquit.h"
+#include "event_logger.h"
#include "input.h"
#include "input_impl.h"
+#include "decode_postprocessor.h"
#include "menu.h"
#include "contextmenu.h"
#include "contextmenu_manager.h"
@@ -58,7 +67,6 @@ typedef const char * pcchar; #include "resampler.h"
#include "tag_processor.h"
#include "titleformat.h"
-#include "titleformat_config.h"
#include "ui.h"
#include "unpack.h"
#include "vis.h"
@@ -73,10 +81,8 @@ typedef const char * pcchar; #include "config_object.h"
#include "config_object_impl.h"
#include "threaded_process.h"
-#include "hasher_md5.h"
#include "message_loop.h"
#include "input_file_type.h"
-#include "masstagger_action.h"
#include "chapterizer.h"
#include "link_resolver.h"
#include "main_thread_callback.h"
@@ -84,4 +90,20 @@ typedef const char * pcchar; #include "info_lookup_handler.h"
#include "track_property.h"
-#endif //_FOOBAR2000_H_
\ No newline at end of file +#include "album_art.h"
+#include "icon_remap.h"
+#include "ui_element.h"
+#include "ole_interaction.h"
+#include "search_tools.h"
+#include "autoplaylist.h"
+#include "replaygain_scanner.h"
+#include "ui_edit_context.h"
+
+#include "system_time_keeper.h"
+#include "playback_stream_capture.h"
+#include "http_client.h"
+#include "exceptions.h"
+
+#include "progress_meter.h"
+
+#endif //_FOOBAR2000_H_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcproj b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcproj index 0dd5ed1..c2fa339 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcproj +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcproj @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8.00"
+ Version="9.00"
Name="foobar2000_SDK"
ProjectGUID="{E8091321-D79D-4575-86EF-064EA1A4A20D}"
RootNamespace="foobar2000_SDK"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -44,7 +45,7 @@ <Tool
Name="VCCLCompilerTool"
Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x501"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
@@ -180,14 +181,17 @@ />
<Tool
Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x501"
StringPooling="true"
+ BufferSecurityCheck="false"
FloatingPointModel="2"
RuntimeTypeInfo="false"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="foobar2000.h"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -293,6 +297,315 @@ </References>
<Files>
<Filter
+ Name="Header Files"
+ Filter="*.h"
+ >
+ <File
+ RelativePath="abort_callback.h"
+ >
+ </File>
+ <File
+ RelativePath=".\advconfig.h"
+ >
+ </File>
+ <File
+ RelativePath=".\album_art.h"
+ >
+ </File>
+ <File
+ RelativePath="app_close_blocker.h"
+ >
+ </File>
+ <File
+ RelativePath="audio_chunk.h"
+ >
+ </File>
+ <File
+ RelativePath=".\audio_postprocessor.h"
+ >
+ </File>
+ <File
+ RelativePath=".\autoplaylist.h"
+ >
+ </File>
+ <File
+ RelativePath=".\cfg_var.h"
+ >
+ </File>
+ <File
+ RelativePath=".\chapterizer.h"
+ >
+ </File>
+ <File
+ RelativePath="commandline.h"
+ >
+ </File>
+ <File
+ RelativePath=".\completion_notify.h"
+ >
+ </File>
+ <File
+ RelativePath="component.h"
+ >
+ </File>
+ <File
+ RelativePath="componentversion.h"
+ >
+ </File>
+ <File
+ RelativePath="config_io_callback.h"
+ >
+ </File>
+ <File
+ RelativePath="config_object.h"
+ >
+ </File>
+ <File
+ RelativePath="config_object_impl.h"
+ >
+ </File>
+ <File
+ RelativePath="console.h"
+ >
+ </File>
+ <File
+ RelativePath=".\contextmenu.h"
+ >
+ </File>
+ <File
+ RelativePath=".\contextmenu_manager.h"
+ >
+ </File>
+ <File
+ RelativePath="core_api.h"
+ >
+ </File>
+ <File
+ RelativePath="coreversion.h"
+ >
+ </File>
+ <File
+ RelativePath="dsp.h"
+ >
+ </File>
+ <File
+ RelativePath="dsp_manager.h"
+ >
+ </File>
+ <File
+ RelativePath=".\event_logger.h"
+ >
+ </File>
+ <File
+ RelativePath=".\exceptions.h"
+ >
+ </File>
+ <File
+ RelativePath="file_info.h"
+ >
+ </File>
+ <File
+ RelativePath="file_info_impl.h"
+ >
+ </File>
+ <File
+ RelativePath="file_operation_callback.h"
+ >
+ </File>
+ <File
+ RelativePath="filesystem.h"
+ >
+ </File>
+ <File
+ RelativePath=".\filesystem_helper.h"
+ >
+ </File>
+ <File
+ RelativePath="foobar2000.h"
+ >
+ </File>
+ <File
+ RelativePath="genrand.h"
+ >
+ </File>
+ <File
+ RelativePath="hasher_md5.h"
+ >
+ </File>
+ <File
+ RelativePath=".\http_client.h"
+ >
+ </File>
+ <File
+ RelativePath=".\icon_remap.h"
+ >
+ </File>
+ <File
+ RelativePath=".\info_lookup_handler.h"
+ >
+ </File>
+ <File
+ RelativePath="initquit.h"
+ >
+ </File>
+ <File
+ RelativePath="input.h"
+ >
+ </File>
+ <File
+ RelativePath=".\input_file_type.h"
+ >
+ </File>
+ <File
+ RelativePath=".\input_impl.h"
+ >
+ </File>
+ <File
+ RelativePath="library_manager.h"
+ >
+ </File>
+ <File
+ RelativePath=".\link_resolver.h"
+ >
+ </File>
+ <File
+ RelativePath=".\main_thread_callback.h"
+ >
+ </File>
+ <File
+ RelativePath=".\mem_block_container.h"
+ >
+ </File>
+ <File
+ RelativePath=".\menu.h"
+ >
+ </File>
+ <File
+ RelativePath="menu_helpers.h"
+ >
+ </File>
+ <File
+ RelativePath=".\message_loop.h"
+ >
+ </File>
+ <File
+ RelativePath="metadb.h"
+ >
+ </File>
+ <File
+ RelativePath="metadb_handle.h"
+ >
+ </File>
+ <File
+ RelativePath="modeless_dialog.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ole_interaction.h"
+ >
+ </File>
+ <File
+ RelativePath="packet_decoder.h"
+ >
+ </File>
+ <File
+ RelativePath="play_callback.h"
+ >
+ </File>
+ <File
+ RelativePath="playable_location.h"
+ >
+ </File>
+ <File
+ RelativePath=".\playback_control.h"
+ >
+ </File>
+ <File
+ RelativePath=".\playback_stream_capture.h"
+ >
+ </File>
+ <File
+ RelativePath="playlist.h"
+ >
+ </File>
+ <File
+ RelativePath="playlist_loader.h"
+ >
+ </File>
+ <File
+ RelativePath="popup_message.h"
+ >
+ </File>
+ <File
+ RelativePath="preferences_page.h"
+ >
+ </File>
+ <File
+ RelativePath="replaygain.h"
+ >
+ </File>
+ <File
+ RelativePath=".\replaygain_scanner.h"
+ >
+ </File>
+ <File
+ RelativePath="resampler.h"
+ >
+ </File>
+ <File
+ RelativePath=".\search_tools.h"
+ >
+ </File>
+ <File
+ RelativePath="service.h"
+ >
+ </File>
+ <File
+ RelativePath="service_impl.h"
+ >
+ </File>
+ <File
+ RelativePath=".\system_time_keeper.h"
+ >
+ </File>
+ <File
+ RelativePath="tag_processor.h"
+ >
+ </File>
+ <File
+ RelativePath="threaded_process.h"
+ >
+ </File>
+ <File
+ RelativePath="titleformat.h"
+ >
+ </File>
+ <File
+ RelativePath=".\track_property.h"
+ >
+ </File>
+ <File
+ RelativePath="ui.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ui_edit_context.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ui_element.h"
+ >
+ </File>
+ <File
+ RelativePath="unpack.h"
+ >
+ </File>
+ <File
+ RelativePath="vis.h"
+ >
+ </File>
+ </Filter>
+ <Filter
Name="Source Files"
Filter="*.cpp"
>
@@ -318,14 +631,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -335,6 +640,14 @@ </FileConfiguration>
</File>
<File
+ RelativePath=".\advconfig.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\album_art.cpp"
+ >
+ </File>
+ <File
RelativePath="app_close_blocker.cpp"
>
<FileConfiguration
@@ -356,14 +669,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -394,14 +699,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -432,14 +729,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -478,14 +767,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -499,44 +780,6 @@ >
</File>
<File
- RelativePath="config_io_callback.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath="config_object.cpp"
>
<FileConfiguration
@@ -558,14 +801,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -596,14 +831,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -634,14 +861,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -672,14 +891,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -710,14 +921,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -748,14 +951,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -786,14 +981,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -824,14 +1011,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -862,14 +1041,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -900,14 +1071,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -938,14 +1101,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -976,14 +1131,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1014,14 +1161,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1068,14 +1207,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1106,14 +1237,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1144,14 +1267,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1182,14 +1297,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1220,14 +1327,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1258,52 +1357,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="modeless_dialog.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1334,14 +1387,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1372,14 +1417,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1410,14 +1447,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1448,14 +1477,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1486,52 +1507,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="playlist_lock.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1562,14 +1537,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1604,14 +1571,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1642,14 +1601,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1680,14 +1631,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1724,7 +1667,6 @@ >
<Tool
Name="VCCLCompilerTool"
- Optimization="2"
UsePrecompiledHeader="1"
/>
</FileConfiguration>
@@ -1760,14 +1702,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1798,14 +1732,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1836,14 +1762,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1874,52 +1792,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="titleformat_config.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1950,14 +1822,6 @@ />
</FileConfiguration>
<FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
Name="Release|x64"
>
<Tool
@@ -1967,310 +1831,7 @@ </FileConfiguration>
</File>
<File
- RelativePath="utf8api.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Release|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="2"
- />
- </FileConfiguration>
- </File>
- </Filter>
- <Filter
- Name="Header Files"
- Filter="*.h"
- >
- <File
- RelativePath="abort_callback.h"
- >
- </File>
- <File
- RelativePath=".\advconfig.h"
- >
- </File>
- <File
- RelativePath="app_close_blocker.h"
- >
- </File>
- <File
- RelativePath="audio_chunk.h"
- >
- </File>
- <File
- RelativePath=".\audio_postprocessor.h"
- >
- </File>
- <File
- RelativePath=".\cfg_var.h"
- >
- </File>
- <File
- RelativePath=".\chapterizer.h"
- >
- </File>
- <File
- RelativePath="commandline.h"
- >
- </File>
- <File
- RelativePath=".\completion_notify.h"
- >
- </File>
- <File
- RelativePath="component.h"
- >
- </File>
- <File
- RelativePath="componentversion.h"
- >
- </File>
- <File
- RelativePath="config_io_callback.h"
- >
- </File>
- <File
- RelativePath="config_object.h"
- >
- </File>
- <File
- RelativePath="config_object_impl.h"
- >
- </File>
- <File
- RelativePath="console.h"
- >
- </File>
- <File
- RelativePath=".\contextmenu.h"
- >
- </File>
- <File
- RelativePath=".\contextmenu_manager.h"
- >
- </File>
- <File
- RelativePath="core_api.h"
- >
- </File>
- <File
- RelativePath="coreversion.h"
- >
- </File>
- <File
- RelativePath="dsp.h"
- >
- </File>
- <File
- RelativePath="dsp_manager.h"
- >
- </File>
- <File
- RelativePath="file_info.h"
- >
- </File>
- <File
- RelativePath="file_info_impl.h"
- >
- </File>
- <File
- RelativePath="file_operation_callback.h"
- >
- </File>
- <File
- RelativePath="filesystem.h"
- >
- </File>
- <File
- RelativePath=".\filesystem_helper.h"
- >
- </File>
- <File
- RelativePath="foobar2000.h"
- >
- </File>
- <File
- RelativePath="genrand.h"
- >
- </File>
- <File
- RelativePath="hasher_md5.h"
- >
- </File>
- <File
- RelativePath=".\info_lookup_handler.h"
- >
- </File>
- <File
- RelativePath="initquit.h"
- >
- </File>
- <File
- RelativePath="input.h"
- >
- </File>
- <File
- RelativePath=".\input_file_type.h"
- >
- </File>
- <File
- RelativePath=".\input_impl.h"
- >
- </File>
- <File
- RelativePath="library_manager.h"
- >
- </File>
- <File
- RelativePath=".\link_resolver.h"
- >
- </File>
- <File
- RelativePath=".\main_thread_callback.h"
- >
- </File>
- <File
- RelativePath=".\masstagger_action.h"
- >
- </File>
- <File
- RelativePath=".\mem_block_container.h"
- >
- </File>
- <File
- RelativePath=".\menu.h"
- >
- </File>
- <File
- RelativePath="menu_helpers.h"
- >
- </File>
- <File
- RelativePath=".\message_loop.h"
- >
- </File>
- <File
- RelativePath="metadb.h"
- >
- </File>
- <File
- RelativePath="metadb_handle.h"
- >
- </File>
- <File
- RelativePath="modeless_dialog.h"
- >
- </File>
- <File
- RelativePath="packet_decoder.h"
- >
- </File>
- <File
- RelativePath="play_callback.h"
- >
- </File>
- <File
- RelativePath="playable_location.h"
- >
- </File>
- <File
- RelativePath=".\playback_control.h"
- >
- </File>
- <File
- RelativePath="playlist.h"
- >
- </File>
- <File
- RelativePath="playlist_loader.h"
- >
- </File>
- <File
- RelativePath="popup_message.h"
- >
- </File>
- <File
- RelativePath="preferences_page.h"
- >
- </File>
- <File
- RelativePath="replaygain.h"
- >
- </File>
- <File
- RelativePath="resampler.h"
- >
- </File>
- <File
- RelativePath="service.h"
- >
- </File>
- <File
- RelativePath="service_impl.h"
- >
- </File>
- <File
- RelativePath=".\shared.h"
- >
- </File>
- <File
- RelativePath="tag_processor.h"
- >
- </File>
- <File
- RelativePath="threaded_process.h"
- >
- </File>
- <File
- RelativePath="titleformat.h"
- >
- </File>
- <File
- RelativePath="titleformat_config.h"
- >
- </File>
- <File
- RelativePath=".\track_property.h"
- >
- </File>
- <File
- RelativePath="ui.h"
- >
- </File>
- <File
- RelativePath="unpack.h"
- >
- </File>
- <File
- RelativePath="vis.h"
+ RelativePath=".\ui_element.cpp"
>
</File>
</Filter>
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcxproj b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcxproj new file mode 100644 index 0000000..e114bb3 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcxproj @@ -0,0 +1,335 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{E8091321-D79D-4575-86EF-064EA1A4A20D}</ProjectGuid>
+ <RootNamespace>foobar2000_SDK</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>foobar2000.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>foobar2000.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>foobar2000.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>foobar2000.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="abort_callback.h" />
+ <ClInclude Include="advconfig.h" />
+ <ClInclude Include="album_art.h" />
+ <ClInclude Include="app_close_blocker.h" />
+ <ClInclude Include="audio_chunk.h" />
+ <ClInclude Include="audio_postprocessor.h" />
+ <ClInclude Include="autoplaylist.h" />
+ <ClInclude Include="cfg_var.h" />
+ <ClInclude Include="chapterizer.h" />
+ <ClInclude Include="commandline.h" />
+ <ClInclude Include="completion_notify.h" />
+ <ClInclude Include="component.h" />
+ <ClInclude Include="componentversion.h" />
+ <ClInclude Include="config_io_callback.h" />
+ <ClInclude Include="config_object.h" />
+ <ClInclude Include="config_object_impl.h" />
+ <ClInclude Include="console.h" />
+ <ClInclude Include="contextmenu.h" />
+ <ClInclude Include="contextmenu_manager.h" />
+ <ClInclude Include="core_api.h" />
+ <ClInclude Include="coreversion.h" />
+ <ClInclude Include="decode_postprocessor.h" />
+ <ClInclude Include="dsp.h" />
+ <ClInclude Include="dsp_manager.h" />
+ <ClInclude Include="event_logger.h" />
+ <ClInclude Include="exceptions.h" />
+ <ClInclude Include="file_info.h" />
+ <ClInclude Include="file_info_impl.h" />
+ <ClInclude Include="file_operation_callback.h" />
+ <ClInclude Include="filesystem.h" />
+ <ClInclude Include="filesystem_helper.h" />
+ <ClInclude Include="foobar2000.h" />
+ <ClInclude Include="genrand.h" />
+ <ClInclude Include="hasher_md5.h" />
+ <ClInclude Include="http_client.h" />
+ <ClInclude Include="icon_remap.h" />
+ <ClInclude Include="info_lookup_handler.h" />
+ <ClInclude Include="initquit.h" />
+ <ClInclude Include="input.h" />
+ <ClInclude Include="input_file_type.h" />
+ <ClInclude Include="input_impl.h" />
+ <ClInclude Include="library_manager.h" />
+ <ClInclude Include="link_resolver.h" />
+ <ClInclude Include="main_thread_callback.h" />
+ <ClInclude Include="mem_block_container.h" />
+ <ClInclude Include="menu.h" />
+ <ClInclude Include="menu_helpers.h" />
+ <ClInclude Include="message_loop.h" />
+ <ClInclude Include="metadb.h" />
+ <ClInclude Include="metadb_handle.h" />
+ <ClInclude Include="modeless_dialog.h" />
+ <ClInclude Include="ole_interaction.h" />
+ <ClInclude Include="packet_decoder.h" />
+ <ClInclude Include="play_callback.h" />
+ <ClInclude Include="playable_location.h" />
+ <ClInclude Include="playback_control.h" />
+ <ClInclude Include="playback_stream_capture.h" />
+ <ClInclude Include="playlist.h" />
+ <ClInclude Include="playlist_loader.h" />
+ <ClInclude Include="popup_message.h" />
+ <ClInclude Include="preferences_page.h" />
+ <ClInclude Include="progress_meter.h" />
+ <ClInclude Include="replaygain.h" />
+ <ClInclude Include="replaygain_scanner.h" />
+ <ClInclude Include="resampler.h" />
+ <ClInclude Include="search_tools.h" />
+ <ClInclude Include="service.h" />
+ <ClInclude Include="service_impl.h" />
+ <ClInclude Include="system_time_keeper.h" />
+ <ClInclude Include="tag_processor.h" />
+ <ClInclude Include="threaded_process.h" />
+ <ClInclude Include="titleformat.h" />
+ <ClInclude Include="track_property.h" />
+ <ClInclude Include="ui.h" />
+ <ClInclude Include="ui_edit_context.h" />
+ <ClInclude Include="ui_element.h" />
+ <ClInclude Include="unpack.h" />
+ <ClInclude Include="vis.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="abort_callback.cpp" />
+ <ClCompile Include="advconfig.cpp" />
+ <ClCompile Include="album_art.cpp" />
+ <ClCompile Include="app_close_blocker.cpp" />
+ <ClCompile Include="audio_chunk.cpp" />
+ <ClCompile Include="audio_chunk_channel_config.cpp" />
+ <ClCompile Include="cfg_var.cpp" />
+ <ClCompile Include="chapterizer.cpp" />
+ <ClCompile Include="commandline.cpp" />
+ <ClCompile Include="completion_notify.cpp" />
+ <ClCompile Include="config_object.cpp" />
+ <ClCompile Include="console.cpp">
+ </ClCompile>
+ <ClCompile Include="dsp.cpp">
+ </ClCompile>
+ <ClCompile Include="dsp_manager.cpp">
+ </ClCompile>
+ <ClCompile Include="file_info.cpp">
+ </ClCompile>
+ <ClCompile Include="file_info_impl.cpp">
+ </ClCompile>
+ <ClCompile Include="file_info_merge.cpp">
+ </ClCompile>
+ <ClCompile Include="file_operation_callback.cpp">
+ </ClCompile>
+ <ClCompile Include="filesystem.cpp">
+ </ClCompile>
+ <ClCompile Include="filesystem_helper.cpp">
+ </ClCompile>
+ <ClCompile Include="guids.cpp">
+ </ClCompile>
+ <ClCompile Include="hasher_md5.cpp">
+ </ClCompile>
+ <ClCompile Include="input.cpp">
+ </ClCompile>
+ <ClCompile Include="input_file_type.cpp" />
+ <ClCompile Include="link_resolver.cpp" />
+ <ClCompile Include="mainmenu.cpp" />
+ <ClCompile Include="mem_block_container.cpp" />
+ <ClCompile Include="menu_helpers.cpp">
+ </ClCompile>
+ <ClCompile Include="menu_item.cpp">
+ </ClCompile>
+ <ClCompile Include="menu_manager.cpp">
+ </ClCompile>
+ <ClCompile Include="metadb.cpp">
+ </ClCompile>
+ <ClCompile Include="metadb_handle.cpp">
+ </ClCompile>
+ <ClCompile Include="metadb_handle_list.cpp">
+ </ClCompile>
+ <ClCompile Include="packet_decoder.cpp">
+ </ClCompile>
+ <ClCompile Include="playable_location.cpp">
+ </ClCompile>
+ <ClCompile Include="playback_control.cpp">
+ </ClCompile>
+ <ClCompile Include="playlist.cpp">
+ </ClCompile>
+ <ClCompile Include="playlist_loader.cpp">
+ </ClCompile>
+ <ClCompile Include="popup_message.cpp">
+ </ClCompile>
+ <ClCompile Include="preferences_page.cpp" />
+ <ClCompile Include="replaygain.cpp">
+ </ClCompile>
+ <ClCompile Include="replaygain_info.cpp">
+ </ClCompile>
+ <ClCompile Include="service.cpp">
+ </ClCompile>
+ <ClCompile Include="stdafx.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="tag_processor.cpp">
+ </ClCompile>
+ <ClCompile Include="tag_processor_id3v2.cpp">
+ </ClCompile>
+ <ClCompile Include="threaded_process.cpp">
+ </ClCompile>
+ <ClCompile Include="titleformat.cpp">
+ </ClCompile>
+ <ClCompile Include="ui.cpp">
+ </ClCompile>
+ <ClCompile Include="ui_element.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcxproj.filters b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcxproj.filters new file mode 100644 index 0000000..8a83dd4 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK.vcxproj.filters @@ -0,0 +1,401 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{6c35c7a7-723a-401f-acdc-c63af942abae}</UniqueIdentifier>
+ <Extensions>*.h</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{3b2ccd60-8f0c-4241-830a-fda069a5d440}</UniqueIdentifier>
+ <Extensions>*.cpp</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="abort_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="advconfig.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="album_art.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="app_close_blocker.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="audio_chunk.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="audio_postprocessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="autoplaylist.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="cfg_var.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="chapterizer.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="commandline.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="completion_notify.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="component.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="componentversion.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="config_io_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="config_object.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="config_object_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="console.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="contextmenu.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="contextmenu_manager.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="core_api.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="coreversion.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="decode_postprocessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="dsp.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="dsp_manager.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="event_logger.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="exceptions.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_info.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_info_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_operation_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="filesystem.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="filesystem_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="foobar2000.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="genrand.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="hasher_md5.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="http_client.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="icon_remap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="info_lookup_handler.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="initquit.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="input.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="input_file_type.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="input_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library_manager.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="link_resolver.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="main_thread_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="mem_block_container.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="menu.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="menu_helpers.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="message_loop.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="metadb.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="metadb_handle.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="modeless_dialog.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ole_interaction.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="packet_decoder.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="play_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playable_location.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playback_control.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playback_stream_capture.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playlist.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playlist_loader.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="popup_message.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="preferences_page.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="replaygain.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="replaygain_scanner.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resampler.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="search_tools.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="service.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="service_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="system_time_keeper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="tag_processor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="threaded_process.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="titleformat.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="track_property.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ui.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ui_edit_context.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ui_element.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="unpack.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="vis.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="progress_meter.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="abort_callback.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="advconfig.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="album_art.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="app_close_blocker.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="audio_chunk.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="audio_chunk_channel_config.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="cfg_var.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="chapterizer.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="commandline.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="completion_notify.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="config_object.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="console.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dsp.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dsp_manager.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_info.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_info_impl.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_info_merge.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_operation_callback.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="filesystem.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="filesystem_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="guids.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="hasher_md5.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="input.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="input_file_type.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="link_resolver.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="mainmenu.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="mem_block_container.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="menu_helpers.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="menu_item.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="menu_manager.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="metadb.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="metadb_handle.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="metadb_handle_list.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="packet_decoder.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playable_location.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playback_control.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playlist.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playlist_loader.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="popup_message.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="preferences_page.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="replaygain.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="replaygain_info.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="service.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="stdafx.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="tag_processor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="tag_processor_id3v2.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="threaded_process.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="titleformat.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ui.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ui_element.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcproj b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcproj new file mode 100644 index 0000000..f35476c --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcproj @@ -0,0 +1,1847 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="listeningto_foo2kSDK_SDK"
+ ProjectGUID="{E8091321-D79D-4575-86EF-064EA1A4A20D}"
+ RootNamespace="foobar2000_SDK"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x501"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="foobar2000.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996;4995"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="foobar2000.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x501"
+ StringPooling="true"
+ BufferSecurityCheck="false"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="foobar2000.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996;4995"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ StringPooling="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="foobar2000.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Header Files"
+ Filter="*.h"
+ >
+ <File
+ RelativePath="abort_callback.h"
+ >
+ </File>
+ <File
+ RelativePath=".\advconfig.h"
+ >
+ </File>
+ <File
+ RelativePath=".\album_art.h"
+ >
+ </File>
+ <File
+ RelativePath="app_close_blocker.h"
+ >
+ </File>
+ <File
+ RelativePath="audio_chunk.h"
+ >
+ </File>
+ <File
+ RelativePath=".\audio_postprocessor.h"
+ >
+ </File>
+ <File
+ RelativePath=".\autoplaylist.h"
+ >
+ </File>
+ <File
+ RelativePath=".\cfg_var.h"
+ >
+ </File>
+ <File
+ RelativePath=".\chapterizer.h"
+ >
+ </File>
+ <File
+ RelativePath="commandline.h"
+ >
+ </File>
+ <File
+ RelativePath=".\completion_notify.h"
+ >
+ </File>
+ <File
+ RelativePath="component.h"
+ >
+ </File>
+ <File
+ RelativePath="componentversion.h"
+ >
+ </File>
+ <File
+ RelativePath="config_io_callback.h"
+ >
+ </File>
+ <File
+ RelativePath="config_object.h"
+ >
+ </File>
+ <File
+ RelativePath="config_object_impl.h"
+ >
+ </File>
+ <File
+ RelativePath="console.h"
+ >
+ </File>
+ <File
+ RelativePath=".\contextmenu.h"
+ >
+ </File>
+ <File
+ RelativePath=".\contextmenu_manager.h"
+ >
+ </File>
+ <File
+ RelativePath="core_api.h"
+ >
+ </File>
+ <File
+ RelativePath="coreversion.h"
+ >
+ </File>
+ <File
+ RelativePath="dsp.h"
+ >
+ </File>
+ <File
+ RelativePath="dsp_manager.h"
+ >
+ </File>
+ <File
+ RelativePath=".\event_logger.h"
+ >
+ </File>
+ <File
+ RelativePath=".\exceptions.h"
+ >
+ </File>
+ <File
+ RelativePath="file_info.h"
+ >
+ </File>
+ <File
+ RelativePath="file_info_impl.h"
+ >
+ </File>
+ <File
+ RelativePath="file_operation_callback.h"
+ >
+ </File>
+ <File
+ RelativePath="filesystem.h"
+ >
+ </File>
+ <File
+ RelativePath=".\filesystem_helper.h"
+ >
+ </File>
+ <File
+ RelativePath="foobar2000.h"
+ >
+ </File>
+ <File
+ RelativePath="genrand.h"
+ >
+ </File>
+ <File
+ RelativePath="hasher_md5.h"
+ >
+ </File>
+ <File
+ RelativePath=".\http_client.h"
+ >
+ </File>
+ <File
+ RelativePath=".\icon_remap.h"
+ >
+ </File>
+ <File
+ RelativePath=".\info_lookup_handler.h"
+ >
+ </File>
+ <File
+ RelativePath="initquit.h"
+ >
+ </File>
+ <File
+ RelativePath="input.h"
+ >
+ </File>
+ <File
+ RelativePath=".\input_file_type.h"
+ >
+ </File>
+ <File
+ RelativePath=".\input_impl.h"
+ >
+ </File>
+ <File
+ RelativePath="library_manager.h"
+ >
+ </File>
+ <File
+ RelativePath=".\link_resolver.h"
+ >
+ </File>
+ <File
+ RelativePath=".\main_thread_callback.h"
+ >
+ </File>
+ <File
+ RelativePath=".\mem_block_container.h"
+ >
+ </File>
+ <File
+ RelativePath=".\menu.h"
+ >
+ </File>
+ <File
+ RelativePath="menu_helpers.h"
+ >
+ </File>
+ <File
+ RelativePath=".\message_loop.h"
+ >
+ </File>
+ <File
+ RelativePath="metadb.h"
+ >
+ </File>
+ <File
+ RelativePath="metadb_handle.h"
+ >
+ </File>
+ <File
+ RelativePath="modeless_dialog.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ole_interaction.h"
+ >
+ </File>
+ <File
+ RelativePath="packet_decoder.h"
+ >
+ </File>
+ <File
+ RelativePath="play_callback.h"
+ >
+ </File>
+ <File
+ RelativePath="playable_location.h"
+ >
+ </File>
+ <File
+ RelativePath=".\playback_control.h"
+ >
+ </File>
+ <File
+ RelativePath=".\playback_stream_capture.h"
+ >
+ </File>
+ <File
+ RelativePath="playlist.h"
+ >
+ </File>
+ <File
+ RelativePath="playlist_loader.h"
+ >
+ </File>
+ <File
+ RelativePath="popup_message.h"
+ >
+ </File>
+ <File
+ RelativePath="preferences_page.h"
+ >
+ </File>
+ <File
+ RelativePath="replaygain.h"
+ >
+ </File>
+ <File
+ RelativePath=".\replaygain_scanner.h"
+ >
+ </File>
+ <File
+ RelativePath="resampler.h"
+ >
+ </File>
+ <File
+ RelativePath=".\search_tools.h"
+ >
+ </File>
+ <File
+ RelativePath="service.h"
+ >
+ </File>
+ <File
+ RelativePath="service_impl.h"
+ >
+ </File>
+ <File
+ RelativePath=".\system_time_keeper.h"
+ >
+ </File>
+ <File
+ RelativePath="tag_processor.h"
+ >
+ </File>
+ <File
+ RelativePath="threaded_process.h"
+ >
+ </File>
+ <File
+ RelativePath="titleformat.h"
+ >
+ </File>
+ <File
+ RelativePath=".\track_property.h"
+ >
+ </File>
+ <File
+ RelativePath="ui.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ui_edit_context.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ui_element.h"
+ >
+ </File>
+ <File
+ RelativePath="unpack.h"
+ >
+ </File>
+ <File
+ RelativePath="vis.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Source Files"
+ Filter="*.cpp"
+ >
+ <File
+ RelativePath="abort_callback.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\advconfig.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\album_art.cpp"
+ >
+ </File>
+ <File
+ RelativePath="app_close_blocker.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="audio_chunk.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="audio_chunk_channel_config.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\cfg_var.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\chapterizer.cpp"
+ >
+ </File>
+ <File
+ RelativePath="commandline.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\completion_notify.cpp"
+ >
+ </File>
+ <File
+ RelativePath="config_object.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="console.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="dsp.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="dsp_manager.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="file_info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="file_info_impl.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="file_info_merge.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="file_operation_callback.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="filesystem.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\filesystem_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="guids.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="hasher_md5.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="input.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\input_file_type.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\link_resolver.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\mainmenu.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\mem_block_container.cpp"
+ >
+ </File>
+ <File
+ RelativePath="menu_helpers.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="menu_item.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="menu_manager.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="metadb.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="metadb_handle.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="metadb_handle_list.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="packet_decoder.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="playable_location.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\playback_control.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="playlist.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="playlist_loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="popup_message.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\preferences_page.cpp"
+ >
+ </File>
+ <File
+ RelativePath="replaygain.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="replaygain_info.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="service.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="tag_processor.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="tag_processor_id3v2.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="threaded_process.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="titleformat.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="ui.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\ui_element.cpp"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj new file mode 100644 index 0000000..c8a9078 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj @@ -0,0 +1,540 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>listeningto_foo2kSDK_SDK</ProjectName>
+ <ProjectGuid>{E8091321-D79D-4575-86EF-064EA1A4A20D}</ProjectGuid>
+ <RootNamespace>foobar2000_SDK</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/listeningto/$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>foobar2000.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>foobar2000.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>foobar2000.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>foobar2000.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="abort_callback.h" />
+ <ClInclude Include="advconfig.h" />
+ <ClInclude Include="album_art.h" />
+ <ClInclude Include="app_close_blocker.h" />
+ <ClInclude Include="audio_chunk.h" />
+ <ClInclude Include="audio_postprocessor.h" />
+ <ClInclude Include="autoplaylist.h" />
+ <ClInclude Include="cfg_var.h" />
+ <ClInclude Include="chapterizer.h" />
+ <ClInclude Include="commandline.h" />
+ <ClInclude Include="completion_notify.h" />
+ <ClInclude Include="component.h" />
+ <ClInclude Include="componentversion.h" />
+ <ClInclude Include="config_io_callback.h" />
+ <ClInclude Include="config_object.h" />
+ <ClInclude Include="config_object_impl.h" />
+ <ClInclude Include="console.h" />
+ <ClInclude Include="contextmenu.h" />
+ <ClInclude Include="contextmenu_manager.h" />
+ <ClInclude Include="core_api.h" />
+ <ClInclude Include="coreversion.h" />
+ <ClInclude Include="dsp.h" />
+ <ClInclude Include="dsp_manager.h" />
+ <ClInclude Include="event_logger.h" />
+ <ClInclude Include="exceptions.h" />
+ <ClInclude Include="file_info.h" />
+ <ClInclude Include="file_info_impl.h" />
+ <ClInclude Include="file_operation_callback.h" />
+ <ClInclude Include="filesystem.h" />
+ <ClInclude Include="filesystem_helper.h" />
+ <ClInclude Include="foobar2000.h" />
+ <ClInclude Include="genrand.h" />
+ <ClInclude Include="hasher_md5.h" />
+ <ClInclude Include="http_client.h" />
+ <ClInclude Include="icon_remap.h" />
+ <ClInclude Include="info_lookup_handler.h" />
+ <ClInclude Include="initquit.h" />
+ <ClInclude Include="input.h" />
+ <ClInclude Include="input_file_type.h" />
+ <ClInclude Include="input_impl.h" />
+ <ClInclude Include="library_manager.h" />
+ <ClInclude Include="link_resolver.h" />
+ <ClInclude Include="main_thread_callback.h" />
+ <ClInclude Include="mem_block_container.h" />
+ <ClInclude Include="menu.h" />
+ <ClInclude Include="menu_helpers.h" />
+ <ClInclude Include="message_loop.h" />
+ <ClInclude Include="metadb.h" />
+ <ClInclude Include="metadb_handle.h" />
+ <ClInclude Include="modeless_dialog.h" />
+ <ClInclude Include="ole_interaction.h" />
+ <ClInclude Include="packet_decoder.h" />
+ <ClInclude Include="play_callback.h" />
+ <ClInclude Include="playable_location.h" />
+ <ClInclude Include="playback_control.h" />
+ <ClInclude Include="playback_stream_capture.h" />
+ <ClInclude Include="playlist.h" />
+ <ClInclude Include="playlist_loader.h" />
+ <ClInclude Include="popup_message.h" />
+ <ClInclude Include="preferences_page.h" />
+ <ClInclude Include="replaygain.h" />
+ <ClInclude Include="replaygain_scanner.h" />
+ <ClInclude Include="resampler.h" />
+ <ClInclude Include="search_tools.h" />
+ <ClInclude Include="service.h" />
+ <ClInclude Include="service_impl.h" />
+ <ClInclude Include="system_time_keeper.h" />
+ <ClInclude Include="tag_processor.h" />
+ <ClInclude Include="threaded_process.h" />
+ <ClInclude Include="titleformat.h" />
+ <ClInclude Include="track_property.h" />
+ <ClInclude Include="ui.h" />
+ <ClInclude Include="ui_edit_context.h" />
+ <ClInclude Include="ui_element.h" />
+ <ClInclude Include="unpack.h" />
+ <ClInclude Include="vis.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="abort_callback.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="advconfig.cpp" />
+ <ClCompile Include="album_art.cpp" />
+ <ClCompile Include="app_close_blocker.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="audio_chunk.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="audio_chunk_channel_config.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="cfg_var.cpp" />
+ <ClCompile Include="chapterizer.cpp" />
+ <ClCompile Include="commandline.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="completion_notify.cpp" />
+ <ClCompile Include="config_object.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="console.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="dsp.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="dsp_manager.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="file_info.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="file_info_impl.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="file_info_merge.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="file_operation_callback.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="filesystem.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="filesystem_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="guids.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="hasher_md5.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="input.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="input_file_type.cpp" />
+ <ClCompile Include="link_resolver.cpp" />
+ <ClCompile Include="mainmenu.cpp" />
+ <ClCompile Include="mem_block_container.cpp" />
+ <ClCompile Include="menu_helpers.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="menu_item.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="menu_manager.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="metadb.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="metadb_handle.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="metadb_handle_list.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="packet_decoder.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="playable_location.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="playback_control.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="playlist.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="playlist_loader.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="popup_message.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="preferences_page.cpp" />
+ <ClCompile Include="replaygain.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="replaygain_info.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="service.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="stdafx.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">Create</PrecompiledHeader>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="tag_processor.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="tag_processor_id3v2.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="threaded_process.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="titleformat.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="ui.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="ui_element.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj.filters b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj.filters new file mode 100644 index 0000000..d46e438 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj.filters @@ -0,0 +1,395 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{41c22af1-70d3-4960-ac82-4819f05228d6}</UniqueIdentifier>
+ <Extensions>*.h</Extensions>
+ </Filter>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{02fdccef-2dea-428d-92b4-7967793fc7b7}</UniqueIdentifier>
+ <Extensions>*.cpp</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="abort_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="advconfig.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="album_art.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="app_close_blocker.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="audio_chunk.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="audio_postprocessor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="autoplaylist.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="cfg_var.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="chapterizer.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="commandline.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="completion_notify.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="component.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="componentversion.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="config_io_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="config_object.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="config_object_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="console.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="contextmenu.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="contextmenu_manager.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="core_api.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="coreversion.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="dsp.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="dsp_manager.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="event_logger.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="exceptions.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_info.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_info_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_operation_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="filesystem.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="filesystem_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="foobar2000.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="genrand.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="hasher_md5.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="http_client.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="icon_remap.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="info_lookup_handler.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="initquit.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="input.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="input_file_type.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="input_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="library_manager.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="link_resolver.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="main_thread_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="mem_block_container.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="menu.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="menu_helpers.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="message_loop.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="metadb.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="metadb_handle.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="modeless_dialog.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ole_interaction.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="packet_decoder.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="play_callback.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playable_location.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playback_control.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playback_stream_capture.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playlist.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playlist_loader.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="popup_message.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="preferences_page.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="replaygain.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="replaygain_scanner.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resampler.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="search_tools.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="service.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="service_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="system_time_keeper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="tag_processor.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="threaded_process.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="titleformat.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="track_property.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ui.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ui_edit_context.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ui_element.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="unpack.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="vis.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="abort_callback.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="advconfig.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="album_art.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="app_close_blocker.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="audio_chunk.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="audio_chunk_channel_config.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="cfg_var.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="chapterizer.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="commandline.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="completion_notify.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="config_object.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="console.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dsp.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dsp_manager.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_info.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_info_impl.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_info_merge.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_operation_callback.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="filesystem.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="filesystem_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="guids.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="hasher_md5.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="input.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="input_file_type.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="link_resolver.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="mainmenu.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="mem_block_container.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="menu_helpers.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="menu_item.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="menu_manager.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="metadb.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="metadb_handle.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="metadb_handle_list.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="packet_decoder.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playable_location.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playback_control.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playlist.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="playlist_loader.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="popup_message.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="preferences_page.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="replaygain.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="replaygain_info.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="service.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="stdafx.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="tag_processor.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="tag_processor_id3v2.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="threaded_process.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="titleformat.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ui.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="ui_element.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj.user b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/foobar2000_SDK_9.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/genrand.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/genrand.h index 288db1b..04b35c1 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/genrand.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/genrand.h @@ -1,6 +1,3 @@ -#ifndef _SDK_GENRAND_H_
-#define _SDK_GENRAND_H_
-
//! PRNG service. Implemented by the core, do not reimplement. Use g_create() helper function to instantiate.
class NOVTABLE genrand_service : public service_base
{
@@ -12,8 +9,11 @@ public: static service_ptr_t<genrand_service> g_create() {return standard_api_create_t<genrand_service>();}
+ void generate_random_order(t_size * out, t_size count) {
+ t_size n;
+ for(n=0;n<count;n++) out[n]=n;
+ for(n=0;n<count;n++) pfc::swap_t(out[n],out[genrand(count)]);
+ }
+
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(genrand_service);
};
-
-
-#endif //_SDK_GENRAND_H_
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/guids.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/guids.cpp index 063d1a5..8e19dcb 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/guids.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/guids.cpp @@ -52,9 +52,7 @@ FOOGUIDDECL const GUID dsp::class_guid = FOOGUIDDECL const GUID initquit::class_guid =
{ 0x113773c4, 0xb387, 0x4b48, { 0x8b, 0xdf, 0xab, 0x58, 0xbc, 0x6c, 0xe5, 0x38 } };
-// {4560C877-C41A-4c71-BB75-A7A5BAFC18D8}
-FOOGUIDDECL const GUID metadb_display_hook::class_guid =
-{ 0x4560c877, 0xc41a, 0x4c71, { 0xbb, 0x75, 0xa7, 0xa5, 0xba, 0xfc, 0x18, 0xd8 } };
+FOOGUIDDECL const GUID metadb_display_field_provider::class_guid = { 0x5923fa2a, 0x504b, 0x4022, { 0xb2, 0x86, 0x0, 0x22, 0x75, 0x38, 0x45, 0x5e } };
// {609D48C8-C6A6-4784-8BBD-FDD32BF0740E}
FOOGUIDDECL const GUID metadb::class_guid =
@@ -96,6 +94,10 @@ FOOGUIDDECL const GUID contextmenu_manager::class_guid = FOOGUIDDECL const GUID input_file_type::class_guid =
{ 0x640e006e, 0x2934, 0x4d6c, { 0x83, 0x27, 0x4f, 0xa9, 0xf3, 0x41, 0xec, 0xf2 } };
+// {8835B30A-36A6-49bc-B96D-D0609B0EF2BA}
+FOOGUIDDECL const GUID input_file_type_v2::class_guid =
+{ 0x8835b30a, 0x36a6, 0x49bc, { 0xb9, 0x6d, 0xd0, 0x60, 0x9b, 0xe, 0xf2, 0xba } };
+
// {2DC57FF7-476D-42f5-A05A-60499896134A}
FOOGUIDDECL const GUID ui_control::class_guid =
{ 0x2dc57ff7, 0x476d, 0x42f5, { 0xa0, 0x5a, 0x60, 0x49, 0x98, 0x96, 0x13, 0x4a } };
@@ -140,10 +142,6 @@ FOOGUIDDECL const GUID playlist_callback_single_static::class_guid = FOOGUIDDECL const GUID playlist_lock::class_guid =
{ 0x88d7edb1, 0xa850, 0x42a4, { 0xbb, 0xab, 0x49, 0xe9, 0x55, 0xf4, 0xb8, 0x1f } };
-// {D2E5F92B-3424-4822-AE60-8663E6D26EAB}
-FOOGUIDDECL const GUID playlist_loader::class_guid =
-{ 0xd2e5f92b, 0x3424, 0x4822, { 0xae, 0x60, 0x86, 0x63, 0xe6, 0xd2, 0x6e, 0xab } };
-
// {2FBCE1E5-902E-49e0-B9CF-CE0FBA765348}
FOOGUIDDECL const GUID filesystem::class_guid =
{ 0x2fbce1e5, 0x902e, 0x49e0, { 0xb9, 0xcf, 0xce, 0xf, 0xba, 0x76, 0x53, 0x48 } };
@@ -185,9 +183,20 @@ FOOGUIDDECL const GUID contextmenu_item::caller_now_playing = { 0x994c0d0e, 0x319e, 0x45f3, { 0x92, 0xfc, 0x51, 0x86, 0x16, 0xe7, 0x3a, 0xdc } };
// {47502BA1-816D-4a3e-ADE5-A7A9860A67DB}
-FOOGUIDDECL const GUID contextmenu_item::caller_playlist =
+FOOGUIDDECL const GUID contextmenu_item::caller_active_playlist_selection =
{ 0x47502ba1, 0x816d, 0x4a3e, { 0xad, 0xe5, 0xa7, 0xa9, 0x86, 0xa, 0x67, 0xdb } };
+// Deprecated.
+FOOGUIDDECL const GUID contextmenu_item::caller_playlist = caller_active_playlist_selection;
+
+// {B3CC1030-EF26-45cf-A84A-7FC169BC9FFB}
+FOOGUIDDECL const GUID contextmenu_item::caller_active_playlist =
+{ 0xb3cc1030, 0xef26, 0x45cf, { 0xa8, 0x4a, 0x7f, 0xc1, 0x69, 0xbc, 0x9f, 0xfb } };
+
+// {5FDCD5E8-6EB2-4454-9EDA-527522893BED}
+FOOGUIDDECL const GUID contextmenu_item::caller_playlist_manager =
+{ 0x5fdcd5e8, 0x6eb2, 0x4454, { 0x9e, 0xda, 0x52, 0x75, 0x22, 0x89, 0x3b, 0xed } };
+
// {00000000-0000-0000-0000-000000000000}
FOOGUIDDECL const GUID contextmenu_item::caller_undefined =
{ 0x00000000, 0x0000, 0x0000, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 } };
@@ -196,10 +205,18 @@ FOOGUIDDECL const GUID contextmenu_item::caller_undefined = FOOGUIDDECL const GUID contextmenu_item::caller_keyboard_shortcut_list =
{ 0xfabee3e9, 0x8901, 0x4df4, { 0xa2, 0xd7, 0xb9, 0x89, 0x8d, 0x86, 0xc3, 0x9b } };
+// {FDA07C56-05D0-4b84-9FBD-A8BE556D474D}
+FOOGUIDDECL const GUID contextmenu_item::caller_media_library_viewer =
+{ 0xfda07c56, 0x5d0, 0x4b84, { 0x9f, 0xbd, 0xa8, 0xbe, 0x55, 0x6d, 0x47, 0x4d } };
+
// {95DE5842-30F5-4f72-B40C-191663782F80}
FOOGUIDDECL const GUID keyboard_shortcut_manager::class_guid =
{ 0x95de5842, 0x30f5, 0x4f72, { 0xb4, 0xc, 0x19, 0x16, 0x63, 0x78, 0x2f, 0x80 } };
+// {CD19C870-DA6A-4b8a-A118-732A8102D07D}
+FOOGUIDDECL const GUID keyboard_shortcut_manager_v2::class_guid =
+{ 0xcd19c870, 0xda6a, 0x4b8a, { 0xa1, 0x18, 0x73, 0x2a, 0x81, 0x2, 0xd0, 0x7d } };
+
// {30F95BEB-FDF4-4a75-B597-60CAF93B39C4}
FOOGUIDDECL const GUID packet_decoder::owner_MP4 =
{ 0x30f95beb, 0xfdf4, 0x4a75, { 0xb5, 0x97, 0x60, 0xca, 0xf9, 0x3b, 0x39, 0xc4 } };
@@ -296,10 +313,6 @@ FOOGUIDDECL const GUID standard_commands::guid_context_rewrite_info = FOOGUIDDECL const GUID standard_commands::guid_context_remove_tags =
{ 0x860179b7, 0x962f, 0x4340, { 0xac, 0xad, 0xd, 0xda, 0xf0, 0x60, 0xa6, 0xb8 } };
-// {4DD1E1AD-F481-480c-BC3E-DD9C878EAFC3}
-FOOGUIDDECL const GUID standard_commands::guid_context_remove_from_database =
-{ 0x4dd1e1ad, 0xf481, 0x480c, { 0xbc, 0x3e, 0xdd, 0x9c, 0x87, 0x8e, 0xaf, 0xc3 } };
-
// {A7E7ECB7-1943-4907-83B3-60E92353C7FA}
FOOGUIDDECL const GUID standard_commands::guid_context_convert_run =
{ 0xa7e7ecb7, 0x1943, 0x4907, { 0x83, 0xb3, 0x60, 0xe9, 0x23, 0x53, 0xc7, 0xfa } };
@@ -608,34 +621,6 @@ FOOGUIDDECL const GUID app_close_blocker::class_guid= FOOGUIDDECL const GUID file_operation_callback::class_guid=
{ 0x5570a2d2, 0x8f9e, 0x48a7, { 0xaf, 0xac, 0xda, 0xc0, 0xa, 0x3c, 0x16, 0x36 } };
-// {942F5EFE-D68B-4bde-BA17-C442A8B2A445}
-FOOGUIDDECL const GUID titleformat_config::class_guid=
-{ 0x942f5efe, 0xd68b, 0x4bde, { 0xba, 0x17, 0xc4, 0x42, 0xa8, 0xb2, 0xa4, 0x45 } };
-
-// {9F33EDF0-B8F0-4d11-B27B-4FC1D3B3489F}
-FOOGUIDDECL const GUID titleformat_config_callback::class_guid=
-{ 0x9f33edf0, 0xb8f0, 0x4d11, { 0xb2, 0x7b, 0x4f, 0xc1, 0xd3, 0xb3, 0x48, 0x9f } };
-
-// {B905715B-4B26-4e0e-B3B8-FF4A232A4258}
-FOOGUIDDECL const GUID titleformat_config::config_playlist=
-{ 0xb905715b, 0x4b26, 0x4e0e, { 0xb3, 0xb8, 0xff, 0x4a, 0x23, 0x2a, 0x42, 0x58 } };
-
-// {A2051E09-A1EA-471b-B146-7375413105D2}
-FOOGUIDDECL const GUID titleformat_config::config_copy=
-{ 0xa2051e09, 0xa1ea, 0x471b, { 0xb1, 0x46, 0x73, 0x75, 0x41, 0x31, 0x5, 0xd2 } };
-
-// {70B56942-3C37-427b-8D58-3A2DF3D835BD}
-FOOGUIDDECL const GUID titleformat_config::config_statusbar=
-{ 0x70b56942, 0x3c37, 0x427b, { 0x8d, 0x58, 0x3a, 0x2d, 0xf3, 0xd8, 0x35, 0xbd } };
-
-// {8E728600-7BBD-4a5c-A001-40A450427EB6}
-FOOGUIDDECL const GUID titleformat_config::config_systray=
-{ 0x8e728600, 0x7bbd, 0x4a5c, { 0xa0, 0x1, 0x40, 0xa4, 0x50, 0x42, 0x7e, 0xb6 } };
-
-// {D02F2D01-BED3-46e8-B664-8B1F07E78F69}
-FOOGUIDDECL const GUID titleformat_config::config_windowtitle=
-{ 0xd02f2d01, 0xbed3, 0x46e8, { 0xb6, 0x64, 0x8b, 0x1f, 0x7, 0xe7, 0x8f, 0x69 } };
-
// {340099D1-7BEC-4ac6-92A4-77FF01507891}
FOOGUIDDECL const GUID config_object::class_guid=
{ 0x340099d1, 0x7bec, 0x4ac6, { 0x92, 0xa4, 0x77, 0xff, 0x1, 0x50, 0x78, 0x91 } };
@@ -713,6 +698,8 @@ FOOGUIDDECL const GUID threaded_process_callback::class_guid= FOOGUIDDECL const GUID metadb_io::class_guid=
{ 0x64d18b80, 0x5e97, 0x40e4, { 0xa3, 0xc, 0xa4, 0x64, 0xc, 0x60, 0xbc, 0xe5 } };
+FOOGUIDDECL const GUID preferences_page::guid_tagging = { 0x563107c3, 0xfc7d, 0x4022, { 0xa8, 0x72, 0xa8, 0x2a, 0x2b, 0x3f, 0xd5, 0x25 } };
+
// {B9218D23-F73D-4b61-A1D9-BFD420CDAC77}
FOOGUIDDECL const GUID preferences_page::guid_root=
{ 0xb9218d23, 0xf73d, 0x4b61, { 0xa1, 0xd9, 0xbf, 0xd4, 0x20, 0xcd, 0xac, 0x77 } };
@@ -761,9 +748,9 @@ FOOGUIDDECL const GUID library_viewer::class_guid= FOOGUIDDECL const GUID message_loop::class_guid=
{ 0x5cd49b5d, 0xd604, 0x4c07, { 0xa8, 0xfa, 0xff, 0xd8, 0x51, 0x2a, 0xfd, 0x2b } };
-// {932EC96D-4DFD-4ed7-A07C-2A22BE770185}
+// {3F489088-6179-434e-A9DB-3A14A1B081AC}
FOOGUIDDECL const GUID chapterizer::class_guid=
-{ 0x932ec96d, 0x4dfd, 0x4ed7, { 0xa0, 0x7c, 0x2a, 0x22, 0xbe, 0x77, 0x1, 0x85 } };
+{ 0x3f489088, 0x6179, 0x434e, { 0xa9, 0xdb, 0x3a, 0x14, 0xa1, 0xb0, 0x81, 0xac } };
// {7EB442CD-FAD7-4a26-AD7E-16F6FC89207B}
FOOGUIDDECL const GUID input_decoder::class_guid =
@@ -1037,6 +1024,163 @@ FOOGUIDDECL const GUID packet_decoder::property_ogg_packet = { 0xade740be, 0x8e2 FOOGUIDDECL const GUID track_property_provider::class_guid = { 0xefcdd365, 0x81fc, 0x4c82, { 0x96, 0x1c, 0xa2, 0xb5, 0x76, 0x1a, 0xf8, 0xb7 } };
-FOOGUIDDECL const GUID library_manager_v3::class_guid = { 0x65e34e4d, 0xa9ab, 0x4c02, { 0x9e, 0x8a, 0xe5, 0xf3, 0xb9, 0x55, 0x8c, 0xbe } };
+FOOGUIDDECL const GUID track_property_provider_v2::class_guid = { 0x78e86595, 0xcffd, 0x4d10, { 0x85, 0x66, 0xbc, 0xf6, 0x6c, 0x89, 0x11, 0x16 } };
+
+
+FOOGUIDDECL const GUID library_manager_v3::class_guid = { 0x33dc0f1f, 0x16f0, 0x4e27, { 0xa7, 0x3, 0x63, 0x57, 0x72, 0x35, 0xb0, 0x1c } };
+
+FOOGUIDDECL const GUID metadb_io_v3::class_guid = { 0x10e80560, 0xb1ef, 0x4e5e, { 0xb4, 0xc, 0x5d, 0xfc, 0x2e, 0x9a, 0xf1, 0x11 } };
+
+FOOGUIDDECL const GUID search_filter::class_guid = { 0x4134bb34, 0xed5, 0x49f3, { 0x9c, 0xef, 0x43, 0xe3, 0xa4, 0xa3, 0xa8, 0xae } };
+
+FOOGUIDDECL const GUID search_filter_manager::class_guid = { 0xad0baa03, 0xebd4, 0x4a72, { 0xa0, 0xa7, 0x98, 0x3, 0xa9, 0xe1, 0xe4, 0xf4 } };
+
+FOOGUIDDECL const GUID playlist_manager_v2::class_guid = { 0x7fe9052a, 0x8ec2, 0x4054, { 0xa8, 0xcf, 0x77, 0xef, 0xb5, 0x2f, 0xe4, 0x8 } };
+
+FOOGUIDDECL const GUID playlist_manager_v3::class_guid = { 0x3b6575c8, 0x21a, 0x4474, { 0xbb, 0x60, 0x6c, 0xfc, 0xfe, 0x33, 0xc3, 0x4f } };
+
+FOOGUIDDECL const GUID titleformat_common_methods::class_guid = { 0x432fe059, 0xf087, 0x4785, { 0xa5, 0x18, 0xcb, 0xc1, 0x8b, 0x84, 0x9a, 0xc1 } };
+
+FOOGUIDDECL const GUID core_version_info_v2::class_guid = { 0x273704d7, 0x99ba, 0x4b58, { 0xa0, 0x60, 0x82, 0xab, 0x1, 0xb4, 0x92, 0x25 } };
+
+FOOGUIDDECL const GUID visualisation_stream_v2::class_guid = { 0xeb5b35b5, 0x267b, 0x443c, { 0xbe, 0x37, 0xc, 0x25, 0x73, 0x81, 0xa8, 0x6a } };
+
+FOOGUIDDECL const GUID visualisation_stream_v3::class_guid = { 0xe1fd8e8b, 0x68f1, 0x4cea, { 0xa0, 0xe6, 0x61, 0x91, 0x1d, 0x14, 0x65, 0x42 } };
+
+FOOGUIDDECL const GUID album_art_data::class_guid = { 0x9ddce05c, 0xaa3f, 0x4565, { 0xb3, 0x3a, 0xbd, 0x6a, 0xdc, 0xdd, 0x90, 0x37 } };
+FOOGUIDDECL const GUID album_art_manager::class_guid = { 0xab90fd55, 0xb6f, 0x47b2, { 0x8c, 0xd7, 0x61, 0x1d, 0x58, 0x6c, 0x4c, 0x45 } };
+FOOGUIDDECL const GUID album_art_manager_instance::class_guid = { 0x3c7b403b, 0xff99, 0x4d86, { 0x84, 0x4a, 0xd3, 0xea, 0xbb, 0xd6, 0x1f, 0x66 } };
+FOOGUIDDECL const GUID album_art_extractor::class_guid = { 0xe19ca3d3, 0x6267, 0x4271, { 0xb7, 0x89, 0x6a, 0x3f, 0x87, 0xfb, 0x3e, 0xbf } };
+FOOGUIDDECL const GUID album_art_extractor_instance::class_guid = { 0xf673700e, 0x3b6e, 0x4f70, { 0xa1, 0x6, 0xab, 0x74, 0x5c, 0x20, 0x20, 0x60 } };
+FOOGUIDDECL const GUID album_art_editor::class_guid = { 0x36b34487, 0xd7b9, 0x4533, { 0xa7, 0x3f, 0x39, 0x6e, 0x2d, 0x9f, 0x41, 0x5e } };
+FOOGUIDDECL const GUID album_art_editor_instance::class_guid = { 0x642a2ae1, 0x2259, 0x48f5, { 0xab, 0xdc, 0x63, 0xed, 0x4e, 0xb5, 0x90, 0x76 } };
+
+
+FOOGUIDDECL const GUID icon_remapping::class_guid = { 0x7c6aea96, 0x4a19, 0x471b, { 0x92, 0x5a, 0xa7, 0xc8, 0xb2, 0x8a, 0x59, 0xe7 } };
+
+FOOGUIDDECL const GUID file_operation_callback_dynamic_manager::class_guid = { 0x1cb3a4dc, 0x7d79, 0x45cf, { 0x82, 0x2e, 0xf8, 0x67, 0x7b, 0x8d, 0xde, 0x37 } };
+
+FOOGUIDDECL const GUID ui_selection_holder::class_guid = { 0x2ec9b7a, 0x93a5, 0x434d, { 0x85, 0x46, 0xed, 0x1d, 0xbb, 0x24, 0x35, 0xd0 } };
+FOOGUIDDECL const GUID ui_selection_manager::class_guid = { 0xd8ee46c7, 0x27ad, 0x4881, { 0xb1, 0x33, 0x14, 0x96, 0xc0, 0xe7, 0xee, 0x67 } };
+FOOGUIDDECL const GUID ui_selection_manager_v2::class_guid = { 0x2740b6c1, 0x449d, 0x40cc, { 0x8a, 0x79, 0x38, 0xc, 0x77, 0xe8, 0xdf, 0xc2 } };
+
+
+FOOGUIDDECL const GUID ole_interaction::class_guid = { 0xfbee40c9, 0xef36, 0x410b, { 0x9d, 0x52, 0x7e, 0x56, 0x39, 0x59, 0xf3, 0xd1 } };
+
+FOOGUIDDECL const GUID tag_processor_album_art_utils::class_guid = { 0x58768713, 0xc13c, 0x4406, { 0x97, 0x98, 0x21, 0x47, 0xcb, 0x97, 0x33, 0x2a } };
+
+FOOGUIDDECL const GUID playlist_incoming_item_filter_v3::class_guid = { 0xd3332054, 0xbccd, 0x45cb, { 0xbc, 0x2, 0x0, 0xa1, 0x3a, 0x80, 0x25, 0x9f } };
+
+FOOGUIDDECL const GUID menu_item_resolver::class_guid = { 0xac70ecdc, 0xe1d, 0x4db2, { 0x9c, 0xd0, 0xc9, 0xb8, 0xa9, 0xcd, 0x28, 0xfa } };
+
+FOOGUIDDECL const GUID app_close_blocking_task_manager::class_guid = { 0x213f1454, 0x8a62, 0x44b6, { 0xb0, 0xcb, 0xc1, 0xe1, 0x5d, 0xa7, 0x3b, 0xc8 } };
+
+FOOGUIDDECL const GUID message_loop_v2::class_guid = { 0x5d438080, 0xb269, 0x406d, { 0x94, 0xaf, 0xef, 0xd9, 0x29, 0x9f, 0x32, 0x5c } };
+
+
+FOOGUIDDECL const GUID autoplaylist_client::class_guid = { 0x7c90bda0, 0xf93d, 0x4a73, { 0x98, 0x51, 0xa0, 0x33, 0x6, 0x7, 0xcb, 0x28 } };
+
+FOOGUIDDECL const GUID autoplaylist_client_factory::class_guid = { 0x764200cb, 0xe283, 0x4efd, { 0x88, 0xa5, 0x80, 0x38, 0xdd, 0xee, 0x77, 0xdb } };
+
+FOOGUIDDECL const GUID autoplaylist_manager::class_guid = { 0x1571d0d, 0xc1e1, 0x44bf, { 0xb5, 0x29, 0x7a, 0xe, 0x4e, 0x89, 0x15, 0xbc } };
+
+
+FOOGUIDDECL const GUID replaygain_result::class_guid = { 0xe7f43102, 0xbc6e, 0x400b, { 0xbb, 0x81, 0x2d, 0x9b, 0xe4, 0x30, 0x3e, 0xcc } };
+FOOGUIDDECL const GUID replaygain_scanner::class_guid = { 0x2a40fcf9, 0xf1f7, 0x41da, { 0xad, 0x76, 0x29, 0xf7, 0x51, 0xed, 0xd3, 0x8a } };
+FOOGUIDDECL const GUID replaygain_scanner_entry::class_guid = { 0x278380f3, 0x6fc0, 0x4176, { 0x8a, 0x98, 0x1f, 0x66, 0x3a, 0x94, 0x79, 0xc5 } };
+
+
+FOOGUIDDECL const GUID search_filter_manager_v2::class_guid = { 0xac62a380, 0x7771, 0x4dc9, { 0x8a, 0x26, 0x41, 0x41, 0x39, 0xb4, 0x3e, 0xe2 } };
+FOOGUIDDECL const GUID search_filter_v2::class_guid = { 0xb7ca3c8, 0xaf23, 0x4a52, { 0x82, 0x66, 0xfe, 0x5, 0x4c, 0x49, 0xeb, 0x23 } };
+
+
+FOOGUIDDECL const GUID autoplaylist_client_v2::class_guid = { 0xfaa716f7, 0xebb1, 0x473c, { 0xbc, 0xf1, 0xb0, 0x1b, 0x8c, 0x9f, 0x1b, 0x95 } };
+
+FOOGUIDDECL const GUID library_search_ui::class_guid = { 0xe5eb14fa, 0xbb08, 0x4564, { 0xaf, 0xfa, 0x6f, 0x27, 0x3f, 0x37, 0xbd, 0x3d } };
+
+FOOGUIDDECL const GUID search_filter_v3::class_guid = { 0xdd6bc035, 0x7e33, 0x425a, { 0x89, 0x32, 0x6, 0xb5, 0xea, 0xb0, 0x39, 0xbc } };
+
+FOOGUIDDECL const GUID input_decoder_v2::class_guid = { 0x2c5489eb, 0xd3c1, 0x4ad4, { 0xbe, 0xa3, 0xcf, 0x40, 0x8e, 0x16, 0x1b, 0x9b } };
+
+FOOGUIDDECL const GUID event_logger::class_guid = { 0x5d336782, 0x69d6, 0x4225, { 0x9e, 0xa8, 0xcc, 0x29, 0x35, 0x7, 0xf9, 0xfe } };
+
+FOOGUIDDECL const GUID playlist_manager_v4::class_guid = { 0xcea7b49e, 0xacf2, 0x4ea2, { 0x99, 0x86, 0x95, 0xa, 0x56, 0xa2, 0xc0, 0xef } };
+
+FOOGUIDDECL const GUID ole_interaction_v2::class_guid = { 0x55738cab, 0x311d, 0x4dbe, { 0xa0, 0xbc, 0x51, 0xc1, 0xba, 0x27, 0xfe, 0x95 } };
+
+FOOGUIDDECL const GUID autoplaylist_manager_v2::class_guid = { 0x67882220, 0xeea5, 0x4dbc, { 0x9a, 0xa3, 0x63, 0xde, 0x8c, 0xdd, 0x40, 0x82 } };
+
+FOOGUIDDECL const GUID library_file_move_scope::class_guid = { 0x345fae5, 0x8093, 0x45f6, { 0x94, 0x2e, 0xd6, 0xe, 0xbf, 0x7, 0xe9, 0x52 } };
+
+FOOGUIDDECL const GUID library_file_move_manager::class_guid = { 0xc4cd4818, 0xe3f8, 0x4061, { 0x99, 0xf1, 0x18, 0x66, 0x4e, 0x6c, 0x28, 0x57 } };
+
+FOOGUIDDECL const GUID library_file_move_notify::class_guid = { 0xd8ae7613, 0x7577, 0x4192, { 0x8f, 0xa4, 0x2d, 0x8f, 0x7e, 0xc6, 0x6, 0x38 } };
+
+FOOGUIDDECL const GUID library_meta_autocomplete::class_guid = { 0x4b976e34, 0xf05a, 0x4da4, { 0xad, 0x65, 0x71, 0x9c, 0xdf, 0xd, 0xed, 0xae } };
+
+FOOGUIDDECL const GUID input_protocol_type::class_guid = { 0x6a03c4ee, 0xf87b, 0x49d7, { 0x81, 0xdb, 0x66, 0xb, 0xe8, 0xc1, 0x0, 0x7e } };
+
+FOOGUIDDECL const GUID input_decoder_v3::class_guid = { 0x953c71ed, 0xd3a2, 0x43f4, { 0xa3, 0x3a, 0x55, 0x94, 0xd6, 0x73, 0x96, 0xe5 } };
+
+FOOGUIDDECL const GUID metadb_hint_list_v2::class_guid = { 0x983a971a, 0x596b, 0x478f, { 0x9c, 0x38, 0x36, 0xb0, 0x2b, 0xd6, 0x39, 0xd9 } };
+
+#if FOOBAR2000_TARGET_VERSION >= 76
+FOOGUIDDECL const GUID playlist_loader::class_guid = { 0x7103cae9, 0x91c, 0x4d80, { 0xbc, 0x1d, 0x28, 0x4a, 0xc1, 0x3f, 0x1e, 0x8c } };
+FOOGUIDDECL const GUID playlist_loader_callback::class_guid = { 0x924470a0, 0x1478, 0x4141, { 0xa7, 0x5a, 0xc5, 0x2f, 0x1f, 0xfa, 0xef, 0xea } };
+#endif
+
+FOOGUIDDECL const GUID album_art_manager_v2::class_guid = { 0xb420664f, 0x4033, 0x465e, { 0x81, 0xb1, 0xce, 0x42, 0x43, 0x89, 0x1f, 0x59 } };
+FOOGUIDDECL const GUID album_art_extractor_instance_v2::class_guid = { 0x951bbeb1, 0xa94a, 0x4d9a, { 0xa2, 0x85, 0xd6, 0x1e, 0xe4, 0x66, 0xe8, 0xcc } };
+FOOGUIDDECL const GUID album_art_path_list::class_guid = { 0xbb26233f, 0x1051, 0x4b01, { 0x9f, 0xd8, 0xf0, 0xe4, 0x20, 0x7, 0xd7, 0xe6 } };
+FOOGUIDDECL const GUID album_art_fallback::class_guid = { 0x45481581, 0x40b3, 0x4930, { 0xab, 0x6d, 0x4e, 0x6e, 0x56, 0x58, 0x6c, 0x82 } };
+
+
+FOOGUIDDECL const GUID preferences_page_callback::class_guid = { 0x3d26e08e, 0x861c, 0x4599, { 0x9c, 0x89, 0xaa, 0xa7, 0x19, 0xaf, 0x50, 0x70 } };
+FOOGUIDDECL const GUID preferences_page_instance::class_guid = { 0x6893a996, 0xa816, 0x49fe, { 0x82, 0xce, 0xc, 0xb8, 0x4, 0xa4, 0xcf, 0xec } };
+FOOGUIDDECL const GUID preferences_page_v3::class_guid = { 0xd6d0f741, 0x9f17, 0x4df8, { 0x9d, 0x5c, 0x87, 0xf2, 0x8b, 0x1f, 0xe, 0x64 } };
+
+FOOGUIDDECL const GUID advconfig_entry_string_v2::class_guid = { 0x2ec9b1fa, 0xe1e4, 0x42f0, { 0x87, 0x97, 0x4a, 0x63, 0x16, 0x94, 0x86, 0xbc } };
+FOOGUIDDECL const GUID advconfig_entry_checkbox_v2::class_guid = { 0xe29b37d0, 0xa957, 0x4a85, { 0x82, 0x40, 0x1e, 0x96, 0xc7, 0x29, 0xb6, 0x69 } };
+
+FOOGUIDDECL const GUID config_io_callback_v2::class_guid = { 0xfe784bf0, 0x9504, 0x4e35, { 0x85, 0xe4, 0x72, 0x53, 0x82, 0x62, 0xa1, 0x99 } };
+
+FOOGUIDDECL const GUID contextmenu_item_v2::class_guid = { 0x4bd830ca, 0xe3e6, 0x404e, { 0x95, 0x44, 0xc9, 0xb7, 0xd1, 0x5a, 0x3f, 0x49 } };
+FOOGUIDDECL const GUID contextmenu_group_manager::class_guid = { 0x92ba0c5, 0x5572, 0x48cd, { 0xa4, 0xca, 0x7b, 0x73, 0xde, 0xb, 0x2a, 0xec } };
+FOOGUIDDECL const GUID contextmenu_group::class_guid = { 0x9dcfc219, 0x779, 0x4669, { 0x98, 0xc1, 0x83, 0x6d, 0xf6, 0x7, 0xc5, 0xd4 } };
+FOOGUIDDECL const GUID contextmenu_group_popup::class_guid = { 0x97636ad5, 0x5b2d, 0x4ad6, { 0x9f, 0x79, 0xc9, 0x64, 0x63, 0x88, 0xc8, 0x29 } };
+
+FOOGUIDDECL const GUID contextmenu_groups::root = { 0xe6e7dc71, 0x114b, 0x4848, { 0x92, 0x8c, 0x2a, 0xdc, 0x3f, 0x86, 0xbe, 0xb4 } };
+FOOGUIDDECL const GUID contextmenu_groups::tagging = { 0xc24b5125, 0xad58, 0x4dfd, { 0x99, 0x76, 0xff, 0xbe, 0xba, 0xad, 0xc9, 0x79 } };
+FOOGUIDDECL const GUID contextmenu_groups::utilities = { 0xfb0a55d6, 0xe693, 0x4c4a, { 0x8c, 0x62, 0xf2, 0x4e, 0xa0, 0xce, 0xf8, 0xb7 } };
+FOOGUIDDECL const GUID contextmenu_groups::replaygain = { 0x9640f207, 0x9c98, 0x47b5, { 0x85, 0x7, 0x6c, 0x9c, 0x14, 0x3e, 0x64, 0x15 } };
+FOOGUIDDECL const GUID contextmenu_groups::fileoperations = { 0x62a0e2a4, 0x251d, 0x4315, { 0x88, 0x9b, 0x1, 0x8f, 0x30, 0x8c, 0x7, 0x7a } };
+FOOGUIDDECL const GUID contextmenu_groups::convert = { 0x70429638, 0x502b, 0x466d, { 0xbf, 0x24, 0x46, 0xd, 0xae, 0x23, 0x10, 0x91 } };
+FOOGUIDDECL const GUID contextmenu_groups::playbackstatistics = { 0x12ad3123, 0xd934, 0x4241, { 0xa7, 0x1, 0x92, 0x7e, 0x87, 0x7, 0xd1, 0xdc } };
+FOOGUIDDECL const GUID contextmenu_groups::properties = { 0xb38cb9f, 0xa92d, 0x4fa4, { 0xb4, 0x58, 0x70, 0xd2, 0xfd, 0x39, 0x25, 0xba } };
+FOOGUIDDECL const GUID contextmenu_groups::legacy = { 0xbebb1711, 0x20e, 0x46ed, { 0xa7, 0xf8, 0xa3, 0x26, 0x27, 0x18, 0x4a, 0x88 } };
+
+FOOGUIDDECL const GUID mainmenu_commands_v2::class_guid = { 0xe682e810, 0x41f3, 0x434d, { 0xb0, 0xc7, 0xd4, 0x96, 0x90, 0xe6, 0x5f, 0x87 } };
+FOOGUIDDECL const GUID mainmenu_node::class_guid = { 0xabba6512, 0x377d, 0x414f, { 0x81, 0x3e, 0x68, 0x6, 0xc2, 0x2d, 0x4d, 0xb1 } };
+
+FOOGUIDDECL const GUID system_time_keeper::class_guid = { 0xdc5d4938, 0x7927, 0x48ba, { 0xbf, 0x84, 0xda, 0x2f, 0xb1, 0xb, 0x36, 0xf2 } };
+
+FOOGUIDDECL const GUID component_installation_validator::class_guid = { 0x639283e, 0x3004, 0x4e5c, { 0xb1, 0xb3, 0x6d, 0xff, 0x8, 0xa7, 0x92, 0x84 } };
+
+FOOGUIDDECL const GUID playback_stream_capture::class_guid = { 0x9423439e, 0x8cd5, 0x45d7, { 0xaa, 0x6d, 0x4b, 0x98, 0xc, 0x22, 0x93, 0x3e } };
+
+FOOGUIDDECL const GUID http_request::class_guid = { 0x48580056, 0x2c5f, 0x45a8, { 0xb8, 0x6e, 0x5, 0x83, 0x55, 0x3e, 0xaa, 0x4f } };
+FOOGUIDDECL const GUID http_request_post::class_guid = { 0xe254b804, 0xeac5, 0x4be0, { 0x99, 0x4d, 0x53, 0x1c, 0x17, 0xea, 0xfd, 0x37 } };
+FOOGUIDDECL const GUID http_client::class_guid = { 0x3b5ffe0c, 0xd75a, 0x491e, { 0xbb, 0x6f, 0x10, 0x3f, 0x73, 0x1e, 0x81, 0x84 } };
+FOOGUIDDECL const GUID http_reply::class_guid = { 0x7f02bf78, 0x5c98, 0x4d6d, { 0x83, 0x6b, 0xb7, 0x77, 0xa4, 0xa3, 0x3e, 0xe5 } };
+
+FOOGUIDDECL const GUID popup_message_v2::class_guid = { 0x18b74f55, 0x10e1, 0x4645, { 0x91, 0xf6, 0xb0, 0xe0, 0x4c, 0x28, 0x21, 0xe9 } };
+FOOGUIDDECL const GUID metadb_index_client::class_guid = { 0x52637e7d, 0x7f3, 0x49bf, { 0x90, 0x19, 0x36, 0x20, 0x83, 0xcc, 0x7e, 0x59 } };
+FOOGUIDDECL const GUID metadb_index_manager::class_guid = { 0xb9633863, 0x2683, 0x4163, { 0xa5, 0x8d, 0x26, 0x47, 0x5d, 0xb0, 0xe7, 0x9b } };
+FOOGUIDDECL const GUID init_stage_callback::class_guid = { 0xaf51c159, 0x6326, 0x4da5, { 0x90, 0xb0, 0xf1, 0x1f, 0x99, 0x64, 0xcc, 0x2e } };
+FOOGUIDDECL const GUID metadb_io_edit_callback::class_guid = { 0x2388a50f, 0x33d, 0x4b7c, { 0x91, 0xf2, 0x51, 0x53, 0x69, 0x43, 0xe9, 0xed } };
+FOOGUIDDECL const GUID decode_postprocessor_entry::class_guid = { 0xb105c345, 0xf642, 0x4a26, { 0xa7, 0x80, 0xbb, 0x90, 0xe1, 0xb4, 0xac, 0xb1 } };
+FOOGUIDDECL const GUID decode_postprocessor_instance::class_guid = { 0xfacabec0, 0xeeee, 0x46d1, { 0xa5, 0x39, 0xaa, 0x57, 0x5, 0xaf, 0x5d, 0x45 } };
+
+FOOGUIDDECL const GUID progress_meter_instance::class_guid = { 0x13915b24, 0xefef, 0x42b5, { 0xae, 0x1d, 0x55, 0x24, 0x5e, 0x22, 0x22, 0xc5 } };
+FOOGUIDDECL const GUID progress_meter::class_guid = { 0x5e98da34, 0xa9c7, 0x4925, { 0xb0, 0xec, 0x90, 0x9d, 0xe0, 0x16, 0xfa, 0x68 } };
-FOOGUIDDECL const GUID core_version_info_v2::class_guid = { 0x273704d7, 0x99ba, 0x4b58, { 0xa0, 0x60, 0x82, 0xab, 0x1, 0xb4, 0x92, 0x25 } };
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/hasher_md5.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/hasher_md5.cpp index dc73831..0d693dd 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/hasher_md5.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/hasher_md5.cpp @@ -19,4 +19,17 @@ hasher_md5_result hasher_md5::process_single(const void * p_buffer,t_size p_byte GUID hasher_md5::process_single_guid(const void * p_buffer,t_size p_bytes)
{
return guid_from_result(process_single(p_buffer,p_bytes));
-}
\ No newline at end of file +}
+
+t_uint64 hasher_md5_result::xorHalve() const {
+#if PFC_BYTE_ORDER_IS_BIG_ENDIAN
+ t_uint64 ret = 0;
+ for(int walk = 0; walk < 8; ++walk) {
+ ret |= (t_uint64)((t_uint8)m_data[walk] ^ (t_uint8)m_data[walk+8]) << (walk * 8);
+ }
+ return ret;
+#else
+ const t_uint64 * v = reinterpret_cast<const t_uint64*>(&m_data);
+ return v[0] ^ v[1];
+#endif
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/hasher_md5.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/hasher_md5.h index b81a72d..de6d5ed 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/hasher_md5.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/hasher_md5.h @@ -4,6 +4,8 @@ struct hasher_md5_state { struct hasher_md5_result {
char m_data[16];
+
+ t_uint64 xorHalve() const;
};
inline bool operator==(const hasher_md5_result & p_item1,const hasher_md5_result & p_item2) {return memcmp(&p_item1,&p_item2,sizeof(hasher_md5_result)) == 0;}
@@ -12,6 +14,11 @@ inline bool operator!=(const hasher_md5_result & p_item1,const hasher_md5_result namespace pfc {
template<> class traits_t<hasher_md5_state> : public traits_rawobject {};
template<> class traits_t<hasher_md5_result> : public traits_rawobject {};
+
+ template<> inline int compare_t(const hasher_md5_result & p_item1, const hasher_md5_result & p_item2) {
+ return memcmp(&p_item1, &p_item2, sizeof(hasher_md5_result));
+ }
+
}
class NOVTABLE hasher_md5 : public service_base
@@ -31,7 +38,43 @@ public: //! Helper
- void process_string(hasher_md5_state & p_state,const char * p_string,t_size p_length = infinite) {return process(p_state,p_string,pfc::strlen_max(p_string,p_length));}
+ void process_string(hasher_md5_state & p_state,const char * p_string,t_size p_length = ~0) {return process(p_state,p_string,pfc::strlen_max(p_string,p_length));}
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(hasher_md5);
-};
\ No newline at end of file +};
+
+
+class stream_writer_hasher_md5 : public stream_writer {
+public:
+ stream_writer_hasher_md5() {
+ m_hasher->initialize(m_state);
+ }
+ void write(const void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
+ p_abort.check();
+ m_hasher->process(m_state,p_buffer,p_bytes);
+ }
+ hasher_md5_result result() const {
+ return m_hasher->get_result(m_state);
+ }
+ GUID resultGuid() const {
+ return hasher_md5::guid_from_result(result());
+ }
+private:
+ hasher_md5_state m_state;
+ static_api_ptr_t<hasher_md5> m_hasher;
+};
+template<bool isBigEndian = false>
+class stream_formatter_hasher_md5 : public stream_writer_formatter<isBigEndian> {
+public:
+ stream_formatter_hasher_md5() : stream_writer_formatter<isBigEndian>(_m_stream,_m_abort) {}
+
+ hasher_md5_result result() const {
+ return _m_stream.result();
+ }
+ GUID resultGuid() const {
+ return hasher_md5::guid_from_result(result());
+ }
+private:
+ abort_callback_dummy _m_abort;
+ stream_writer_hasher_md5 _m_stream;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/http_client.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/http_client.h new file mode 100644 index 0000000..3b13380 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/http_client.h @@ -0,0 +1,48 @@ +//! Implemented by file object returned by http_request::run methods. Allows you to retrieve various additional information returned by the server. \n
+//! Warning: reply status may change when seeking on the file object since seek operations often require a new HTTP request to be fired.
+class NOVTABLE http_reply : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(http_reply, service_base)
+public:
+ //! Retrieves the status line, eg. "200 OK".
+ virtual void get_status(pfc::string_base & out) = 0;
+ //! Retrieves a HTTP header value, eg. "content-type". Note that get_http_header("content-type", out) is equivalent to get_content_type(out). If there are multiple matching header entries, value of the first one will be returned.
+ virtual bool get_http_header(const char * name, pfc::string_base & out) = 0;
+ //! Retrieves a HTTP header value, eg. "content-type". If there are multiple matching header entries, this will return all their values, delimited by \r\n.
+ virtual bool get_http_header_multi(const char * name, pfc::string_base & out) = 0;
+};
+
+class NOVTABLE http_request : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(http_request, service_base)
+public:
+ //! Adds a HTTP request header line.
+ //! @param line Request to be added, without trailing \r\n.
+ virtual void add_header(const char * line) = 0;
+ //! Runs the request on the specified URL. Throws an exception on failure (connection error, invalid response from the server, reply code other than 2XX), returns a file::ptr interface to the stream on success.
+ virtual file::ptr run(const char * url, abort_callback & abort) = 0;
+ //! Runs the request on the specified URL. Throws an exception on failure but returns normally if the HTTP server returned a valid response other than 2XX, so the caller can still parse the received data stream if the server has returned an error.
+ virtual file::ptr run_ex(const char * url, abort_callback & abort) = 0;
+
+ void add_header(const char * name, const char * value) {
+ add_header(pfc::string_formatter() << name << ": " << value);
+ }
+};
+
+class NOVTABLE http_request_post : public http_request {
+ FB2K_MAKE_SERVICE_INTERFACE(http_request_post, http_request);
+public:
+ //! Adds a HTTP POST field.
+ //! @param name Field name.
+ //! @param fileName File name to be included in the POST request; leave empty ("") not to send a file name.
+ //! @param contentType Content type of the entry; leave empty ("") not to send content type.
+ virtual void add_post_data(const char * name, const void * data, t_size dataSize, const char * fileName, const char * contentType) = 0;
+
+ void add_post_data(const char * name, const char * value) { add_post_data(name, value, strlen(value), "", ""); }
+};
+
+class NOVTABLE http_client : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(http_client)
+public:
+ //! Creates a HTTP request object.
+ //! @param type Request type. Currently supported: "GET" and "POST". Throws pfc::exception_not_implemented for unsupported values.
+ virtual http_request::ptr create_request(const char * type) = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/icon_remap.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/icon_remap.h new file mode 100644 index 0000000..0df7f77 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/icon_remap.h @@ -0,0 +1,26 @@ +//! New in 0.9.5; allows your file format to use another icon than <extension>.ico when registering the file type with Windows shell. \n
+//! Implementation: use icon_remapping_impl, or simply: static service_factory_single_t<icon_remapping_impl> myicon("ext","iconname.ico");
+class icon_remapping : public service_base {
+public:
+ //! @param p_extension File type extension being queried.
+ //! @param p_iconname Receives the icon name to use, including the .ico extension.
+ //! @returns True when p_iconname has been set, false if we don't recognize the specified extension.
+ virtual bool query(const char * p_extension,pfc::string_base & p_iconname) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(icon_remapping);
+};
+
+//! Standard implementation of icon_remapping.
+class icon_remapping_impl : public icon_remapping {
+public:
+ icon_remapping_impl(const char * p_extension,const char * p_iconname) : m_extension(p_extension), m_iconname(p_iconname) {}
+ bool query(const char * p_extension,pfc::string_base & p_iconname) {
+ if (stricmp_utf8(p_extension,m_extension) == 0) {
+ p_iconname = m_iconname; return true;
+ } else {
+ return false;
+ }
+ }
+private:
+ pfc::string8 m_extension,m_iconname;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/initquit.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/initquit.h index 9984447..2e6e332 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/initquit.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/initquit.h @@ -1,11 +1,11 @@ -#ifndef _INITQUIT_H_
-#define _INITQUIT_H_
-
-#include "service.h"
-
-//init/quit callback, on_init is called after main window has been created, on_quit is called before main window is destroyed
-class NOVTABLE initquit : public service_base
-{
+//! Basic callback startup/shutdown callback, on_init is called after the main window has been created, on_quit is called before the main window is destroyed. \n
+//! To register: static initquit_factory_t<myclass> myclass_factory; \n
+//! Note that you should be careful with calling other components during on_init/on_quit or \n
+//! initializing services that are possibly used by other components by on_init/on_quit - \n
+//! initialization order of components is undefined.
+//! If some other service that you publish is not properly functional before you receive an on_init() call, \n
+//! someone else might call this service before >your< on_init is invoked.
+class NOVTABLE initquit : public service_base {
public:
virtual void on_init() {}
virtual void on_quit() {}
@@ -16,4 +16,24 @@ public: template<typename T>
class initquit_factory_t : public service_factory_single_t<T> {};
-#endif
\ No newline at end of file +
+//! \since 1.1
+namespace init_stages {
+ enum {
+ before_config_read = 10,
+ after_config_read = 20,
+ before_library_init = 30,
+ after_library_init = 40,
+ before_ui_init = 50,
+ after_ui_init = 60,
+ };
+};
+
+//! \since 1.1
+class NOVTABLE init_stage_callback : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(init_stage_callback)
+public:
+ virtual void on_init_stage(t_uint32 stage) = 0;
+
+ static void dispatch(t_uint32 stage) {FB2K_FOR_EACH_SERVICE(init_stage_callback, on_init_stage(stage));}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input.cpp index caefae6..2e9dd0a 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input.cpp @@ -158,6 +158,7 @@ namespace { };
void input_entry::g_open_for_decoding(service_ptr_t<input_decoder> & p_instance,service_ptr_t<file> p_filehint,const char * p_path,abort_callback & p_abort,bool p_from_redirect) {
+ TRACK_CALL_TEXT("input_entry::g_open_for_decoding");
#if 1
g_open_t(p_instance,p_filehint,p_path,p_abort,p_from_redirect);
#else
@@ -172,6 +173,7 @@ void input_entry::g_open_for_decoding(service_ptr_t<input_decoder> & p_instance, }
void input_entry::g_open_for_info_read(service_ptr_t<input_info_reader> & p_instance,service_ptr_t<file> p_filehint,const char * p_path,abort_callback & p_abort,bool p_from_redirect) {
+ TRACK_CALL_TEXT("input_entry::g_open_for_info_read");
#if 1
g_open_t(p_instance,p_filehint,p_path,p_abort,p_from_redirect);
#else
@@ -185,6 +187,7 @@ void input_entry::g_open_for_info_read(service_ptr_t<input_info_reader> & p_inst }
void input_entry::g_open_for_info_write(service_ptr_t<input_info_writer> & p_instance,service_ptr_t<file> p_filehint,const char * p_path,abort_callback & p_abort,bool p_from_redirect) {
+ TRACK_CALL_TEXT("input_entry::g_open_for_info_write");
#if 1
g_open_t(p_instance,p_filehint,p_path,p_abort,p_from_redirect);
#else
@@ -230,7 +233,7 @@ void input_open_file_helper(service_ptr_t<file> & p_file,const char * p_path,t_i if (p_file.is_empty()) {
switch(p_reason) {
default:
- throw pfc::exception_bug_check();
+ uBugCheck();
case input_open_info_read:
case input_open_decode:
filesystem::g_open(p_file,p_path,filesystem::open_mode_read,p_abort);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input.h index a0d6f07..c51bc72 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input.h @@ -1,9 +1,12 @@ +PFC_DECLARE_EXCEPTION(exception_tagging_unsupported, exception_io_data, "Tagging of this file format is not supported")
+
enum {
input_flag_no_seeking = 1 << 0,
input_flag_no_looping = 1 << 1,
input_flag_playback = 1 << 2,
input_flag_testing_integrity = 1 << 3,
input_flag_allow_inaccurate_seeking = 1 << 4,
+ input_flag_no_postproc = 1 << 5,
input_flag_simpledecode = input_flag_no_seeking|input_flag_no_looping,
};
@@ -12,7 +15,7 @@ enum { //! Instantiating: see input_entry.\n
//! Implementing: see input_impl.
-class input_info_reader : public service_base
+class NOVTABLE input_info_reader : public service_base
{
public:
//! Retrieves count of subsongs in the file. 1 for non-multisubsong-enabled inputs.
@@ -39,7 +42,7 @@ public: //! Instantiating: see input_entry.\n
//! Implementing: see input_impl.
-class input_decoder : public input_info_reader
+class NOVTABLE input_decoder : public input_info_reader
{
public:
//! Prepares to decode specified subsong; resets playback position to the beginning of specified subsong. This must be called first, before any other input_decoder methods (other than those inherited from input_info_reader). \n
@@ -88,11 +91,36 @@ public: FB2K_MAKE_SERVICE_INTERFACE(input_decoder,input_info_reader);
};
+
+class NOVTABLE input_decoder_v2 : public input_decoder {
+ FB2K_MAKE_SERVICE_INTERFACE(input_decoder_v2, input_decoder)
+public:
+
+ //! OPTIONAL, throws pfc::exception_not_implemented() when not supported by this implementation.
+ //! Special version of run(). Returns an audio_chunk object as well as a raw data block containing original PCM stream. This is mainly used for MD5 checks on lossless formats. \n
+ //! If you set a "MD5" tech info entry in get_info(), you should make sure that run_raw() returns data stream that can be used to verify it. \n
+ //! Returned raw data should be possible to cut into individual samples; size in bytes should be divisible by audio_chunk's sample count for splitting in case partial output is needed (with cuesheets etc).
+ virtual bool run_raw(audio_chunk & out, mem_block_container & outRaw, abort_callback & abort) = 0;
+
+ //! OPTIONAL, the call is ignored if this implementation doesn't support status logging. \n
+ //! Mainly used to generate logs when ripping CDs etc.
+ virtual void set_logger(event_logger::ptr ptr) = 0;
+};
+
+class NOVTABLE input_decoder_v3 : public input_decoder_v2 {
+ FB2K_MAKE_SERVICE_INTERFACE(input_decoder_v3, input_decoder_v2);
+public:
+ //! OPTIONAL, in case your input cares about paused/unpaused state, handle this to do any necessary additional processing. Valid only after initialize() with input_flag_playback.
+ virtual void set_pause(bool paused) = 0;
+ //! OPTIONAL, should return false in most cases; return true to force playback buffer flush on unpause. Valid only after initialize() with input_flag_playback.
+ virtual bool flush_on_pause() = 0;
+};
+
//! Class providing interface for writing metadata and replaygain info to files. Also see: file_info. \n
//! Instantiating: see input_entry.\n
//! Implementing: see input_impl.
-class input_info_writer : public input_info_reader
+class NOVTABLE input_info_writer : public input_info_reader
{
public:
//! Tells the service to update file tags with new info for specified subsong.
@@ -108,7 +136,7 @@ public: FB2K_MAKE_SERVICE_INTERFACE(input_info_writer,input_info_reader);
};
-class input_entry : public service_base
+class NOVTABLE input_entry : public service_base
{
public:
//! Determines whether specified content type can be handled by this input.
@@ -171,4 +199,3 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(input_entry);
};
-
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_file_type.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_file_type.cpp index e01239c..b174b5c 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_file_type.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_file_type.cpp @@ -1,67 +1,113 @@ #include "foobar2000.h"
-void input_file_type::build_openfile_mask(pfc::string_base & out, bool b_include_playlists)
-{
- pfc::string8_fastalloc name,mask,mask_alltypes,out_temp;
+#if FOOBAR2000_TARGET_VERSION >= 76
+
+typedef pfc::avltree_t<pfc::string8,pfc::io::path::comparator> t_fnList;
+
+static void formatMaskList(pfc::string_base & out, t_fnList const & in) {
+ pfc::const_iterator<pfc::string8> walk = in.first();
+ if (walk.is_valid()) {
+ out << *walk; ++walk;
+ while(walk.is_valid()) {
+ out << ";" << *walk; ++walk;
+ }
+ }
+}
+static void formatMaskList(pfc::string_base & out, t_fnList const & in, const char * label) {
+ if (in.get_count() > 0) {
+ out << label << "|";
+ formatMaskList(out,in);
+ out << "|";
+ }
+}
+
+void input_file_type::make_filetype_support_fingerprint(pfc::string_base & str) {
+ pfc::string_formatter out;
+ pfc::avltree_t<pfc::string8, pfc::string::comparatorCaseInsensitive> names;
- if (b_include_playlists)
{
- service_enum_t<playlist_loader> e;
- service_ptr_t<playlist_loader> ptr;
- if (e.first(ptr)) do {
- if (!mask.is_empty()) mask += ";";
- mask += "*.";
- mask += ptr->get_extension();
- } while(e.next(ptr));
- out_temp += "Playlists";
- out_temp += "|";
- out_temp += mask;
- out_temp += "|";
+ componentversion::ptr ptr; service_enum_t<componentversion> e;
+ pfc::string_formatter name;
+ while(e.next(ptr)) {
+ name = "";
+ ptr->get_component_name(name);
+ if (strstr(name, "decoder") != NULL || strstr(name, "Decoder") != NULL) names += name;
+ }
+ }
- if (!mask_alltypes.is_empty())
- {
- if (mask_alltypes[mask_alltypes.length()-1]!=';')
- mask_alltypes += ";";
+
+ make_extension_support_fingerprint(out);
+ for(pfc::const_iterator<pfc::string8> walk = names.first(); walk.is_valid(); ++walk) {
+ if (!out.is_empty()) str << "|";
+ out << *walk;
+ }
+ str = out;
+}
+void input_file_type::make_extension_support_fingerprint(pfc::string_base & str) {
+ pfc::avltree_t<pfc::string8, pfc::string::comparatorCaseInsensitive> masks;
+ {
+ service_enum_t<input_file_type> e;
+ service_ptr_t<input_file_type> ptr;
+ pfc::string_formatter mask;
+ while(e.next(ptr)) {
+ const unsigned count = ptr->get_count();
+ for(unsigned n=0;n<count;n++) {
+ mask.reset();
+ if (ptr->get_mask(n,mask)) {
+ if (strchr(mask,'|') == NULL) masks += mask;
+ }
+ }
+ }
+ }
+ pfc::string_formatter out;
+ for(pfc::const_iterator<pfc::string8> walk = masks.first(); walk.is_valid(); ++walk) {
+ if (!out.is_empty()) out << "|";
+ out << *walk;
+ }
+ str = out;
+}
+void input_file_type::build_openfile_mask(pfc::string_base & out, bool b_include_playlists)
+{
+ t_fnList extensionsAll, extensionsPl;;
+
+ if (b_include_playlists) {
+ service_enum_t<playlist_loader> e; service_ptr_t<playlist_loader> ptr;
+ while(e.next(ptr)) {
+ if (ptr->is_associatable()) {
+ pfc::string_formatter temp; temp << "*." << ptr->get_extension();
+ extensionsPl += temp;
+ extensionsAll += temp;
+ }
}
- mask_alltypes += mask;
}
+ typedef pfc::map_t<pfc::string8,t_fnList,pfc::string::comparatorCaseInsensitive> t_masks;
+ t_masks masks;
{
service_enum_t<input_file_type> e;
service_ptr_t<input_file_type> ptr;
- if (e.first(ptr)) do {
- unsigned n,m = ptr->get_count();
- for(n=0;n<m;n++)
- {
+ pfc::string_formatter name, mask;
+ while(e.next(ptr)) {
+ const unsigned count = ptr->get_count();
+ for(unsigned n=0;n<count;n++) {
name.reset();
mask.reset();
- if (ptr->get_name(n,name) && ptr->get_mask(n,mask))
- {
- if (!strchr(name,'|') && !strchr(mask,'|'))
- {
- out_temp += name;
- out_temp += "|";
- out_temp += mask;
- out_temp += "|";
- if (!mask_alltypes.is_empty())
- {
- if (mask_alltypes[mask_alltypes.length()-1]!=';')
- mask_alltypes += ";";
- }
- mask_alltypes += mask;
+ if (ptr->get_name(n,name) && ptr->get_mask(n,mask)) {
+ if (!strchr(name,'|') && !strchr(mask,'|')) {
+ masks.find_or_add(name) += mask;
+ extensionsAll += mask;
}
}
}
- } while(e.next(ptr));
+ }
}
- out.reset();
- out += "All files|*.*|";
- if (!mask_alltypes.is_empty())
- {
- out += "All supported types|";
- out += mask_alltypes;
- out += "|";
+ pfc::string_formatter outBuf;
+ outBuf << "All files|*.*|";
+ formatMaskList(outBuf, extensionsAll, "All supported types");
+ formatMaskList(outBuf, extensionsPl, "Playlists");
+ for(t_masks::const_iterator walk = masks.first(); walk.is_valid(); ++walk) {
+ formatMaskList(outBuf,walk->m_value,walk->m_key);
}
- out += out_temp;
+ out = outBuf;
}
-
+#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_file_type.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_file_type.h index c2f5d15..b499c7f 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_file_type.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_file_type.h @@ -1,16 +1,48 @@ -class input_file_type : public service_base
-{
+//! Entrypoint interface for registering media file types that can be opened through "open file" dialogs or associated with foobar2000 application in Windows shell. \n
+//! Instead of implementing this directly, use DECLARE_FILE_TYPE() / DECLARE_FILE_TYPE_EX() macros.
+class input_file_type : public service_base {
public:
virtual unsigned get_count()=0;
- virtual bool get_name(unsigned idx,pfc::string_base & out)=0;//e.g. "MPEG file"
- virtual bool get_mask(unsigned idx,pfc::string_base & out)=0;//e.g. "*.MP3;*.MP2"; separate with semicolons
+ virtual bool get_name(unsigned idx,pfc::string_base & out)=0;//eg. "MPEG files"
+ virtual bool get_mask(unsigned idx,pfc::string_base & out)=0;//eg. "*.MP3;*.MP2"; separate with semicolons
virtual bool is_associatable(unsigned idx) = 0;
+#if FOOBAR2000_TARGET_VERSION >= 76
static void build_openfile_mask(pfc::string_base & out,bool b_include_playlists=true);
+ static void make_extension_support_fingerprint(pfc::string_base & str);
+ static void make_filetype_support_fingerprint(pfc::string_base & str);
+#endif
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(input_file_type);
};
+//! Extended interface for registering media file types that can be associated with foobar2000 application in Windows shell. \n
+//! Instead of implementing this directly, use DECLARE_FILE_TYPE() / DECLARE_FILE_TYPE_EX() macros.
+class input_file_type_v2 : public input_file_type {
+public:
+ virtual void get_format_name(unsigned idx, pfc::string_base & out, bool isPlural) = 0;
+ virtual void get_extensions(unsigned idx, pfc::string_base & out) = 0;
+
+ //Deprecated input_file_type method implementations:
+ bool get_name(unsigned idx, pfc::string_base & out) {get_format_name(idx, out, true); return true;}
+ bool get_mask(unsigned idx, pfc::string_base & out) {
+ pfc::string_formatter temp; get_extensions(idx,temp);
+ pfc::chain_list_v2_t<pfc::string> exts; pfc::splitStringSimple_toList(exts,";",temp);
+ if (exts.get_count() == 0) return false;//should not happen
+ temp.reset();
+ for(pfc::const_iterator<pfc::string> walk = exts.first(); walk.is_valid(); ++walk) {
+ if (!temp.is_empty()) temp << ";";
+ temp << "*." << walk->get_ptr();
+ }
+ out = temp;
+ return true;
+ }
+
+ FB2K_MAKE_SERVICE_INTERFACE(input_file_type_v2,input_file_type)
+};
+
+
+//! Implementation helper.
class input_file_type_impl : public service_impl_single_t<input_file_type>
{
const char * name, * mask;
@@ -24,13 +56,17 @@ public: };
+//! Helper macro for registering our media file types.
+//! Usage: DECLARE_FILE_TYPE("Blah files","*.blah;*.bleh");
#define DECLARE_FILE_TYPE(NAME,MASK) \
namespace { static input_file_type_impl g_filetype_instance(NAME,MASK,true); \
static service_factory_single_ref_t<input_file_type_impl> g_filetype_service(g_filetype_instance); }
-//USAGE: DECLARE_FILE_TYPE("Blah file","*.blah;*.bleh");
+
+//! Implementation helper.
+//! Usage: static input_file_type_factory mytype("blah type","*.bla;*.meh",true);
class input_file_type_factory : private service_factory_single_transparent_t<input_file_type_impl>
{
public:
@@ -39,4 +75,35 @@ public: };
-//usage: static input_file_type_factory mytype("blah type","*.bla;*.meh",true)
\ No newline at end of file +
+class input_file_type_v2_impl : public input_file_type_v2 {
+public:
+ input_file_type_v2_impl(const char * extensions,const char * name, const char * namePlural) : m_extensions(extensions), m_name(name), m_namePlural(namePlural) {}
+ unsigned get_count() {return 1;}
+ bool is_associatable(unsigned idx) {return true;}
+ void get_format_name(unsigned idx, pfc::string_base & out, bool isPlural) {
+ out = isPlural ? m_namePlural : m_name;
+ }
+ void get_extensions(unsigned idx, pfc::string_base & out) {
+ out = m_extensions;
+ }
+
+private:
+ const pfc::string8 m_name, m_namePlural, m_extensions;
+};
+
+//! Helper macro for registering our media file types, extended version providing separate singular/plural type names.
+//! Usage: DECLARE_FILE_TYPE_EX("mp1;mp2;mp3","MPEG file","MPEG files")
+#define DECLARE_FILE_TYPE_EX(extensions, name, namePlural) \
+ namespace { static service_factory_single_t<input_file_type_v2_impl> g_myfiletype(extensions, name, namePlural); }
+
+
+//! Service for registering protocol types that can be associated with foobar2000.
+class input_protocol_type : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(input_protocol_type)
+public:
+ //! Returns the name of the protocol, such as "ftp" or "http".
+ virtual void get_protocol_name(pfc::string_base & out) = 0;
+ //! Returns a human-readable description of the protocol.
+ virtual void get_description(pfc::string_base & out) = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_impl.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_impl.h index 830dd56..0af4f61 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_impl.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/input_impl.h @@ -61,6 +61,12 @@ public: //! See: input_entry::is_our_path().
static bool g_is_our_path(const char * p_path,const char * p_extension);
+
+ //! See: input_decoder_v2::run_raw(). Relevant only when implementing input_decoder_v2. Valid after decode_initialize().
+ bool decode_run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort);
+
+ //! See: input_decoder::set_logger(). Relevant only when implementing input_decoder_v2. Valid after any open().
+ void set_logger(event_logger::ptr ptr);
protected:
input_impl() {}
~input_impl() {}
@@ -117,35 +123,8 @@ protected: };
-//! Misc helper, documentme.
-class input_singletrack_file_impl
-{
-public:
- void open(service_ptr_t<file> p_file,t_input_open_reason p_reason,abort_callback & p_abort);
-
- void get_info(file_info & p_info,abort_callback & p_abort);
- t_filestats get_file_stats(abort_callback & p_abort);
-
- void decode_initialize(unsigned p_flags,abort_callback & p_abort);
- bool decode_run(audio_chunk & p_chunk,abort_callback & p_abort);
- void decode_seek(double p_seconds,abort_callback & p_abort);
- bool decode_can_seek();
- bool decode_get_dynamic_info(file_info & p_out, double & p_timestamp_delta);
- bool decode_get_dynamic_info_track(file_info & p_out, double & p_timestamp_delta);
- void decode_on_idle(abort_callback & p_abort);
-
- void retag(file_info & p_info,abort_callback & p_abort);
-
- static bool g_is_our_content_type(const char * p_content_type);
- static bool g_is_our_path(const char * p_path,const char * p_extension);
-
-protected:
- input_singletrack_file_impl() {}
- ~input_singletrack_file_impl() {}
-};
-
//! Used internally by standard input_entry implementation; do not use directly. Translates input_decoder / input_info_reader / input_info_writer calls to input_impl calls.
-template<class I, class t_base>
+template<typename I, typename t_base>
class input_impl_interface_wrapper_t : public t_base
{
public:
@@ -182,6 +161,10 @@ public: return m_instance.decode_run(p_chunk,p_abort);
}
+ bool run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) {
+ return m_instance.decode_run_raw(p_chunk, p_raw, p_abort);
+ }
+
void seek(double p_seconds,abort_callback & p_abort) {
m_instance.decode_seek(p_seconds,p_abort);
}
@@ -202,6 +185,18 @@ public: m_instance.decode_on_idle(p_abort);
}
+ void set_logger(event_logger::ptr ptr) {
+ m_instance.set_logger(ptr);
+ }
+
+ void set_pause(bool paused) {
+ m_instance.set_pause(paused);
+ }
+ bool flush_on_pause() {
+ return m_instance.flush_on_pause();
+ }
+
+
// input_info_writer methods
void set_info(t_uint32 p_subsong,const file_info & p_info,abort_callback & p_abort) {
@@ -217,7 +212,7 @@ private: };
//! Helper used by input_singletrack_factory_t, do not use directly. Translates input_impl calls to input_singletrack_impl calls.
-template<class I>
+template<typename I>
class input_wrapper_singletrack_t
{
public:
@@ -262,6 +257,19 @@ public: m_instance.retag(p_info,p_abort);
}
+ bool decode_run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) {
+ return m_instance.decode_run_raw(p_chunk, p_raw, p_abort);
+ }
+
+ void set_logger(event_logger::ptr ptr) {m_instance.set_logger(ptr);}
+
+ void set_pause(bool paused) {
+ m_instance.set_pause(paused);
+ }
+ bool flush_on_pause() {
+ return m_instance.flush_on_pause();
+ }
+
void retag_commit(abort_callback & p_abort) {}
static bool g_is_our_content_type(const char * p_content_type) {return I::g_is_our_content_type(p_content_type);}
@@ -273,13 +281,13 @@ private: };
//! Helper; standard input_entry implementation. Do not instantiate this directly, use input_factory_t or one of other input_*_factory_t helpers instead.
-template<class I,unsigned t_flags>
+template<typename I,unsigned t_flags, typename t_decoder = input_decoder, typename t_inforeader = input_info_reader, typename t_infowriter = input_info_writer>
class input_entry_impl_t : public input_entry
{
private:
- template<class T>
- void instantiate_t(service_ptr_t<T> & p_instance,service_ptr_t<file> p_filehint,const char * p_path,t_input_open_reason p_reason,abort_callback & p_abort)
+ template<typename T, typename out>
+ void instantiate_t(service_ptr_t<out> & p_instance,service_ptr_t<file> p_filehint,const char * p_path,t_input_open_reason p_reason,abort_callback & p_abort)
{
service_ptr_t< service_impl_t<input_impl_interface_wrapper_t<I,T> > > temp;
temp = new service_impl_t<input_impl_interface_wrapper_t<I,T> >();
@@ -291,15 +299,15 @@ public: bool is_our_path(const char * p_full_path,const char * p_extension) {return I::g_is_our_path(p_full_path,p_extension);}
void open_for_decoding(service_ptr_t<input_decoder> & p_instance,service_ptr_t<file> p_filehint,const char * p_path,abort_callback & p_abort) {
- instantiate_t(p_instance,p_filehint,p_path,input_open_decode,p_abort);
+ instantiate_t<t_decoder>(p_instance,p_filehint,p_path,input_open_decode,p_abort);
}
void open_for_info_read(service_ptr_t<input_info_reader> & p_instance,service_ptr_t<file> p_filehint,const char * p_path,abort_callback & p_abort) {
- instantiate_t(p_instance,p_filehint,p_path,input_open_info_read,p_abort);
+ instantiate_t<t_inforeader>(p_instance,p_filehint,p_path,input_open_info_read,p_abort);
}
void open_for_info_write(service_ptr_t<input_info_writer> & p_instance,service_ptr_t<file> p_filehint,const char * p_path,abort_callback & p_abort) {
- instantiate_t(p_instance,p_filehint,p_path,input_open_info_write,p_abort);
+ instantiate_t<t_infowriter>(p_instance,p_filehint,p_path,input_open_info_write,p_abort);
}
void get_extended_data(service_ptr_t<file> p_filehint,const playable_location & p_location,const GUID & p_guid,mem_block_container & p_out,abort_callback & p_abort) {
@@ -311,17 +319,17 @@ public: //! Stardard input factory. For reference of functions that must be supported by registered class, see input_impl.\n Usage: static input_factory_t<myinputclass> g_myinputclass_factory;\n Note that input classes can't be registered through service_factory_t template directly.
-template<class T>
+template<typename T>
class input_factory_t : public service_factory_single_t<input_entry_impl_t<T,0> > {};
//! Non-multitrack-enabled input factory (helper) - hides multitrack management functions from input implementation; use this for inputs that handle file types where each physical file can contain only one user-visible playable track. For reference of functions that must be supported by registered class, see input_singletrack_impl.\n Usage: static input_singletrack_factory_t<myinputclass> g_myinputclass_factory;\n Note that input classes can't be registered through service_factory_t template directly.template<class T>
-template<class T>
+template<typename T>
class input_singletrack_factory_t : public service_factory_single_t<input_entry_impl_t<input_wrapper_singletrack_t<T>,0> > {};
-//! Extended version of input_factory_t, with non-default flags. See: input_factory_t, input_entry::get_flags().
-template<class T,unsigned t_flags>
-class input_factory_ex_t : public service_factory_single_t<input_entry_impl_t<T,t_flags> > {};
+//! Extended version of input_factory_t, with non-default flags and supported interfaces. See: input_factory_t, input_entry::get_flags().
+template<typename T,unsigned t_flags = 0, typename t_decoder = input_decoder, typename t_inforeader = input_info_reader, typename t_infowriter = input_info_writer>
+class input_factory_ex_t : public service_factory_single_t<input_entry_impl_t<T,t_flags, t_decoder, t_inforeader, t_infowriter> > {};
-//! Extended version of input_singletrack_factory_t, with non-default flags. See: input_singletrack_factory_t, input_entry::get_flags().
-template<class T,unsigned t_flags>
-class input_singletrack_factory_ex_t : public service_factory_single_t<input_entry_impl_t<input_wrapper_singletrack_t<T>,t_flags> > {};
+//! Extended version of input_singletrack_factory_t, with non-default flags and supported interfaces. See: input_singletrack_factory_t, input_entry::get_flags().
+template<typename T,unsigned t_flags = 0, typename t_decoder = input_decoder, typename t_inforeader = input_info_reader, typename t_infowriter = input_info_writer>
+class input_singletrack_factory_ex_t : public service_factory_single_t<input_entry_impl_t<input_wrapper_singletrack_t<T>,t_flags, t_decoder, t_inforeader, t_infowriter> > {};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/library_manager.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/library_manager.h index 4dc0529..c63ab50 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/library_manager.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/library_manager.h @@ -1,10 +1,6 @@ -#ifndef _foobar2000_sdk_library_manager_h_
-#define _foobar2000_sdk_library_manager_h_
-
/*!
This service implements methods allowing you to interact with the Media Library.\n
-All methods are valid from main thread only.\n
-To avoid race conditions, methods that alter library contents should not be called from inside global callbacks.\n
+All methods are valid from main thread only, unless noted otherwise.\n
Usage: Use static_api_ptr_t<library_manager> to instantiate.
*/
@@ -17,68 +13,71 @@ public: virtual bool on_item(const metadb_handle_ptr & p_item) = 0;
};
- //! Returns whether specified item is in the Media Library or not.
+ //! Returns whether the specified item is in the Media Library or not.
virtual bool is_item_in_library(const metadb_handle_ptr & p_item) = 0;
- //! Returns whether current user settings allow specified item to be added to the Media Library or not.
+ //! Returns whether current user settings allow the specified item to be added to the Media Library or not.
virtual bool is_item_addable(const metadb_handle_ptr & p_item) = 0;
- //! Returns whether current user settings allow specified item path to be added to the Media Library or not.
+ //! Returns whether current user settings allow the specified item path to be added to the Media Library or not.
virtual bool is_path_addable(const char * p_path) = 0;
- //! Retrieves path of specified item relative to Media Library directory it is in. Returns true on success, false when the item is not in the Media Library.
+ //! Retrieves path of the specified item relative to the Media Library folder it is in. Returns true on success, false when the item is not in the Media Library.
+ //! SPECIAL WARNING: to allow multi-CPU optimizations to parse relative track paths, this API works in threads other than the main app thread. Main thread MUST be blocked while working in such scenarios, it's NOT safe to call from worker threads while the Media Library content/configuration might be getting altered.
virtual bool get_relative_path(const metadb_handle_ptr & p_item,pfc::string_base & p_out) = 0;
//! Calls callback method for every item in the Media Library. Note that order of items in Media Library is undefined.
virtual void enum_items(enum_callback & p_callback) = 0;
- //! Adds specified items to the Media Library (items actually added will be filtered according to user settings).
- virtual void add_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
- //! Removes specified items from the Media Library (does nothing if specific item is not in the Media Library).
- virtual void remove_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
- //! Adds specified items to the Media Library (items actually added will be filtered according to user settings). The difference between this and add_items() is that items are not added immediately; the operation is queued and executed later, so it is safe to call from e.g. global callbacks.
- virtual void add_items_async(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
+ //! Deprecated, does nothing.
+ __declspec(deprecated) virtual void add_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
+ //! Deprecated, does nothing.
+ __declspec(deprecated) virtual void remove_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
+ //! Deprecated, does nothing.
+ __declspec(deprecated) virtual void add_items_async(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
- //! For internal use only; p_data must be sorted by metadb::path_compare; use file_operation_callback static methods instead of calling this directly.
- virtual void on_files_deleted_sorted(const pfc::list_base_const_t<const char *> & p_data) = 0;
+ //! Deprecated, does nothing.
+ __declspec(deprecated) virtual void on_files_deleted_sorted(const pfc::list_base_const_t<const char *> & p_data) = 0;
- //! Retrieves entire Media Library content.
+ //! Retrieves the entire Media Library content.
virtual void get_all_items(pfc::list_base_t<metadb_handle_ptr> & p_out) = 0;
- //! Returns whether Media Library functionality is enabled or not, for e.g. notifying user to change settings when trying to use a Media Library viewer without having configured Media Library first.
+ //! Returns whether Media Library functionality is enabled or not (to be exact: whether there's at least one Media Library folder present in settings), for e.g. notifying the user to change settings when trying to use a Media Library viewer without having configured the Media Library first.
virtual bool is_library_enabled() = 0;
- //! Pops up Media Library preferences page.
+ //! Pops up the Media Library preferences page.
virtual void show_preferences() = 0;
- //! Deprecated; use library_manager_v2::rescan_async() when possible.\n
- //! Rescans user-specified Media Library directories for new files and removes references to files that no longer exist from the Media Library.\n
- //! Note that this function creates modal dialog and does not return until the operation has completed.\n
+ //! Deprecated, do not call.
virtual void rescan() = 0;
- //! Deprecated; use library_manager_v2::check_dead_entries_async() when possible.\n
- //! Hints Media Library about possible dead items, typically used for "remove dead entries" context action in ML viewers. The implementation will verify whether the items are actually dead before ML contents are altered.\n
- //! Note that this function creates modal dialog and does not return until the operation has completed.\n
- virtual void check_dead_entries(const pfc::list_base_t<metadb_handle_ptr> & p_list) = 0;
+ //! Deprecated, does nothing.
+ __declspec(deprecated) virtual void check_dead_entries(const pfc::list_base_t<metadb_handle_ptr> & p_list) = 0;
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(library_manager);
};
-//! New in 0.9.3
+//! \since 0.9.3
class NOVTABLE library_manager_v2 : public library_manager {
public:
- //! Returns whether a rescan process is currently running.
- virtual bool is_rescan_running() = 0;
+ //! Deprecated, always returns false.
+ __declspec(deprecated) virtual bool is_rescan_running() = 0;
- //! Starts an async rescan process. Note that if another process is already running, the process is silently aborted.
- //! @param p_parent Parent window for displayed progress dialog.
- //! @param p_notify Allows caller to receive notifications about the process finishing. Status code: 1 on success, 0 on user abort. Pass NULL if caller doesn't care.
- virtual void rescan_async(HWND p_parent,completion_notify_ptr p_notify) = 0;
+ //! Deprecated, does nothing and instantly signals completion.
+ __declspec(deprecated) virtual void rescan_async(HWND p_parent,completion_notify_ptr p_notify) = 0;
- //! Hints Media Library about possible dead items, typically used for "remove dead entries" context action in ML viewers. The implementation will verify whether the items are actually dead before ML contents are altered.\n
- //! @param p_list List of items to process.
- //! @param p_parent Parent window for displayed progress dialog.
- //! @param p_notify Allows caller to receive notifications about the process finishing. Status code: 1 on success, 0 on user abort. Pass NULL if caller doesn't care.
- virtual void check_dead_entries_async(const pfc::list_base_t<metadb_handle_ptr> & p_list,HWND p_parent,completion_notify_ptr p_notify) = 0;
+ //! Deprecated, does nothing and instantly signals completion.
+ __declspec(deprecated) virtual void check_dead_entries_async(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,HWND p_parent,completion_notify_ptr p_notify) = 0;
FB2K_MAKE_SERVICE_INTERFACE(library_manager_v2,library_manager);
};
-//! New in 0.9.4
+
+class NOVTABLE library_callback_dynamic {
+public:
+ //! Called when new items are added to the Media Library.
+ virtual void on_items_added(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
+ //! Called when some items have been removed from the Media Library.
+ virtual void on_items_removed(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
+ //! Called when some items in the Media Library have been modified.
+ virtual void on_items_modified(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
+};
+
+//! \since 0.9.5
class NOVTABLE library_manager_v3 : public library_manager_v2 {
public:
//! Retrieves directory path and subdirectory/filename formatting scheme for newly encoded/copied/moved tracks.
@@ -88,9 +87,25 @@ public: //! @returns True on success, false when the feature has not been configured.
virtual bool get_new_file_pattern_images(pfc::string_base & p_directory,pfc::string_base & p_format) = 0;
+ virtual void register_callback(library_callback_dynamic * p_callback) = 0;
+ virtual void unregister_callback(library_callback_dynamic * p_callback) = 0;
+
FB2K_MAKE_SERVICE_INTERFACE(library_manager_v3,library_manager_v2);
};
+class library_callback_dynamic_impl_base : public library_callback_dynamic {
+public:
+ library_callback_dynamic_impl_base() {static_api_ptr_t<library_manager_v3>()->register_callback(this);}
+ ~library_callback_dynamic_impl_base() {static_api_ptr_t<library_manager_v3>()->unregister_callback(this);}
+
+ //stub implementations - avoid pure virtual function call issues
+ void on_items_added(metadb_handle_list_cref p_data) {}
+ void on_items_removed(metadb_handle_list_cref p_data) {}
+ void on_items_modified(metadb_handle_list_cref p_data) {}
+
+ PFC_CLASS_NOT_COPYABLE_EX(library_callback_dynamic_impl_base);
+};
+
//! Callback service receiving notifications about Media Library content changes. Methods called only from main thread.\n
//! Use library_callback_factory_t template to register.
class NOVTABLE library_callback : public service_base {
@@ -130,4 +145,48 @@ template<typename T> class library_viewer_factory_t : public service_factory_single_t<T> {};
-#endif _foobar2000_sdk_library_manager_h_
\ No newline at end of file +
+
+//! \since 0.9.5.4
+//! Allows you to spawn a popup Media Library Search window with any query string that you specify. \n
+//! Usage: static_api_ptr_t<library_search_ui>()->show("querygoeshere");
+class NOVTABLE library_search_ui : public service_base {
+public:
+ virtual void show(const char * query) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(library_search_ui)
+};
+
+//! \since 0.9.6
+class NOVTABLE library_file_move_scope : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(library_file_move_scope, service_base)
+public:
+};
+
+//! \since 0.9.6
+class NOVTABLE library_file_move_manager : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(library_file_move_manager)
+public:
+ virtual library_file_move_scope::ptr acquire_scope() = 0;
+ virtual bool is_move_in_progress() = 0;
+};
+
+//! \since 0.9.6
+class NOVTABLE library_file_move_notify_ {
+public:
+ virtual void on_state_change(bool isMoving) = 0;
+};
+
+//! \since 0.9.6
+class NOVTABLE library_file_move_notify : public service_base, public library_file_move_notify_ {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(library_file_move_notify)
+public:
+};
+
+
+//! \since 0.9.6.1
+class NOVTABLE library_meta_autocomplete : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(library_meta_autocomplete)
+public:
+ virtual bool get_value_list(const char * metaName, pfc::com_ptr_t<IUnknown> & out) = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/link_resolver.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/link_resolver.h index ca92aaa..8f09a1e 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/link_resolver.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/link_resolver.h @@ -30,4 +30,4 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(link_resolver);
};
-#endif //_foobar2000_sdk_link_resolver_h_
\ No newline at end of file +#endif //_foobar2000_sdk_link_resolver_h_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/main_thread_callback.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/main_thread_callback.h index 467efdd..9da97cd 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/main_thread_callback.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/main_thread_callback.h @@ -17,4 +17,18 @@ public: virtual void add_callback(service_ptr_t<main_thread_callback> p_callback) = 0;
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(main_thread_callback_manager);
-};
\ No newline at end of file +};
+
+
+static void main_thread_callback_add(main_thread_callback::ptr ptr) {
+ static_api_ptr_t<main_thread_callback_manager>()->add_callback(ptr);
+}
+template<typename t_class> static void main_thread_callback_spawn() {
+ main_thread_callback_add(new service_impl_t<t_class>);
+}
+template<typename t_class, typename t_param1> static void main_thread_callback_spawn(const t_param1 & p1) {
+ main_thread_callback_add(new service_impl_t<t_class>(p1));
+}
+template<typename t_class, typename t_param1, typename t_param2> static void main_thread_callback_spawn(const t_param1 & p1, const t_param2 & p2) {
+ main_thread_callback_add(new service_impl_t<t_class>(p1, p2));
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/mainmenu.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/mainmenu.cpp index 454b292..c959cb8 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/mainmenu.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/mainmenu.cpp @@ -1,18 +1,18 @@ #include "foobar2000.h"
+bool mainmenu_commands::g_execute_dynamic(const GUID & p_guid, const GUID & p_subGuid,service_ptr_t<service_base> p_callback) {
+ mainmenu_commands::ptr ptr; t_uint32 index;
+ if (!menu_item_resolver::g_resolve_main_command(p_guid, ptr, index)) return false;
+ mainmenu_commands_v2::ptr v2;
+ if (!ptr->service_query_t(v2)) return false;
+ if (!v2->is_command_dynamic(index)) return false;
+ return v2->dynamic_execute(index, p_subGuid, p_callback);
+}
bool mainmenu_commands::g_execute(const GUID & p_guid,service_ptr_t<service_base> p_callback) {
- service_enum_t<mainmenu_commands> e;
- service_ptr_t<mainmenu_commands> ptr;
- while(e.next(ptr)) {
- const t_uint32 count = ptr->get_command_count();
- for(t_uint32 n=0;n<count;n++) {
- if (ptr->get_command(n) == p_guid) {
- ptr->execute(n,p_callback);
- return true;
- }
- }
- }
- return false;
+ mainmenu_commands::ptr ptr; t_uint32 index;
+ if (!menu_item_resolver::g_resolve_main_command(p_guid, ptr, index)) return false;
+ ptr->execute(index, p_callback);
+ return true;
}
bool mainmenu_commands::g_find_by_name(const char * p_name,GUID & p_guid) {
@@ -31,4 +31,27 @@ bool mainmenu_commands::g_find_by_name(const char * p_name,GUID & p_guid) { }
return false;
-}
\ No newline at end of file +}
+
+
+static bool dynamic_execute_recur(mainmenu_node::ptr node, const GUID & subID, service_ptr_t<service_base> callback) {
+ switch(node->get_type()) {
+ case mainmenu_node::type_command:
+ if (subID == node->get_guid()) {
+ node->execute(callback); return true;
+ }
+ break;
+ case mainmenu_node::type_group:
+ {
+ const t_size total = node->get_children_count();
+ for(t_size walk = 0; walk < total; ++walk) {
+ if (dynamic_execute_recur(node->get_child(walk), subID, callback)) return true;
+ }
+ }
+ break;
+ }
+ return false;
+}
+bool mainmenu_commands_v2::dynamic_execute(t_uint32 index, const GUID & subID, service_ptr_t<service_base> callback) {
+ return dynamic_execute_recur(dynamic_instantiate(index), subID, callback);
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/mem_block_container.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/mem_block_container.h index 8960ed1..de2f537 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/mem_block_container.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/mem_block_container.h @@ -9,6 +9,11 @@ public: void from_stream(stream_reader * p_stream,t_size p_bytes,abort_callback & p_abort);
void set(const void * p_buffer,t_size p_size);
+ void set(const mem_block_container & source) {copy(source);}
+ template<typename t_source> void set(const t_source & source) {
+ PFC_STATIC_ASSERT( sizeof(source[0]) == 1 );
+ set(source.get_ptr(), source.get_size());
+ }
inline void copy(const mem_block_container & p_source) {set(p_source.get_ptr(),p_source.get_size());}
inline void reset() {set_size(0);}
@@ -47,3 +52,17 @@ private: t_size m_size,m_buffer_size;
void * m_buffer;
};
+
+template<typename t_ref>
+class mem_block_container_ref_impl : public mem_block_container {
+public:
+ mem_block_container_ref_impl(t_ref & ref) : m_ref(ref) {
+ PFC_STATIC_ASSERT( sizeof(ref[0]) == 1 );
+ }
+ const void * get_ptr() const {return m_ref.get_ptr();}
+ void * get_ptr() {return m_ref.get_ptr();}
+ t_size get_size() const {return m_ref.get_size();}
+ void set_size(t_size p_size) {m_ref.set_size(p_size);}
+private:
+ t_ref & m_ref;
+};
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu.h index 61190ee..cb72921 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu.h @@ -10,6 +10,7 @@ public: class NOVTABLE mainmenu_group_popup : public mainmenu_group {
public:
virtual void get_display_string(pfc::string_base & p_out) = 0;
+ void get_name(pfc::string_base & out) {get_display_string(out);}
FB2K_MAKE_SERVICE_INTERFACE(mainmenu_group_popup,mainmenu_group);
};
@@ -19,9 +20,13 @@ public: enum {
flag_disabled = 1<<0,
flag_checked = 1<<1,
+ flag_radiochecked = 1<<2,
+ //! \since 1.0
+ //! Replaces the old return-false-from-get_display() behavior - use this to make your command hidden by default but accessible when holding shift.
+ flag_defaulthidden = 1<<3,
sort_priority_base = 0x10000,
sort_priority_dontcare = 0x80000000,
- sort_priority_last = infinite,
+ sort_priority_last = ~0,
};
//! Retrieves number of implemented commands. Index parameter of other methods must be in 0....command_count-1 range.
@@ -41,7 +46,8 @@ public: //! Executes the command. p_callback parameter is reserved for future use and should be ignored / set to null pointer.
virtual void execute(t_uint32 p_index,service_ptr_t<service_base> p_callback) = 0;
- static bool g_execute(const GUID & p_guid,service_ptr_t<service_base> p_callback = service_ptr_t<service_base>());
+ static bool g_execute(const GUID & p_guid,service_ptr_t<service_base> p_callback = NULL);
+ static bool g_execute_dynamic(const GUID & p_guid, const GUID & p_subGuid,service_ptr_t<service_base> p_callback = NULL);
static bool g_find_by_name(const char * p_name,GUID & p_guid);
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(mainmenu_commands);
@@ -52,6 +58,12 @@ public: enum {
flag_show_shortcuts = 1 << 0,
flag_show_shortcuts_global = 1 << 1,
+ //! \since 1.0
+ //! To control which commands are shown, you should specify either flag_view_reduced or flag_view_full. If neither is specified, the implementation will decide automatically based on shift key being pressed, for backwards compatibility.
+ flag_view_reduced = 1 << 2,
+ //! \since 1.0
+ //! To control which commands are shown, you should specify either flag_view_reduced or flag_view_full. If neither is specified, the implementation will decide automatically based on shift key being pressed, for backwards compatibility.
+ flag_view_full = 1 << 3,
};
virtual void instantiate(const GUID & p_root) = 0;
@@ -115,13 +127,88 @@ typedef service_factory_single_t<mainmenu_group_popup_impl> __mainmenu_group_pop class mainmenu_group_factory : public __mainmenu_group_factory {
public:
- inline mainmenu_group_factory(const GUID & p_guid,const GUID & p_parent,t_uint32 p_priority) : __mainmenu_group_factory(p_guid,p_parent,p_priority) {}
+ mainmenu_group_factory(const GUID & p_guid,const GUID & p_parent,t_uint32 p_priority) : __mainmenu_group_factory(p_guid,p_parent,p_priority) {}
};
class mainmenu_group_popup_factory : public __mainmenu_group_popup_factory {
public:
- inline mainmenu_group_popup_factory(const GUID & p_guid,const GUID & p_parent,t_uint32 p_priority,const char * p_name) : __mainmenu_group_popup_factory(p_guid,p_parent,p_priority,p_name) {}
+ mainmenu_group_popup_factory(const GUID & p_guid,const GUID & p_parent,t_uint32 p_priority,const char * p_name) : __mainmenu_group_popup_factory(p_guid,p_parent,p_priority,p_name) {}
};
template<typename T>
-class mainmenu_commands_factory_t : public service_factory_single_t<T> {};
\ No newline at end of file +class mainmenu_commands_factory_t : public service_factory_single_t<T> {};
+
+
+
+
+
+
+// \since 1.0
+class NOVTABLE mainmenu_node : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(mainmenu_node, service_base)
+public:
+ enum { //same as contextmenu_item_node::t_type
+ type_group,type_command,type_separator
+ };
+
+ virtual t_uint32 get_type() = 0;
+ virtual void get_display(pfc::string_base & text, t_uint32 & flags) = 0;
+ //! Valid only if type is type_group.
+ virtual t_size get_children_count() = 0;
+ //! Valid only if type is type_group.
+ virtual ptr get_child(t_size index) = 0;
+ //! Valid only if type is type_command.
+ virtual void execute(service_ptr_t<service_base> callback) = 0;
+ //! Valid only if type is type_command.
+ virtual GUID get_guid() = 0;
+ //! Valid only if type is type_command.
+ virtual bool get_description(pfc::string_base & out) {return false;}
+
+};
+
+class mainmenu_node_separator : public mainmenu_node {
+public:
+ t_uint32 get_type() {return type_separator;}
+ void get_display(pfc::string_base & text, t_uint32 & flags) {text = ""; flags = 0;}
+ t_size get_children_count() {return 0;}
+ ptr get_child(t_size index) {throw pfc::exception_invalid_params();}
+ void execute(service_ptr_t<service_base>) {}
+ GUID get_guid() {return pfc::guid_null;}
+};
+
+class mainmenu_node_command : public mainmenu_node {
+public:
+ t_uint32 get_type() {return type_command;}
+ t_size get_children_count() {return 0;}
+ ptr get_child(t_size index) {throw pfc::exception_invalid_params();}
+/*
+ void get_display(pfc::string_base & text, t_uint32 & flags);
+ void execute(service_ptr_t<service_base> callback);
+ GUID get_guid();
+ bool get_description(pfc::string_base & out) {return false;}
+*/
+};
+
+class mainmenu_node_group : public mainmenu_node {
+public:
+ t_uint32 get_type() {return type_group;}
+ void execute(service_ptr_t<service_base> callback) {}
+ GUID get_guid() {return pfc::guid_null;}
+/*
+ void get_display(pfc::string_base & text, t_uint32 & flags);
+ t_size get_children_count();
+ ptr get_child(t_size index);
+*/
+};
+
+
+// \since 1.0
+class NOVTABLE mainmenu_commands_v2 : public mainmenu_commands {
+ FB2K_MAKE_SERVICE_INTERFACE(mainmenu_commands_v2, mainmenu_commands)
+public:
+ virtual bool is_command_dynamic(t_uint32 index) = 0;
+ //! Valid only when is_command_dynamic() returns true. Behavior undefined otherwise.
+ virtual mainmenu_node::ptr dynamic_instantiate(t_uint32 index) = 0;
+ //! Default fallback implementation provided.
+ virtual bool dynamic_execute(t_uint32 index, const GUID & subID, service_ptr_t<service_base> callback);
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_helpers.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_helpers.cpp index ad81e02..5a3c14b 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_helpers.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_helpers.cpp @@ -1,47 +1,25 @@ #include "foobar2000.h"
-bool menu_helpers::context_get_description(const GUID& p_guid,pfc::string_base & out)
-{
- service_enum_t<contextmenu_item> e;
- service_ptr_t<contextmenu_item> ptr;
- if (e.first(ptr)) do {
- unsigned action,num_actions = ptr->get_num_items();
- for(action=0;action<num_actions;action++)
- {
- if (p_guid == ptr->get_item_guid(action))
- {
- bool rv = ptr->get_item_description(action,out);
- if (!rv) out.reset();
- return rv;
- }
- }
- } while(e.next(ptr));
- return false;
+bool menu_helpers::context_get_description(const GUID& p_guid,pfc::string_base & out) {
+ service_ptr_t<contextmenu_item> ptr; t_uint32 index;
+ if (!menu_item_resolver::g_resolve_context_command(p_guid, ptr, index)) return false;
+ bool rv = ptr->get_item_description(index, out);
+ if (!rv) out.reset();
+ return rv;
}
-static bool run_context_command_internal(const GUID & p_command,const GUID & p_subcommand,const pfc::list_base_const_t<metadb_handle_ptr> & data,const GUID & caller)
-{
- bool done = false;
- if (data.get_count() > 0) {
- service_enum_t<contextmenu_item> e;
- service_ptr_t<contextmenu_item> ptr;
- if (e.first(ptr)) do {
- unsigned action,num_actions = ptr->get_num_items();
- for(action=0;action<num_actions;action++)
- {
- if (p_command == ptr->get_item_guid(action))
- {
- TRACK_CALL_TEXT("menu_helpers::run_command(), by GUID");
- ptr->item_execute_simple(action,p_subcommand,data,caller);
- done = true;
- break;
- }
- }
- if (done) break;
- } while(e.next(ptr));
+static bool run_context_command_internal(const GUID & p_command,const GUID & p_subcommand,const pfc::list_base_const_t<metadb_handle_ptr> & data,const GUID & caller) {
+ if (data.get_count() == 0) return false;
+ service_ptr_t<contextmenu_item> ptr; t_uint32 index;
+ if (!menu_item_resolver::g_resolve_context_command(p_command, ptr, index)) return false;
+
+ {
+ TRACK_CALL_TEXT("menu_helpers::run_command(), by GUID");
+ ptr->item_execute_simple(index, p_subcommand, data, caller);
}
- return done;
+
+ return true;
}
bool menu_helpers::run_command_context(const GUID & p_command,const GUID & p_subcommand,const pfc::list_base_const_t<metadb_handle_ptr> & data)
@@ -56,48 +34,20 @@ bool menu_helpers::run_command_context_ex(const GUID & p_command,const GUID & p_ bool menu_helpers::test_command_context(const GUID & p_guid)
{
- service_enum_t<contextmenu_item> e;
- service_ptr_t<contextmenu_item> ptr;
- bool done = false;
- if (e.first(ptr)) do {
- unsigned action,num_actions = ptr->get_num_items();
- for(action=0;action<num_actions;action++)
- {
- if (ptr->get_item_guid(action) == p_guid)
- {
- done = true;
- break;
- }
- }
- if (done) break;
- } while(e.next(ptr));
- return done;
+ service_ptr_t<contextmenu_item> ptr; t_uint32 index;
+ return menu_item_resolver::g_resolve_context_command(p_guid, ptr, index);
}
static bool g_is_checked(const GUID & p_command,const GUID & p_subcommand,const pfc::list_base_const_t<metadb_handle_ptr> & data,const GUID & caller)
{
- service_enum_t<contextmenu_item> e;
- service_ptr_t<contextmenu_item> ptr;
- bool done = false, rv = false;
- pfc::string8_fastalloc dummystring;
- if (e.first(ptr)) do {
- unsigned action,num_actions = ptr->get_num_items();
- for(action=0;action<num_actions;action++)
- {
- if (p_command == ptr->get_item_guid(action))
- {
- unsigned displayflags = 0;
- if (ptr->item_get_display_data(dummystring,displayflags,action,p_subcommand,data,caller))
- {
- rv = !!(displayflags & contextmenu_item_node::FLAG_CHECKED);
- done = true;
- break;
- }
- }
- }
- if (done) break;
- } while(e.next(ptr));
- return rv;
+ service_ptr_t<contextmenu_item> ptr; t_uint32 index;
+ if (!menu_item_resolver::g_resolve_context_command(p_command, ptr, index)) return false;
+
+ unsigned displayflags = 0;
+ pfc::string_formatter dummystring;
+ if (!ptr->item_get_display_data(dummystring,displayflags,index,p_subcommand,data,caller)) return false;
+ return (displayflags & contextmenu_item_node::FLAG_CHECKED) != 0;
+
}
bool menu_helpers::is_command_checked_context(const GUID & p_command,const GUID & p_subcommand,const pfc::list_base_const_t<metadb_handle_ptr> & data)
@@ -146,7 +96,7 @@ bool menu_helpers::guid_from_name(const char * p_name,unsigned p_name_len,GUID & for(n=0;n<m;n++)
{
ptr->get_item_name(n,nametemp);
- if (!strcmp_ex(nametemp,infinite,p_name,p_name_len))
+ if (!strcmp_ex(nametemp,~0,p_name,p_name_len))
{
p_out = ptr->get_item_guid(n);
return true;
@@ -156,24 +106,11 @@ bool menu_helpers::guid_from_name(const char * p_name,unsigned p_name_len,GUID & return false;
}
-bool menu_helpers::name_from_guid(const GUID & p_guid,pfc::string_base & p_out)
-{
- service_enum_t<contextmenu_item> e;
- service_ptr_t<contextmenu_item> ptr;
- pfc::string8_fastalloc nametemp;
- while(e.next(ptr))
- {
- unsigned n, m = ptr->get_num_items();
- for(n=0;n<m;n++)
- {
- if (p_guid == ptr->get_item_guid(n))
- {
- ptr->get_item_name(n,p_out);
- return true;
- }
- }
- }
- return false;
+bool menu_helpers::name_from_guid(const GUID & p_guid,pfc::string_base & p_out) {
+ service_ptr_t<contextmenu_item> ptr; t_uint32 index;
+ if (!menu_item_resolver::g_resolve_context_command(p_guid, ptr, index)) return false;
+ ptr->get_item_name(index, p_out);
+ return true;
}
@@ -206,7 +143,7 @@ const char * menu_helpers::guid_to_name_table::search(const GUID & p_guid) assert(dataptr < m_data.get_size());
ptr->get_item_name(n,nametemp);
- m_data[dataptr].m_name = strdup(nametemp);
+ m_data[dataptr].m_name = _strdup(nametemp);
m_data[dataptr].m_guid = ptr->get_item_guid(n);
dataptr++;
}
@@ -248,7 +185,7 @@ menu_helpers::guid_to_name_table::~guid_to_name_table() int menu_helpers::name_to_guid_table::entry_compare_search(const entry & entry1,const search_entry & entry2)
{
- return stricmp_utf8_ex(entry1.m_name,infinite,entry2.m_name,entry2.m_name_len);
+ return stricmp_utf8_ex(entry1.m_name,~0,entry2.m_name,entry2.m_name_len);
}
int menu_helpers::name_to_guid_table::entry_compare(const entry & entry1,const entry & entry2)
@@ -274,7 +211,7 @@ bool menu_helpers::name_to_guid_table::search(const char * p_name,unsigned p_nam assert(dataptr < m_data.get_size());
ptr->get_item_name(n,nametemp);
- m_data[dataptr].m_name = strdup(nametemp);
+ m_data[dataptr].m_name = _strdup(nametemp);
m_data[dataptr].m_guid = ptr->get_item_guid(n);
dataptr++;
}
@@ -345,16 +282,16 @@ bool menu_helpers::find_command_by_name(const char * p_name,GUID & p_command) bool standard_commands::run_main(const GUID & p_guid) {
- service_enum_t<mainmenu_commands> e;
- service_ptr_t<mainmenu_commands> ptr;
- while(e.next(ptr)) {
- const t_size count = ptr->get_command_count();
- for(t_size n=0;n<count;n++) {
- if (ptr->get_command(n) == p_guid) {
- ptr->execute(n,service_ptr_t<service_base>());
- return true;
- }
- }
- }
- return false;
-}
\ No newline at end of file + t_uint32 index;
+ mainmenu_commands::ptr ptr;
+ if (!menu_item_resolver::g_resolve_main_command(p_guid, ptr, index)) return false;
+ ptr->execute(index,service_ptr_t<service_base>());
+ return true;
+}
+
+bool menu_item_resolver::g_resolve_context_command(const GUID & id, contextmenu_item::ptr & out, t_uint32 & out_index) {
+ return static_api_ptr_t<menu_item_resolver>()->resolve_context_command(id, out, out_index);
+}
+bool menu_item_resolver::g_resolve_main_command(const GUID & id, mainmenu_commands::ptr & out, t_uint32 & out_index) {
+ return static_api_ptr_t<menu_item_resolver>()->resolve_main_command(id, out, out_index);
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_helpers.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_helpers.h index 60b6922..6233245 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_helpers.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_helpers.h @@ -70,7 +70,7 @@ public: static const GUID
guid_context_file_properties, guid_context_file_open_directory, guid_context_copy_names,
guid_context_send_to_playlist, guid_context_reload_info, guid_context_reload_info_if_changed,
- guid_context_rewrite_info, guid_context_remove_tags, guid_context_remove_from_database,
+ guid_context_rewrite_info, guid_context_remove_tags,
guid_context_convert_run, guid_context_convert_run_singlefile,guid_context_convert_run_withcue,
guid_context_write_cd,
guid_context_rg_scan_track, guid_context_rg_scan_album, guid_context_rg_scan_album_multi,
@@ -116,7 +116,6 @@ public: static inline bool context_reload_info_if_changed(const pfc::list_base_const_t<metadb_handle_ptr> &data,const GUID& caller = contextmenu_item::caller_undefined) {return run_context(guid_context_reload_info_if_changed,data,caller);}
static inline bool context_rewrite_info(const pfc::list_base_const_t<metadb_handle_ptr> &data,const GUID& caller = contextmenu_item::caller_undefined) {return run_context(guid_context_rewrite_info,data,caller);}
static inline bool context_remove_tags(const pfc::list_base_const_t<metadb_handle_ptr> &data,const GUID& caller = contextmenu_item::caller_undefined) {return run_context(guid_context_remove_tags,data,caller);}
- static inline bool context_remove_from_database(const pfc::list_base_const_t<metadb_handle_ptr> &data,const GUID& caller = contextmenu_item::caller_undefined) {return run_context(guid_context_remove_from_database,data,caller);}
static inline bool context_convert_run(const pfc::list_base_const_t<metadb_handle_ptr> &data,const GUID& caller = contextmenu_item::caller_undefined) {return run_context(guid_context_convert_run,data,caller);}
static inline bool context_convert_run_singlefile(const pfc::list_base_const_t<metadb_handle_ptr> &data,const GUID& caller = contextmenu_item::caller_undefined) {return run_context(guid_context_convert_run_singlefile,data,caller);}
static inline bool context_write_cd(const pfc::list_base_const_t<metadb_handle_ptr> &data,const GUID& caller = contextmenu_item::caller_undefined) {return run_context(guid_context_write_cd,data,caller);}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_item.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_item.cpp index b4e5cbf..053170b 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_item.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_item.cpp @@ -38,3 +38,24 @@ bool contextmenu_item::item_get_display_data(pfc::string_base & p_out,unsigned & }
return status;
}
+
+
+GUID contextmenu_item::get_parent_fallback() {
+ unsigned total = get_num_items();
+ if (total < 1) return pfc::guid_null; // hide the item
+ pfc::string_formatter path, base; this->get_item_default_path(0, base);
+ for(unsigned walk = 1; walk < total; ++walk) {
+ this->get_item_default_path(walk, path);
+ if (strcmp(path, base) != 0) return contextmenu_groups::legacy;
+ }
+ return static_api_ptr_t<contextmenu_group_manager>()->path_to_group(base);
+}
+
+GUID contextmenu_item::get_parent_() {
+ contextmenu_item_v2::ptr v2;
+ if (service_query_t(v2)) {
+ return v2->get_parent();
+ } else {
+ return get_parent_fallback();
+ }
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_manager.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_manager.cpp index ebb8f67..69393b5 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_manager.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/menu_manager.cpp @@ -4,6 +4,7 @@ static void fix_ampersand(const char * src,pfc::string_base & out)
{
+ out.reset();
unsigned ptr = 0;
while(src[ptr])
{
@@ -24,7 +25,8 @@ static void fix_ampersand(const char * src,pfc::string_base & out) static unsigned flags_to_win32(unsigned flags)
{
unsigned ret = 0;
- if (flags & contextmenu_item_node::FLAG_CHECKED) ret |= MF_CHECKED;
+ if (flags & contextmenu_item_node::FLAG_RADIOCHECKED) {/* dealt with elsewhere */}
+ else if (flags & contextmenu_item_node::FLAG_CHECKED) ret |= MF_CHECKED;
if (flags & contextmenu_item_node::FLAG_DISABLED) ret |= MF_DISABLED;
if (flags & contextmenu_item_node::FLAG_GRAYED) ret |= MF_GRAYED;
return ret;
@@ -59,7 +61,10 @@ void contextmenu_manager::win32_build_menu(HMENU menu,contextmenu_node * parent, int id = child->get_id();
if (id>=0 && (max_id<0 || id<max_id))
{
- uAppendMenu(menu,MF_STRING | flags_to_win32(child->get_display_flags()),base_id+id,name);
+ const unsigned flags = child->get_display_flags();
+ const UINT ID = base_id+id;
+ uAppendMenu(menu,MF_STRING | flags_to_win32(flags),ID,name);
+ if (flags & contextmenu_item_node::FLAG_RADIOCHECKED) CheckMenuRadioItem(menu,ID,ID,ID,MF_BYCOMMAND);
}
}
}
@@ -69,12 +74,16 @@ void contextmenu_manager::win32_build_menu(HMENU menu,contextmenu_node * parent, #endif
-bool contextmenu_manager::execute_by_id(unsigned id)
-{
- bool rv = false;
+bool contextmenu_manager::get_description_by_id(unsigned id,pfc::string_base & out) {
+ contextmenu_node * ptr = find_by_id(id);
+ if (ptr == NULL) return false;
+ return ptr->get_description(out);
+}
+bool contextmenu_manager::execute_by_id(unsigned id) {
contextmenu_node * ptr = find_by_id(id);
- if (ptr) {rv=true;ptr->execute();}
- return rv;
+ if (ptr == NULL) return false;
+ ptr->execute();
+ return true;
}
#ifdef WIN32
@@ -135,7 +144,7 @@ namespace { bool is_used(unsigned c)
{
char temp[8];
- temp[pfc::utf8_encode_char(char_lower(c),temp)]=0;
+ temp[pfc::utf8_encode_char(uCharLower(c),temp)]=0;
return !!strstr(used,temp);
}
@@ -153,7 +162,7 @@ namespace { out.add_string(src,idx);
out.add_string("&");
out.add_string(src+idx);
- used.add_char(char_lower(src[idx]));
+ used.add_char(uCharLower(src[idx]));
}
public:
bool check_string(const char * src)
@@ -165,9 +174,9 @@ namespace { else
{
unsigned c = 0;
- if (pfc::utf8_decode_char(ptr+1,&c)>0)
+ if (pfc::utf8_decode_char(ptr+1,c)>0)
{
- if (!is_used(c)) used.add_char(char_lower(c));
+ if (!is_used(c)) used.add_char(uCharLower(c));
}
return true;
}
@@ -260,9 +269,8 @@ static bool test_key(unsigned k) #define F_ALT (HOTKEYF_ALT<<8)
#define F_WIN (HOTKEYF_EXT<<8)
-static unsigned get_key_code(WPARAM wp)
-{
- unsigned code = (unsigned)(wp & 0xFF);
+static t_uint32 get_key_code(WPARAM wp) {
+ t_uint32 code = (t_uint32)(wp & 0xFF);
if (test_key(VK_CONTROL)) code|=F_CTRL;
if (test_key(VK_SHIFT)) code|=F_SHIFT;
if (test_key(VK_MENU)) code|=F_ALT;
@@ -270,6 +278,15 @@ static unsigned get_key_code(WPARAM wp) return code;
}
+static t_uint32 get_key_code(WPARAM wp, t_uint32 mods) {
+ t_uint32 code = (t_uint32)(wp & 0xFF);
+ if (mods & MOD_CONTROL) code|=F_CTRL;
+ if (mods & MOD_SHIFT) code|=F_SHIFT;
+ if (mods & MOD_ALT) code|=F_ALT;
+ if (mods & MOD_WIN) code|=F_WIN;
+ return code;
+}
+
bool keyboard_shortcut_manager::on_keydown(shortcut_type type,WPARAM wp)
{
if (type==TYPE_CONTEXT) return false;
@@ -305,3 +322,89 @@ bool keyboard_shortcut_manager::on_keydown_auto_context(const pfc::list_base_con else return on_keydown_auto(wp);
}
+static bool should_relay_key_restricted(UINT p_key) {
+ switch(p_key) {
+ case VK_LEFT:
+ case VK_RIGHT:
+ case VK_UP:
+ case VK_DOWN:
+ return false;
+ default:
+ return (p_key >= VK_F1 && p_key <= VK_F24) || IsKeyPressed(VK_CONTROL) || IsKeyPressed(VK_LWIN) || IsKeyPressed(VK_RWIN);
+ }
+}
+
+bool keyboard_shortcut_manager::on_keydown_restricted_auto(WPARAM wp) {
+ if (!should_relay_key_restricted(wp)) return false;
+ return on_keydown_auto(wp);
+}
+bool keyboard_shortcut_manager::on_keydown_restricted_auto_playlist(WPARAM wp) {
+ if (!should_relay_key_restricted(wp)) return false;
+ return on_keydown_auto_playlist(wp);
+}
+bool keyboard_shortcut_manager::on_keydown_restricted_auto_context(const pfc::list_base_const_t<metadb_handle_ptr> & data,WPARAM wp,const GUID & caller) {
+ if (!should_relay_key_restricted(wp)) return false;
+ return on_keydown_auto_context(data,wp,caller);
+}
+
+static bool filterTypableWindowMessage(const MSG * msg, t_uint32 modifiers) {
+ if (keyboard_shortcut_manager::is_typing_key_combo((t_uint32)msg->wParam, modifiers)) {
+ try {
+ if (static_api_ptr_t<ui_element_typable_window_manager>()->is_registered(msg->hwnd)) return false;
+ } catch(exception_service_not_found) {}
+ }
+ return true;
+}
+
+bool keyboard_shortcut_manager_v2::pretranslate_message(const MSG * msg, HWND thisPopupWnd) {
+ switch(msg->message) {
+ case WM_KEYDOWN:
+ case WM_SYSKEYDOWN:
+ if (thisPopupWnd != NULL && FindOwningPopup(msg->hwnd) == thisPopupWnd) {
+ const t_uint32 modifiers = GetHotkeyModifierFlags();
+ if (filterTypableWindowMessage(msg, modifiers)) {
+ if (process_keydown_simple(get_key_code(msg->wParam,modifiers))) return true;
+ }
+ }
+ return false;
+ default:
+ return false;
+ }
+}
+
+bool keyboard_shortcut_manager::is_text_key(t_uint32 vkCode) {
+ return vkCode == VK_SPACE
+ || (vkCode >= '0' && vkCode < 0x40)
+ || (vkCode > 0x40 && vkCode < VK_LWIN)
+ || (vkCode >= VK_NUMPAD0 && vkCode <= VK_DIVIDE)
+ || (vkCode >= VK_OEM_1 && vkCode <= VK_OEM_3)
+ || (vkCode >= VK_OEM_4 && vkCode <= VK_OEM_8)
+ ;
+}
+
+bool keyboard_shortcut_manager::is_typing_key(t_uint32 vkCode) {
+ return is_text_key(vkCode)
+ || vkCode == VK_BACK
+ || vkCode == VK_RETURN
+ || vkCode == VK_INSERT
+ || (vkCode > VK_SPACE && vkCode < '0');
+}
+
+bool keyboard_shortcut_manager::is_typing_key_combo(t_uint32 vkCode, t_uint32 modifiers) {
+ if (!is_typing_modifier(modifiers)) return false;
+ return is_typing_key(vkCode);
+}
+
+bool keyboard_shortcut_manager::is_typing_modifier(t_uint32 flags) {
+ flags &= ~MOD_SHIFT;
+ return flags == 0 || flags == (MOD_ALT | MOD_CONTROL);
+}
+
+bool keyboard_shortcut_manager::is_typing_message(HWND editbox, const MSG * msg) {
+ if (msg->hwnd != editbox) return false;
+ return is_typing_message(msg);
+}
+bool keyboard_shortcut_manager::is_typing_message(const MSG * msg) {
+ if (msg->message != WM_KEYDOWN && msg->message != WM_SYSKEYDOWN) return false;
+ return is_typing_key_combo(msg->wParam, GetHotkeyModifierFlags());
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/message_loop.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/message_loop.h index a5ad203..1b2181d 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/message_loop.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/message_loop.h @@ -4,12 +4,11 @@ public: virtual bool pretranslate_message(MSG * p_msg) = 0;
};
-class NOVTABLE idle_handler
-{
+class NOVTABLE idle_handler {
public:
virtual bool on_idle() = 0;
};
-
+
class NOVTABLE message_loop : public service_base
{
public:
@@ -22,9 +21,25 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(message_loop);
};
+class NOVTABLE message_loop_v2 : public message_loop {
+public:
+ virtual void add_message_filter_ex(message_filter * ptr, t_uint32 lowest, t_uint32 highest) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(message_loop_v2, message_loop);
+};
+
class message_filter_impl_base : public message_filter {
public:
message_filter_impl_base() {static_api_ptr_t<message_loop>()->add_message_filter(this);}
+ message_filter_impl_base(t_uint32 lowest, t_uint32 highest) {
+ static_api_ptr_t<message_loop> api;
+ message_loop_v2::ptr apiV2;
+ if (api->service_query_t(apiV2)) {
+ apiV2->add_message_filter_ex(this, lowest, highest);
+ } else {
+ api->add_message_filter(this);
+ }
+ }
~message_filter_impl_base() {static_api_ptr_t<message_loop>()->remove_message_filter(this);}
bool pretranslate_message(MSG * p_msg) {return false;}
@@ -54,3 +69,29 @@ private: PFC_CLASS_NOT_COPYABLE(message_filter_impl_accel,message_filter_impl_accel);
};
+
+class message_filter_remap_f1 : public message_filter_impl_base {
+public:
+ bool pretranslate_message(MSG * p_msg) {
+ if (IsOurMsg(p_msg) && m_wnd != NULL && GetActiveWindow() == m_wnd) {
+ ::PostMessage(m_wnd, WM_SYSCOMMAND, SC_CONTEXTHELP, -1);
+ return true;
+ }
+ return false;
+ }
+ void set_wnd(HWND wnd) {m_wnd = wnd;}
+private:
+ static bool IsOurMsg(const MSG * msg) {
+ return msg->message == WM_KEYDOWN && msg->wParam == VK_F1;
+ }
+ HWND m_wnd;
+};
+
+class idle_handler_impl_base : public idle_handler {
+public:
+ idle_handler_impl_base() {static_api_ptr_t<message_loop>()->add_idle_handler(this);}
+ ~idle_handler_impl_base() {static_api_ptr_t<message_loop>()->remove_idle_handler(this);}
+ bool on_idle() {return true;}
+
+ PFC_CLASS_NOT_COPYABLE_EX(idle_handler_impl_base)
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb.cpp index 4628ddb..98d7c5b 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb.cpp @@ -28,106 +28,6 @@ metadb_io::t_update_info_state metadb_io::update_info(metadb_handle_ptr p_item,f return update_info_multi(pfc::list_single_ref_t<metadb_handle_ptr>(p_item),pfc::list_single_ref_t<file_info*>(blah),p_parent_window,p_show_errors);
}
-file_info_update_helper::file_info_update_helper(metadb_handle_ptr p_item)
-{
- const t_size count = 1;
- m_data.add_item(p_item);
-
- m_infos.set_size(count);
- m_mask.set_size(count);
- for(t_size n=0;n<count;n++) m_mask[n] = false;
-}
-
-file_info_update_helper::file_info_update_helper(const pfc::list_base_const_t<metadb_handle_ptr> & p_data)
-{
- const t_size count = p_data.get_count();
- m_data.add_items(p_data);
-
- m_infos.set_size(count);
- m_mask.set_size(count);
- for(t_size n=0;n<count;n++) m_mask[n] = false;
-}
-
-bool file_info_update_helper::read_infos(HWND p_parent,bool p_show_errors)
-{
- static_api_ptr_t<metadb_io> api;
- if (api->load_info_multi(m_data,metadb_io::load_info_default,p_parent,p_show_errors) != metadb_io::load_info_success) return false;
- t_size n; const t_size m = m_data.get_count();
- t_size loaded_count = 0;
- for(n=0;n<m;n++)
- {
- bool val = m_data[n]->get_info(m_infos[n]);
- if (val) loaded_count++;
- m_mask[n] = val;
- }
- return loaded_count == m;
-}
-
-file_info_update_helper::t_write_result file_info_update_helper::write_infos(HWND p_parent,bool p_show_errors)
-{
- t_size n, outptr = 0; const t_size count = m_data.get_count();
- pfc::array_t<metadb_handle_ptr> items_to_update;
- pfc::array_t<file_info *> infos_to_write;
- items_to_update.set_size(count);
- infos_to_write.set_size(count);
-
- for(n=0;n<count;n++)
- {
- if (m_mask[n])
- {
- items_to_update[outptr] = m_data[n];
- infos_to_write[outptr] = &m_infos[n];
- outptr++;
- }
- }
-
- if (outptr == 0) return write_ok;
- else
- {
- static_api_ptr_t<metadb_io> api;
- switch(api->update_info_multi(
- pfc::list_const_array_t<metadb_handle_ptr,const pfc::array_t<metadb_handle_ptr>&>(items_to_update,outptr),
- pfc::list_const_array_t<file_info*,const pfc::array_t<file_info*>&>(infos_to_write,outptr),
- p_parent,
- true
- ))
- {
- case metadb_io::update_info_success:
- return write_ok;
- case metadb_io::update_info_aborted:
- return write_aborted;
- default:
- case metadb_io::update_info_errors:
- return write_error;
- }
- }
-}
-
-t_size file_info_update_helper::get_item_count() const
-{
- return m_data.get_count();
-}
-
-bool file_info_update_helper::is_item_valid(t_size p_index) const
-{
- return m_mask[p_index];
-}
-
-file_info & file_info_update_helper::get_item(t_size p_index)
-{
- return m_infos[p_index];
-}
-
-metadb_handle_ptr file_info_update_helper::get_item_handle(t_size p_index) const
-{
- return m_data[p_index];
-}
-
-void file_info_update_helper::invalidate_item(t_size p_index)
-{
- m_mask[p_index] = false;
-}
-
void metadb_io::hint_async(metadb_handle_ptr p_item,const file_info & p_info,const t_filestats & p_stats,bool p_fresh)
{
@@ -144,7 +44,7 @@ bool metadb::g_get_random_handle(metadb_handle_ptr & p_out) { t_size playlist_count = api->get_playlist_count();
t_size active_playlist = api->get_active_playlist();
- if (active_playlist != infinite) {
+ if (active_playlist != ~0) {
if (api->playlist_get_focus_item_handle(p_out,active_playlist)) return true;
}
@@ -152,7 +52,7 @@ bool metadb::g_get_random_handle(metadb_handle_ptr & p_out) { if (api->playlist_get_focus_item_handle(p_out,n)) return true;
}
- if (active_playlist != infinite) {
+ if (active_playlist != ~0) {
t_size item_count = api->playlist_get_item_count(active_playlist);
if (item_count > 0) {
if (api->playlist_get_item_handle(p_out,active_playlist,0)) return true;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb.h index 525570c..99079ab 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb.h @@ -1,7 +1,4 @@ -#ifndef _METADB_H_
-#define _METADB_H_
-
-//! API for tag read/write operations. Legal to call from main thread only, except for hint_multi_async() / hint_async().\n
+//! API for tag read/write operations. Legal to call from main thread only, except for hint_multi_async() / hint_async() / hint_reader().\n
//! Implemented only by core, do not reimplement.\n
//! Use static_api_ptr_t template to access metadb_io methods.\n
//! WARNING: Methods that perform file access (tag reads/writes) run a modal message loop. They SHOULD NOT be called from global callbacks and such.
@@ -26,34 +23,36 @@ public: load_info_errors,
};
- //! Returns whether some tag I/O operation is currently running. Another one can't be started.
+ //! No longer used - returns false always.
__declspec(deprecated) virtual bool is_busy() = 0;
- //! Returns whether - in result of user settings - all update operations will fail.
+ //! No longer used - returns false always.
__declspec(deprecated) virtual bool is_updating_disabled() = 0;
- //! Returns whether - in result of user settings - all update operations will silently succeed but without actually modifying files.
+ //! No longer used - returns false always.
__declspec(deprecated) virtual bool is_file_updating_blocked() = 0;
- //! If another tag I/O operation is running, this call will give focus to its progress window.
+ //! No longer used.
__declspec(deprecated) virtual void highlight_running_process() = 0;
- //! Loads tags from multiple items.
- __declspec(deprecated) virtual t_load_info_state load_info_multi(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_load_info_type p_type,HWND p_parent_window,bool p_show_errors) = 0;
- //! Updates tags on multiple items.
- __declspec(deprecated) virtual t_update_info_state update_info_multi(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,const pfc::list_base_const_t<file_info*> & p_new_info,HWND p_parent_window,bool p_show_errors) = 0;
- //! Rewrites tags on multiple items.
- __declspec(deprecated) virtual t_update_info_state rewrite_info_multi(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,HWND p_parent_window,bool p_show_errors) = 0;
- //! Removes tags from multiple items.
- __declspec(deprecated) virtual t_update_info_state remove_info_multi(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,HWND p_parent_window,bool p_show_errors) = 0;
+ //! Loads tags from multiple items. Use the async version in metadb_io_v2 instead if possible.
+ __declspec(deprecated) virtual t_load_info_state load_info_multi(metadb_handle_list_cref p_list,t_load_info_type p_type,HWND p_parent_window,bool p_show_errors) = 0;
+ //! Updates tags on multiple items. Use the async version in metadb_io_v2 instead if possible.
+ __declspec(deprecated) virtual t_update_info_state update_info_multi(metadb_handle_list_cref p_list,const pfc::list_base_const_t<file_info*> & p_new_info,HWND p_parent_window,bool p_show_errors) = 0;
+ //! Rewrites tags on multiple items. Use the async version in metadb_io_v2 instead if possible.
+ __declspec(deprecated) virtual t_update_info_state rewrite_info_multi(metadb_handle_list_cref p_list,HWND p_parent_window,bool p_show_errors) = 0;
+ //! Removes tags from multiple items. Use the async version in metadb_io_v2 instead if possible.
+ __declspec(deprecated) virtual t_update_info_state remove_info_multi(metadb_handle_list_cref p_list,HWND p_parent_window,bool p_show_errors) = 0;
- virtual void hint_multi(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,const pfc::list_base_const_t<const file_info*> & p_infos,const pfc::list_base_const_t<t_filestats> & p_stats,const bit_array & p_fresh_mask) = 0;
+ virtual void hint_multi(metadb_handle_list_cref p_list,const pfc::list_base_const_t<const file_info*> & p_infos,const pfc::list_base_const_t<t_filestats> & p_stats,const bit_array & p_fresh_mask) = 0;
- virtual void hint_multi_async(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,const pfc::list_base_const_t<const file_info*> & p_infos,const pfc::list_base_const_t<t_filestats> & p_stats,const bit_array & p_fresh_mask) = 0;
+ virtual void hint_multi_async(metadb_handle_list_cref p_list,const pfc::list_base_const_t<const file_info*> & p_infos,const pfc::list_base_const_t<t_filestats> & p_stats,const bit_array & p_fresh_mask) = 0;
virtual void hint_reader(service_ptr_t<class input_info_reader> p_reader,const char * p_path,abort_callback & p_abort) = 0;
//! For internal use only.
- virtual void path_to_handles_simple(const char * p_path,pfc::list_base_t<metadb_handle_ptr> & p_out) = 0;
+ virtual void path_to_handles_simple(const char * p_path, metadb_handle_list_ref p_out) = 0;
+
+ //! Dispatches metadb_io_callback calls with specified items. To be used with metadb_display_field_provider when your component needs specified items refreshed.
+ virtual void dispatch_refresh(metadb_handle_list_cref p_list) = 0;
- //! Dispatches metadb_io_callback calls with specified items. To be used with metadb_display_hook when your component needs specified items refreshed.
- virtual void dispatch_refresh(const pfc::list_base_const_t<metadb_handle_ptr> & p_list) = 0;
+ void dispatch_refresh(metadb_handle_ptr const & handle) {dispatch_refresh(pfc::list_single_ref_t<metadb_handle_ptr>(handle));}
void hint_async(metadb_handle_ptr p_item,const file_info & p_info,const t_filestats & p_stats,bool p_fresh);
@@ -90,6 +89,13 @@ public: FB2K_MAKE_SERVICE_INTERFACE(metadb_hint_list,service_base);
};
+//! \since 1.0
+class NOVTABLE metadb_hint_list_v2 : public metadb_hint_list {
+public:
+ virtual void add_hint_browse(metadb_handle_ptr const & p_location,const file_info & p_info, t_filetimestamp browseTS) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(metadb_hint_list_v2, metadb_hint_list);
+};
//! New in 0.9.3. Extends metadb_io functionality with nonblocking versions of tag read/write functions, and some other utility features.
class NOVTABLE metadb_io_v2 : public metadb_io {
@@ -104,47 +110,89 @@ public: op_flag_delay_ui = 1 << 2,
};
+ //! Preloads information from the specified tracks.
//! @param p_list List of items to process.
//! @param p_op_flags Can be null, or one or more of op_flag_* enum values combined, altering behaviors of the operation.
//! @param p_notify Called when the task is completed. Status code is one of t_load_info_state values. Can be null if caller doesn't care.
- virtual void load_info_async(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_load_info_type p_type,HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify) = 0;
+ virtual void load_info_async(metadb_handle_list_cref p_list,t_load_info_type p_type,HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify) = 0;
+ //! Updates tags of the specified tracks.
//! @param p_list List of items to process.
//! @param p_op_flags Can be null, or one or more of op_flag_* enum values combined, altering behaviors of the operation.
//! @param p_notify Called when the task is completed. Status code is one of t_update_info values. Can be null if caller doesn't care.
//! @param p_filter Callback handling actual file_info alterations. Typically used to replace entire meta part of file_info, or to alter something else such as ReplayGain while leaving meta intact.
- virtual void update_info_async(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,service_ptr_t<file_info_filter> p_filter,HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify) = 0;
+ virtual void update_info_async(metadb_handle_list_cref p_list,service_ptr_t<file_info_filter> p_filter,HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify) = 0;
+ //! Rewrites tags of the specified tracks; similar to update_info_async() but using last known/cached file_info values rather than values passed by caller.
//! @param p_list List of items to process.
//! @param p_op_flags Can be null, or one or more of op_flag_* enum values combined, altering behaviors of the operation.
//! @param p_notify Called when the task is completed. Status code is one of t_update_info values. Can be null if caller doesn't care.
- virtual void rewrite_info_async(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify) = 0;
+ virtual void rewrite_info_async(metadb_handle_list_cref p_list,HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify) = 0;
+ //! Strips all tags / metadata fields from the specified tracks.
//! @param p_list List of items to process.
//! @param p_op_flags Can be null, or one or more of op_flag_* enum values combined, altering behaviors of the operation.
//! @param p_notify Called when the task is completed. Status code is one of t_update_info values. Can be null if caller doesn't care.
- virtual void remove_info_async(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify) = 0;
+ virtual void remove_info_async(metadb_handle_list_cref p_list,HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify) = 0;
//! Creates a metadb_hint_list object.
- virtual service_ptr_t<metadb_hint_list> create_hint_list() = 0;
+ virtual metadb_hint_list::ptr create_hint_list() = 0;
+ //! Updates tags of the specified tracks. Helper; uses update_info_async internally.
//! @param p_list List of items to process.
//! @param p_op_flags Can be null, or one or more of op_flag_* enum values combined, altering behaviors of the operation.
//! @param p_notify Called when the task is completed. Status code is one of t_update_info values. Can be null if caller doesn't care.
//! @param p_new_info New infos to write to specified items.
- void update_info_async_simple(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,const pfc::list_base_const_t<const file_info*> & p_new_info, HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify);
+ void update_info_async_simple(metadb_handle_list_cref p_list,const pfc::list_base_const_t<const file_info*> & p_new_info, HWND p_parent_window,t_uint32 p_op_flags,completion_notify_ptr p_notify);
FB2K_MAKE_SERVICE_INTERFACE(metadb_io_v2,metadb_io);
};
+
+//! Dynamically-registered version of metadb_io_callback. See metadb_io_callback for documentation, register instances using metadb_io_v3::register_callback(). It's recommended that you use the metadb_io_callback_dynamic_impl_base helper class to manage registration/unregistration.
+class NOVTABLE metadb_io_callback_dynamic {
+public:
+ virtual void on_changed_sorted(metadb_handle_list_cref p_items_sorted, bool p_fromhook) = 0;
+};
+
+//! New (0.9.5)
+class NOVTABLE metadb_io_v3 : public metadb_io_v2 {
+public:
+ virtual void register_callback(metadb_io_callback_dynamic * p_callback) = 0;
+ virtual void unregister_callback(metadb_io_callback_dynamic * p_callback) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(metadb_io_v3,metadb_io_v2);
+};
+
+//! metadb_io_callback_dynamic implementation helper.
+class metadb_io_callback_dynamic_impl_base : public metadb_io_callback_dynamic {
+public:
+ void on_changed_sorted(metadb_handle_list_cref p_items_sorted, bool p_fromhook) {}
+
+ metadb_io_callback_dynamic_impl_base() {static_api_ptr_t<metadb_io_v3>()->register_callback(this);}
+ ~metadb_io_callback_dynamic_impl_base() {static_api_ptr_t<metadb_io_v3>()->unregister_callback(this);}
+
+ PFC_CLASS_NOT_COPYABLE_EX(metadb_io_callback_dynamic_impl_base)
+};
//! Callback service receiving notifications about metadb contents changes.
class NOVTABLE metadb_io_callback : public service_base {
public:
//! Called when metadb contents change. (Or, one of display hook component requests display update).
//! @param p_items_sorted List of items that have been updated. The list is always sorted by pointer value, to allow fast bsearch to test whether specific item has changed.
- //! @param p_fromhook Set to true when actual contents haven't changed but one of display hooks requested an update.
- virtual void on_changed_sorted(const pfc::list_base_const_t<metadb_handle_ptr> & p_items_sorted, bool p_fromhook) = 0;
+ //! @param p_fromhook Set to true when actual file contents haven't changed but one of metadb_display_field_provider implementations requested an update so output of metadb_handle::format_title() etc has changed.
+ virtual void on_changed_sorted(metadb_handle_list_cref p_items_sorted, bool p_fromhook) = 0;
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(metadb_io_callback);
};
+//! \since 1.1
+//! Callback service receiving notifications about user-triggered tag edits. \n
+//! You want to use metadb_io_callback instead most of the time, unless you specifically want to track tag edits for purposes other than updating user interface.
+class NOVTABLE metadb_io_edit_callback : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(metadb_io_edit_callback)
+public:
+ //! Called after the user has edited tags on a set of files.
+ typedef const pfc::list_base_const_t<const file_info*> & t_infosref;
+ virtual void on_edited(metadb_handle_list_cref items, t_infosref before, t_infosref after) = 0;
+};
+
//! Entrypoint service for metadb_handle related operations.\n
//! Implemented only by core, do not reimplement.\n
//! Use static_api_ptr_t template to access it, e.g. static_api_ptr_t<metadb>()->handle_create(myhandle,mylocation);
@@ -156,9 +204,11 @@ public: //! Unlocks metadb after database_lock(). Some functions (metadb_handle::get_info_locked(), metadb_handle::get_info_async_locked()) can be called only from inside metadb lock section.
virtual void database_unlock()=0;
- //! Returns metadb_handle object referencing specified location (attempts to find existing one, creates new one if doesn't exist).
- //! @param p_out Receives metadb_handle pointer.
- //! @param p_location Location to create metadb_handle for.
+ //! Returns a metadb_handle object referencing the specified location. If one doesn't exist yet a new one is created. There can be only one metadb_handle object referencing specific location. \n
+ //! This function should never fail unless there's something critically wrong (can't allocate memory for the new object, etc). \n
+ //! Speed: O(log(n)) to total number of metadb_handles present. It's recommended to pass metadb_handles around whenever possible rather than pass playable_locations then retrieve metadb_handles on demand when needed.
+ //! @param p_out Receives the metadb_handle pointer.
+ //! @param p_location Location to create a metadb_handle for.
virtual void handle_create(metadb_handle_ptr & p_out,const playable_location & p_location)=0;
void handle_create_replace_path_canonical(metadb_handle_ptr & p_out,const metadb_handle_ptr & p_source,const char * p_new_path);
@@ -172,14 +222,14 @@ public: enum {case_sensitive = true};
typedef pfc::comparator_strcmp path_comparator;
- inline static int path_compare_ex(const char * p1,unsigned len1,const char * p2,unsigned len2) {return case_sensitive ? pfc::strcmp_ex(p1,len1,p2,len2) : stricmp_utf8_ex(p1,len1,p2,len2);}
+ inline static int path_compare_ex(const char * p1,t_size len1,const char * p2,t_size len2) {return case_sensitive ? pfc::strcmp_ex(p1,len1,p2,len2) : stricmp_utf8_ex(p1,len1,p2,len2);}
inline static int path_compare(const char * p1,const char * p2) {return case_sensitive ? strcmp(p1,p2) : stricmp_utf8(p1,p2);}
inline static int path_compare_metadb_handle(const metadb_handle_ptr & p1,const metadb_handle_ptr & p2) {return path_compare(p1->get_path(),p2->get_path());}
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(metadb);
};
-
+//! Metadb lock sync helper. For use around metadb_handle "locked" methods.
class in_metadb_sync {
public:
in_metadb_sync() {
@@ -192,6 +242,7 @@ private: static_api_ptr_t<metadb> m_api;
};
+//! Metadb lock sync helper. For use around metadb_handle "locked" methods.
class in_metadb_sync_fromptr {
public:
in_metadb_sync_fromptr(const service_ptr_t<metadb> & p_api) : m_api(p_api) {m_api->database_lock();}
@@ -200,6 +251,7 @@ private: service_ptr_t<metadb> m_api;
};
+//! Metadb lock sync helper. For use around metadb_handle "locked" methods.
class in_metadb_sync_fromhandle {
public:
in_metadb_sync_fromhandle(const service_ptr_t<metadb_handle> & p_api) : m_api(p_api) {m_api->metadb_lock();}
@@ -208,65 +260,44 @@ private: service_ptr_t<metadb_handle> m_api;
};
-
-//! Deprecated - use metadb_io_v2::update_info_async w/ file_info_filter whenever possible.
-class __declspec(deprecated("Use metadb_io_v2::update_info_async instead whenever possible.")) file_info_update_helper
-{
-public:
- file_info_update_helper(const pfc::list_base_const_t<metadb_handle_ptr> & p_data);
- file_info_update_helper(metadb_handle_ptr p_item);
-
- bool read_infos(HWND p_parent,bool p_show_errors);
-
- enum t_write_result
- {
- write_ok,
- write_aborted,
- write_error
- };
- t_write_result write_infos(HWND p_parent,bool p_show_errors);
-
- t_size get_item_count() const;
- bool is_item_valid(t_size p_index) const;//returns false where info reading failed
-
- file_info & get_item(t_size p_index);
- metadb_handle_ptr get_item_handle(t_size p_index) const;
-
- void invalidate_item(t_size p_index);
-
-private:
- metadb_handle_list m_data;
- pfc::array_t<file_info_impl> m_infos;
- pfc::array_t<bool> m_mask;
-};
-
class titleformat_text_out;
class titleformat_hook_function_params;
-/*
- Implementing this service installs a global hook for metadb_handle::format_title field processing. \n
- This should be implemented only where absolutely necessary, for safety and performance reasons. \n
- metadb_display_hook methods should NEVER make any other API calls (other than possibly querying information from passed metadb_handle pointer), only read implementation-specific private data and return as soon as possible. Since those are called from metadb_handle::format_title, no assumptions should be made about calling context (threading etc). \n
- Both methods are called from inside metadb lock, so no additional locking is required to use *_locked metadb_handle methods.
- See titleformat_hook for more info about methods/parameters. \n
- If there are multiple metadb_display_hook implementations registered, call order is undefined.
+/*!
+ Implementing this service lets you provide your own title-formatting fields that are parsed globally with each call to metadb_handle::format_title methods. \n
+ Note that this API is meant to allow you to add your own component-specific fields - not to overlay your data over standard fields or over fields provided by other components. Any attempts to interfere with standard fields will have severe ill effects. \n
+ This should be implemented only where absolutely necessary, for safety and performance reasons. Any expensive operations inside the process_field() method may severely damage performance of affected title-formatting calls. \n
+ You must NEVER make any other foobar2000 API calls from inside process_field, other than possibly querying information from the passed metadb_handle pointer; you should read your own implementation-specific private data and return as soon as possible. You must not make any assumptions about calling context (threading etc). \n
+ It is guaranteed that process_field() is called only inside a metadb lock scope so you can safely call "locked" metadb_handle methods on the metadb_handle pointer you get. You must not lock metadb by yourself inside process_field() - while it is always called from inside a metadb lock scope, it may be called from another thread than the one maintaining the lock because of multi-CPU optimizations active. \n
+ If there are multiple metadb_display_field_provider services registered providing fields of the same name, the behavior is undefined. You must pick unique names for provided fields to ensure safe coexistence with other people's components. \n
+ IMPORTANT: Any components implementing metadb_display_field_provider MUST call metadb_io::dispatch_refresh() with affected metadb_handles whenever info that they present changes. Otherwise, anything rendering title-formatting strings that reference your data will not update properly, resulting in unreliable/broken output, repaint glitches, etc. \n
+ Do not expect a process_field() call each time somebody uses title formatting, calling code might perform its own caching of strings that you return, getting new ones only after metadb_io::dispatch_refresh() with relevant items. \n
+ If you can't reliably notify other components about changes of content of fields that you provide (such as when your fields provide some kind of global information and not information specific to item identified by passed metadb_handle), you should not be providing those fields in first place. You must not change returned values of your fields without dispatching appropriate notifications. \n
+ Use static service_factory_single_t<myclass> to register your metadb_display_field_provider implementations. Do not call other people's metadb_display_field_provider services directly, they're meant to be called by backend only. \n
+ List of fields that you provide is expected to be fixed at run-time. The backend will enumerate your fields only once and refer to them by indexes later. \n
*/
-class metadb_display_hook : public service_base {
+class NOVTABLE metadb_display_field_provider : public service_base {
public:
- virtual bool process_field(metadb_handle * p_handle,titleformat_text_out * p_out,const char * p_name,t_size p_name_length,bool & p_found_flag) = 0;
- virtual bool process_function(metadb_handle * p_handle,titleformat_text_out * p_out,const char * p_name,t_size p_name_length,titleformat_hook_function_params * p_params,bool & p_found_flag) = 0;
-
- FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(metadb_display_hook);
+ //! Returns number of fields provided by this metadb_display_field_provider implementation.
+ virtual t_uint32 get_field_count() = 0;
+ //! Returns name of specified field provided by this metadb_display_field_provider implementation. Names are not case sensitive. It's strongly recommended that you keep your field names plain English / ASCII only.
+ virtual void get_field_name(t_uint32 index, pfc::string_base & out) = 0;
+ //! Evaluates the specified field.
+ //! @param index Index of field being processed : 0 <= index < get_field_count().
+ //! @param handle Handle to item being processed. You can safely call "locked" methods on this handle to retrieve track information and such.
+ //! @param out Interface receiving your text output.
+ //! @returns Return true to indicate that the field is present so if it's enclosed in square brackets, contents of those brackets should not be skipped, false otherwise.
+ virtual bool process_field(t_uint32 index, metadb_handle * handle, titleformat_text_out * out) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(metadb_display_field_provider);
};
-
-
//! Helper implementation of file_info_filter_impl.
class file_info_filter_impl : public file_info_filter {
public:
@@ -298,4 +329,74 @@ private: pfc::array_t<file_info_impl> m_infos;
};
-#endif
\ No newline at end of file +
+//! \since 1.1
+// typedef hasher_md5_result metadb_index_hash;
+typedef t_uint64 metadb_index_hash;
+
+
+//! \since 1.1
+class NOVTABLE metadb_index_client : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(metadb_index_client, service_base)
+public:
+ virtual metadb_index_hash transform(const file_info & info, const playable_location & location) = 0;
+
+ bool hashHandleLocked(metadb_handle_ptr const & h, metadb_index_hash & out) {
+ const file_info * i;
+ if (!h->get_info_locked(i)) return false;
+ out = transform(*i, h->get_location());
+ return true;
+ }
+
+ static metadb_index_hash from_md5(hasher_md5_result const & in) {return in.xorHalve();}
+};
+
+//! \since 1.1
+class NOVTABLE metadb_index_manager : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(metadb_index_manager)
+public:
+ virtual void add(metadb_index_client::ptr client, const GUID & index_id, t_filetimestamp userDataRetentionPeriod) = 0;
+ virtual void remove(const GUID & index_id) = 0;
+ virtual void set_user_data(const GUID & index_id, const metadb_index_hash & hash, const void * data, t_size dataSize) = 0;
+ virtual void get_user_data(const GUID & index_id, const metadb_index_hash & hash, mem_block_container & out) = 0;
+
+
+ template<typename t_array> void get_user_data_t(const GUID & index_id, const metadb_index_hash & hash, t_array & out) {
+ mem_block_container_ref_impl<t_array> ref(out);
+ get_user_data(index_id, hash, ref);
+ }
+
+ t_size get_user_data_here(const GUID & index_id, const metadb_index_hash & hash, void * out, t_size outSize) {
+ mem_block_container_temp_impl ref(out, outSize);
+ get_user_data(index_id, hash, ref);
+ return ref.get_size();
+ }
+
+ virtual void dispatch_refresh(const GUID & index_id, const pfc::list_base_const_t<metadb_index_hash> & hashes) = 0;
+
+ void dispatch_refresh(const GUID & index_id, const metadb_index_hash & hash) {
+ pfc::list_single_ref_t<metadb_index_hash> l(hash);
+ dispatch_refresh(index_id, l);
+ }
+
+ virtual void dispatch_global_refresh() = 0;
+
+ //! Efficiently retrieves metadb_handles of items present in the Media Library matching the specified index value. \n
+ //! This can be called from the app main thread only (interfaces with the library_manager API).
+ virtual void get_ML_handles(const GUID & index_id, const metadb_index_hash & hash, metadb_handle_list_ref out) = 0;
+
+ //! Retrieves all known hash values for this index.
+ virtual void get_all_hashes(const GUID & index_id, pfc::list_base_t<metadb_index_hash> & out) = 0;
+
+ //! Determines whether a no longer needed user data file for this index exists. \n
+ //! For use with index IDs that are not currently registered only.
+ virtual bool have_orphaned_data(const GUID & index_id) = 0;
+
+ //! Deletes no longer needed index user data files. \n
+ //! For use with index IDs that are not currently registered only.
+ virtual void erase_orphaned_data(const GUID & index_id) = 0;
+
+ //! Saves index user data file now. You normally don't need to call this; it's done automatically when saving foobar2000 configuration. \n
+ //! This will throw exceptions in case of a failure (out of disk space etc).
+ virtual void save_index_data(const GUID & index_id) = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb_handle.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb_handle.h index 5ab3c2b..eb5ac54 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb_handle.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb_handle.h @@ -1,13 +1,10 @@ -#ifndef _FOOBAR2000_METADB_HANDLE_H_
-#define _FOOBAR2000_METADB_HANDLE_H_
-
class titleformat_hook;
class titleformat_text_filter;
-//! metadb_handle object represents interface to reference-counted file_info cache entry for specified location.\n
-//! To obtain a metadb_handle to specific location, use metadb::handle_create(). To obtain a list of metadb_handle objects corresponding to specific path (directory, playlist, multitrack file, etc), use relevant playlist_loader static helper methods.\n
-//! metadb_handle is also the most efficient way of passing playable object locations around because it provides fast access to both location and infos, and is reference counted so duplicating it is as fast as possible.\n
-//! To retrieve a path of a file from a metadb_handle, use metadb_handle::get_path() function. Note that metadb_handle is NOT just file path, some formats support multiple subsongs per physical file, which are signaled using subsong indexes.\n
+//! A metadb_handle object represents interface to reference-counted file_info cache entry for the specified location.\n
+//! To obtain a metadb_handle to specific location, use metadb::handle_create(). To obtain a list of metadb_handle objects corresponding to specific path (directory, playlist, multitrack file, etc), use relevant playlist_incoming_item_filter methods (recommended), or call playlist_loader methods directly.\n
+//! A metadb_handle is also the most efficient way of passing playable object locations around because it provides fast access to both location and infos, and is reference counted so duplicating it is as fast as possible.\n
+//! To retrieve a path of a file from a metadb_handle, use metadb_handle::get_path() function. Note that metadb_handle is NOT just file path, some formats support multiple subsongs per physical file, which are signaled using subsong indexes.
class NOVTABLE metadb_handle : public service_base
{
@@ -34,10 +31,10 @@ public: //! Returns last seen file stats, filestats_invalid if unknown.
virtual t_filestats get_filestats() const = 0;
- //! Queries whether cached info about item referenced by this metadb_handle object is already available.\n
+ //! Queries whether cached info about item referenced by this metadb_handle object is already available. Note that this function causes the metadb to be temporarily locked; you can not use it in context that where locking is forbidden.\n
//! Note that state of cached info changes only inside main thread, so you can safely assume that it doesn't change while some block of your code inside main thread is being executed.
virtual bool is_info_loaded() const = 0;
- //! Queries cached info about item referenced by this metadb_handle object. Returns true on success, false when info is not yet known.\n
+ //! Queries cached info about item referenced by this metadb_handle object. Returns true on success, false when info is not yet known. Note that this function causes the metadb to be temporarily locked; you can not use it in context that where locking is forbidden. \n
//! Note that state of cached info changes only inside main thread, so you can safely assume that it doesn't change while some block of your code inside main thread is being executed.
virtual bool get_info(file_info & p_info) const = 0;
//! Queries cached info about item referenced by this metadb_handle object. Returns true on success, false when info is not yet known. This is more efficient than get_info() since no data is copied.\n
@@ -49,7 +46,7 @@ public: //! Queries whether cached info about item referenced by this metadb_handle object is already available.\n
//! This is intended for use in special cases when you need to immediately retrieve info sent by metadb_io hint from another thread; state of returned data can be altered by any thread, as opposed to non-async methods.
virtual bool is_info_loaded_async() const = 0;
- //! Queries cached info about item referenced by this metadb_handle object. Returns true on success, false when info is not yet known.\n
+ //! Queries cached info about item referenced by this metadb_handle object. Returns true on success, false when info is not yet known. Note that this function causes the metadb to be temporarily locked; you can not use it in context that where locking is forbidden.\n
//! This is intended for use in special cases when you need to immediately retrieve info sent by metadb_io hint from another thread; state of returned data can be altered by any thread, as opposed to non-async methods.
virtual bool get_info_async(file_info & p_info) const = 0;
//! Queries cached info about item referenced by this metadb_handle object. Returns true on success, false when info is not yet known. This is more efficient than get_info() since no data is copied.\n
@@ -60,8 +57,23 @@ public: //! Renders information about item referenced by this metadb_handle object, using external file_info data.
- virtual void format_title_from_external_info(const file_info & p_info,titleformat_hook * p_hook,pfc::string_base & p_out,const service_ptr_t<class titleformat_object> & p_script,titleformat_text_filter * p_filter)=0;
+ virtual void format_title_from_external_info(const file_info & p_info,titleformat_hook * p_hook,pfc::string_base & p_out,const service_ptr_t<class titleformat_object> & p_script,titleformat_text_filter * p_filter) = 0;
+
+
+ //! New in 0.9.5.
+ virtual bool format_title_nonlocking(titleformat_hook * p_hook,pfc::string_base & p_out,const service_ptr_t<class titleformat_object> & p_script,titleformat_text_filter * p_filter) = 0;
+
+ //! New in 0.9.5.
+ virtual void format_title_from_external_info_nonlocking(const file_info & p_info,titleformat_hook * p_hook,pfc::string_base & p_out,const service_ptr_t<class titleformat_object> & p_script,titleformat_text_filter * p_filter) = 0;
+#if FOOBAR2000_TARGET_VERSION >= 76
+ //! New in 1.0
+ virtual bool get_browse_info(file_info & info, t_filetimestamp & ts) const = 0;
+
+ //! New in 1.0
+ virtual bool get_browse_info_locked(const file_info * & p_info, t_filetimestamp & ts) const = 0;
+#endif
+
static bool g_should_reload(const t_filestats & p_old_stats,const t_filestats & p_new_stats,bool p_fresh);
bool should_reload(const t_filestats & p_new_stats,bool p_fresh) const;
@@ -86,14 +98,17 @@ public: typedef service_ptr_t<metadb_handle> metadb_handle_ptr;
+typedef pfc::list_base_t<metadb_handle_ptr> & metadb_handle_list_ref;
+typedef pfc::list_base_const_t<metadb_handle_ptr> const & metadb_handle_list_cref;
+
namespace metadb_handle_list_helper {
- void sort_by_format_partial(pfc::list_base_t<metadb_handle_ptr> & p_list,t_size base,t_size count,const char * spec,titleformat_hook * p_hook);
- void sort_by_format_get_order_partial(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_size base,t_size count,t_size* order,const char * spec,titleformat_hook * p_hook);
- void sort_by_format_partial(pfc::list_base_t<metadb_handle_ptr> & p_list,t_size base,t_size count,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook);
- void sort_by_format_get_order_partial(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_size base,t_size count,t_size* order,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook);
+ void sort_by_format(metadb_handle_list_ref p_list,const char * spec,titleformat_hook * p_hook);
+ void sort_by_format_get_order(metadb_handle_list_cref p_list,t_size* order,const char * spec,titleformat_hook * p_hook);
+ void sort_by_format(metadb_handle_list_ref p_list,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook, int direction = 1);
+ void sort_by_format_get_order(metadb_handle_list_cref p_list,t_size* order,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook,int p_direction = 1);
- void sort_by_relative_path_partial(pfc::list_base_t<metadb_handle_ptr> & p_list,t_size base,t_size count);
- void sort_by_relative_path_get_order_partial(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_size base,t_size count,t_size* order);
+ void sort_by_relative_path(metadb_handle_list_ref p_list);
+ void sort_by_relative_path_get_order(metadb_handle_list_cref p_list,t_size* order);
void remove_duplicates(pfc::list_base_t<metadb_handle_ptr> & p_list);
void sort_by_pointer_remove_duplicates(pfc::list_base_t<metadb_handle_ptr> & p_list);
@@ -105,6 +120,11 @@ namespace metadb_handle_list_helper { double calc_total_duration(const pfc::list_base_const_t<metadb_handle_ptr> & p_list);
void sort_by_path(pfc::list_base_t<metadb_handle_ptr> & p_list);
+
+ t_filesize calc_total_size(metadb_handle_list_cref list, bool skipUnknown = false);
+ t_filesize calc_total_size_ex(metadb_handle_list_cref list, bool & foundUnknown);
+
+ bool extract_single_path(metadb_handle_list_cref list, const char * &path);
};
template<template<typename> class t_alloc = pfc::alloc_fast >
@@ -113,20 +133,26 @@ private: typedef metadb_handle_list_t<t_alloc> t_self;
typedef list_base_const_t<metadb_handle_ptr> t_interface;
public:
- inline void sort_by_format(const char * spec,titleformat_hook * p_hook) {return sort_by_format_partial(0,get_count(),spec,p_hook);}
- inline void sort_by_format_partial(t_size base,t_size count,const char * spec,titleformat_hook * p_hook) {metadb_handle_list_helper::sort_by_format_partial(*this,base,count,spec,p_hook);}
- inline void sort_by_format_get_order(t_size* order,const char * spec,titleformat_hook * p_hook) const {sort_by_format_get_order_partial(0,get_count(),order,spec,p_hook);}
- inline void sort_by_format_get_order_partial(t_size base,t_size count,t_size* order,const char * spec,titleformat_hook * p_hook) const {metadb_handle_list_helper::sort_by_format_get_order_partial(*this,base,count,order,spec,p_hook);}
-
- inline void sort_by_format(const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook) {return sort_by_format_partial(0,get_count(),p_script,p_hook);}
- inline void sort_by_format_partial(t_size base,t_size count,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook) {metadb_handle_list_helper::sort_by_format_partial(*this,base,count,p_script,p_hook);}
- inline void sort_by_format_get_order(t_size* order,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook) const {sort_by_format_get_order_partial(0,get_count(),order,p_script,p_hook);}
- inline void sort_by_format_get_order_partial(t_size base,t_size count,t_size* order,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook) const {metadb_handle_list_helper::sort_by_format_get_order_partial(*this,base,count,order,p_script,p_hook);}
+ inline void sort_by_format(const char * spec,titleformat_hook * p_hook) {
+ return metadb_handle_list_helper::sort_by_format(*this, spec, p_hook);
+ }
+ inline void sort_by_format_get_order(t_size* order,const char * spec,titleformat_hook * p_hook) const {
+ metadb_handle_list_helper::sort_by_format_get_order(*this, order, spec, p_hook);
+ }
+
+ inline void sort_by_format(const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook, int direction = 1) {
+ metadb_handle_list_helper::sort_by_format(*this, p_script, p_hook, direction);
+ }
+ inline void sort_by_format_get_order(t_size* order,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook) const {
+ metadb_handle_list_helper::sort_by_format_get_order(*this, order, p_script, p_hook);
+ }
- inline void sort_by_relative_path() {sort_by_relative_path_partial(0,get_count());}
- inline void sort_by_relative_path_partial(t_size base,t_size count) {metadb_handle_list_helper::sort_by_relative_path_partial(*this,base,count);}
- inline void sort_by_relative_path_get_order(t_size* order) const {sort_by_relative_path_get_order_partial(0,get_count(),order);}
- inline void sort_by_relative_path_get_order_partial(t_size base,t_size count,t_size* order) const {metadb_handle_list_helper::sort_by_relative_path_get_order_partial(*this,base,count,order);}
+ inline void sort_by_relative_path() {
+ metadb_handle_list_helper::sort_by_relative_path(*this);
+ }
+ inline void sort_by_relative_path_get_order(t_size* order) const {
+ metadb_handle_list_helper::sort_by_relative_path_get_order(*this,order);
+ }
inline void remove_duplicates() {metadb_handle_list_helper::remove_duplicates(*this);}
inline void sort_by_pointer_remove_duplicates() {metadb_handle_list_helper::sort_by_pointer_remove_duplicates(*this);}
@@ -145,6 +171,10 @@ public: metadb_handle_list_t(const t_interface & p_source) {add_items(p_source);}
metadb_handle_list_t() {}
+ t_self & operator+=(const t_interface & source) {add_items(source); return *this;}
+ t_self & operator+=(const metadb_handle_ptr & source) {add_item(source); return *this;}
+
+ bool extract_single_path(const char * &path) const {return metadb_handle_list_helper::extract_single_path(*this, path);}
};
typedef metadb_handle_list_t<> metadb_handle_list;
@@ -187,5 +217,3 @@ public: private:
pfc::string8_fastalloc m_data;
};
-
-#endif //_FOOBAR2000_METADB_HANDLE_H_
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb_handle_list.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb_handle_list.cpp index cd595ff..eeffb79 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb_handle_list.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/metadb_handle_list.cpp @@ -1,88 +1,170 @@ #include "foobar2000.h"
+#include <shlwapi.h>
+namespace {
+ wchar_t * makeSortString(const char * in) {
+ wchar_t * out = new wchar_t[pfc::stringcvt::estimate_utf8_to_wide(in) + 1];
+ out[0] = ' ';//StrCmpLogicalW bug workaround.
+ pfc::stringcvt::convert_utf8_to_wide_unchecked(out + 1, in);
+ return out;
+ }
-
-namespace {
- struct custom_sort_data
- {
- HANDLE text;
- //int subsong;
+ struct custom_sort_data {
+ wchar_t * text;
t_size index;
};
}
-static int __cdecl custom_sort_compare(const custom_sort_data & elem1, const custom_sort_data & elem2 )
-{//depends on unicode/ansi, nonportable (win32 lstrcmpi)
- int ret = uSortStringCompare(elem1.text,elem2.text);//uStringCompare
-// if (ret == 0) ret = elem1.subsong - elem2.subsong;
+
+template<int direction>
+static int custom_sort_compare(const custom_sort_data & elem1, const custom_sort_data & elem2 ) {
+ int ret = direction * StrCmpLogicalW(elem1.text,elem2.text);
if (ret == 0) ret = pfc::sgn_t((t_ssize)elem1.index - (t_ssize)elem2.index);
return ret;
}
-void metadb_handle_list_helper::sort_by_format_partial(pfc::list_base_t<metadb_handle_ptr> & p_list,t_size base,t_size count,const char * spec,titleformat_hook * p_hook)
+
+template<int direction>
+static int _cdecl _custom_sort_compare(const void * v1, const void * v2) {
+ return custom_sort_compare<direction>(*reinterpret_cast<const custom_sort_data*>(v1),*reinterpret_cast<const custom_sort_data*>(v2));
+}
+void metadb_handle_list_helper::sort_by_format(metadb_handle_list_ref p_list,const char * spec,titleformat_hook * p_hook)
{
service_ptr_t<titleformat_object> script;
if (static_api_ptr_t<titleformat_compiler>()->compile(script,spec))
- sort_by_format_partial(p_list,base,count,script,p_hook);
+ sort_by_format(p_list,script,p_hook);
}
-void metadb_handle_list_helper::sort_by_format_get_order_partial(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_size base,t_size count,t_size* order,const char * spec,titleformat_hook * p_hook)
+void metadb_handle_list_helper::sort_by_format_get_order(metadb_handle_list_cref p_list,t_size* order,const char * spec,titleformat_hook * p_hook)
{
service_ptr_t<titleformat_object> script;
if (static_api_ptr_t<titleformat_compiler>()->compile(script,spec))
- sort_by_format_get_order_partial(p_list,base,count,order,script,p_hook);
+ sort_by_format_get_order(p_list,order,script,p_hook);
}
-void metadb_handle_list_helper::sort_by_format_partial(pfc::list_base_t<metadb_handle_ptr> & p_list,t_size base,t_size count,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook)
+void metadb_handle_list_helper::sort_by_format(metadb_handle_list_ref p_list,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook, int direction)
{
+ const t_size count = p_list.get_count();
pfc::array_t<t_size> order; order.set_size(count);
- sort_by_format_get_order_partial(p_list,base,count,order.get_ptr(),p_script,p_hook);
- p_list.reorder_partial(base,order.get_ptr(),count);
+ sort_by_format_get_order(p_list,order.get_ptr(),p_script,p_hook,direction);
+ p_list.reorder(order.get_ptr());
+}
+
+namespace {
+
+ class tfhook_sort : public titleformat_hook {
+ public:
+ tfhook_sort() {
+ m_API->seed((unsigned)__rdtsc());
+ }
+ bool process_field(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,bool & p_found_flag) {
+ return false;
+ }
+ bool process_function(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,titleformat_hook_function_params * p_params,bool & p_found_flag) {
+ if (stricmp_utf8_ex(p_name, p_name_length, "rand", ~0) == 0) {
+ t_size param_count = p_params->get_param_count();
+ t_uint32 val;
+ if (param_count == 1) {
+ t_uint32 mod = (t_uint32)p_params->get_param_uint(0);
+ if (mod > 0) {
+ val = m_API->genrand(mod);
+ } else {
+ val = 0;
+ }
+ } else {
+ val = m_API->genrand(0xFFFFFFFF);
+ }
+ p_out->write_int(titleformat_inputtypes::unknown, val);
+ p_found_flag = true;
+ return true;
+ } else {
+ return false;
+ }
+ }
+ private:
+ static_api_ptr_t<genrand_service> m_API;
+ };
+
+ class tfthread : public pfc::thread {
+ public:
+ tfthread(pfc::counter * walk, metadb_handle_list_cref items,custom_sort_data * out,titleformat_object::ptr script,titleformat_hook * hook) : m_walk(walk), m_items(items), m_out(out), m_script(script), m_hook(hook) {}
+ ~tfthread() {waitTillDone();}
+
+
+
+ void threadProc() {
+ TRACK_CALL_TEXT("metadb_handle sort helper thread");
+
+ tfhook_sort myHook;
+ titleformat_hook_impl_splitter hookSplitter(&myHook, m_hook);
+ titleformat_hook * const hookPtr = m_hook ? pfc::implicit_cast<titleformat_hook*>(&hookSplitter) : &myHook;
+
+ pfc::string8_fastalloc temp; temp.prealloc(512);
+ const t_size total = m_items.get_size();
+ for(;;) {
+ const t_size index = (*m_walk)++;
+ if (index >= total) break;
+ m_out[index].index = index;
+ m_items[index]->format_title_nonlocking(hookPtr,temp,m_script,0);
+ m_out[index].text = makeSortString(temp);
+ }
+ }
+ private:
+ pfc::counter * const m_walk;
+ metadb_handle_list_cref m_items;
+ custom_sort_data * const m_out;
+ titleformat_object::ptr const m_script;
+ titleformat_hook * const m_hook;
+ };
}
-void metadb_handle_list_helper::sort_by_format_get_order_partial(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_size base,t_size count,t_size* order,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook)
+void metadb_handle_list_helper::sort_by_format_get_order(metadb_handle_list_cref p_list,t_size* order,const service_ptr_t<titleformat_object> & p_script,titleformat_hook * p_hook,int p_direction)
{
- assert(base+count<=p_list.get_count());
- t_size n;
- pfc::array_t<custom_sort_data> data;
- data.set_size(count);
+// pfc::hires_timer timer; timer.start();
+
+ const t_size count = p_list.get_count();
+ pfc::array_t<custom_sort_data> data; data.set_size(count);
- pfc::string8_fastalloc temp;
- pfc::string8_fastalloc temp2;
- temp.prealloc(512);
- for(n=0;n<count;n++)
{
- metadb_handle_ptr item;
- p_list.get_item_ex(item,base+n);
- assert(item.is_valid());
-
- item->format_title(p_hook,temp,p_script,0);
- data[n].index = n;
- data[n].text = uSortStringCreate(temp);
- //data[n].subsong = item->get_subsong_index();
+ in_metadb_sync sync;
+ pfc::counter counter(0);
+ pfc::array_t<pfc::rcptr_t<tfthread> > threads; threads.set_size(pfc::getOptimalWorkerThreadCountEx(p_list.get_count() / 128));
+ PFC_ASSERT( threads.get_size() > 0 );
+ for(t_size walk = 0; walk < threads.get_size(); ++walk) {
+ threads[walk].new_t(&counter,p_list,data.get_ptr(),p_script,p_hook);
+ }
+ for(t_size walk = 1; walk < threads.get_size(); ++walk) threads[walk]->start();
+ threads[0]->threadProc();
+ for(t_size walk = 1; walk < threads.get_size(); ++walk) threads[walk]->waitTillDone();
}
+// console::formatter() << "metadb_handle sort: prepared in " << pfc::format_time_ex(timer.query(),6);
- pfc::sort_t(data,custom_sort_compare,count);
- //qsort(data.get_ptr(),count,sizeof(custom_sort_data),(int (__cdecl *)(const void *elem1, const void *elem2 ))custom_sort_compare);
+ pfc::sort_t(data, p_direction > 0 ? custom_sort_compare<1> : custom_sort_compare<-1>,count);
+ //qsort(data.get_ptr(),count,sizeof(custom_sort_data),p_direction > 0 ? _custom_sort_compare<1> : _custom_sort_compare<-1>);
- for(n=0;n<count;n++)
+
+// console::formatter() << "metadb_handle sort: sorted in " << pfc::format_time_ex(timer.query(),6);
+
+ for(t_size n=0;n<count;n++)
{
order[n]=data[n].index;
- uSortStringFree(data[n].text);
+ delete[] data[n].text;
}
+
+// console::formatter() << "metadb_handle sort: finished in " << pfc::format_time_ex(timer.query(),6);
}
-void metadb_handle_list_helper::sort_by_relative_path_partial(pfc::list_base_t<metadb_handle_ptr> & p_list,t_size base,t_size count)
+void metadb_handle_list_helper::sort_by_relative_path(metadb_handle_list_ref p_list)
{
- assert(base+count<=p_list.get_count());
+ const t_size count = p_list.get_count();
pfc::array_t<t_size> order; order.set_size(count);
- sort_by_relative_path_get_order_partial(p_list,base,count,order.get_ptr());
- p_list.reorder_partial(base,order.get_ptr(),count);
+ sort_by_relative_path_get_order(p_list,order.get_ptr());
+ p_list.reorder(order.get_ptr());
}
-void metadb_handle_list_helper::sort_by_relative_path_get_order_partial(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,t_size base,t_size count,t_size* order)
+void metadb_handle_list_helper::sort_by_relative_path_get_order(metadb_handle_list_cref p_list,t_size* order)
{
- assert(base+count<=p_list.get_count());
+ const t_size count = p_list.get_count();
t_size n;
pfc::array_t<custom_sort_data> data;
data.set_size(count);
@@ -93,24 +175,24 @@ void metadb_handle_list_helper::sort_by_relative_path_get_order_partial(const pf for(n=0;n<count;n++)
{
metadb_handle_ptr item;
- p_list.get_item_ex(item,base+n);
+ p_list.get_item_ex(item,n);
if (!api->get_relative_path(item,temp)) temp = "";
data[n].index = n;
- data[n].text = uSortStringCreate(temp);
+ data[n].text = makeSortString(temp);
//data[n].subsong = item->get_subsong_index();
}
- pfc::sort_t(data,custom_sort_compare,count);
+ pfc::sort_t(data,custom_sort_compare<1>,count);
//qsort(data.get_ptr(),count,sizeof(custom_sort_data),(int (__cdecl *)(const void *elem1, const void *elem2 ))custom_sort_compare);
for(n=0;n<count;n++)
{
order[n]=data[n].index;
- uSortStringFree(data[n].text);
+ delete[] data[n].text;
}
}
-void metadb_handle_list_helper::remove_duplicates(pfc::list_base_t<metadb_handle_ptr> & p_list)
+void metadb_handle_list_helper::remove_duplicates(metadb_handle_list_ref p_list)
{
t_size count = p_list.get_count();
if (count>0)
@@ -136,7 +218,7 @@ void metadb_handle_list_helper::remove_duplicates(pfc::list_base_t<metadb_handle }
}
-void metadb_handle_list_helper::sort_by_pointer_remove_duplicates(pfc::list_base_t<metadb_handle_ptr> & p_list)
+void metadb_handle_list_helper::sort_by_pointer_remove_duplicates(metadb_handle_list_ref p_list)
{
t_size count = p_list.get_count();
if (count>0)
@@ -167,20 +249,20 @@ void metadb_handle_list_helper::sort_by_pointer_remove_duplicates(pfc::list_base }
}
-void metadb_handle_list_helper::sort_by_path_quick(pfc::list_base_t<metadb_handle_ptr> & p_list)
+void metadb_handle_list_helper::sort_by_path_quick(metadb_handle_list_ref p_list)
{
p_list.sort_t(metadb::path_compare_metadb_handle);
}
-void metadb_handle_list_helper::sort_by_pointer(pfc::list_base_t<metadb_handle_ptr> & p_list)
+void metadb_handle_list_helper::sort_by_pointer(metadb_handle_list_ref p_list)
{
//it seems MSVC71 /GL does something highly retarded here
//p_list.sort_t(pfc::compare_t<metadb_handle_ptr,metadb_handle_ptr>);
p_list.sort();
}
-t_size metadb_handle_list_helper::bsearch_by_pointer(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,const metadb_handle_ptr & val)
+t_size metadb_handle_list_helper::bsearch_by_pointer(metadb_handle_list_cref p_list,const metadb_handle_ptr & val)
{
t_size blah;
if (p_list.bsearch_t(pfc::compare_t<metadb_handle_ptr,metadb_handle_ptr>,val,blah)) return blah;
@@ -246,7 +328,7 @@ void metadb_handle_list_helper::sorted_by_pointer_extract_difference(metadb_hand }
}
-double metadb_handle_list_helper::calc_total_duration(const pfc::list_base_const_t<metadb_handle_ptr> & p_list)
+double metadb_handle_list_helper::calc_total_duration(metadb_handle_list_cref p_list)
{
double ret = 0;
t_size n, m = p_list.get_count();
@@ -258,7 +340,58 @@ double metadb_handle_list_helper::calc_total_duration(const pfc::list_base_const return ret;
}
-void metadb_handle_list_helper::sort_by_path(pfc::list_base_t<metadb_handle_ptr> & p_list)
+void metadb_handle_list_helper::sort_by_path(metadb_handle_list_ref p_list)
{
- sort_by_format_partial(p_list,0,p_list.get_count(),"%path_sort%",0);
+ sort_by_format(p_list,"%path_sort%",NULL);
}
+
+
+t_filesize metadb_handle_list_helper::calc_total_size(metadb_handle_list_cref p_list, bool skipUnknown) {
+ metadb_handle_list list(p_list);
+ list.sort_t(metadb::path_compare_metadb_handle);
+
+ t_filesize ret = 0;
+ t_size n, m = list.get_count();
+ for(n=0;n<m;n++) {
+ if (n==0 || metadb::path_compare(list[n-1]->get_path(),list[n]->get_path())) {
+ t_filesize t = list[n]->get_filesize();
+ if (t == filesize_invalid) {
+ if (!skipUnknown) return filesize_invalid;
+ } else {
+ ret += t;
+ }
+ }
+ }
+ return ret;
+}
+
+t_filesize metadb_handle_list_helper::calc_total_size_ex(metadb_handle_list_cref p_list, bool & foundUnknown) {
+ foundUnknown = false;
+ metadb_handle_list list(p_list);
+ list.sort_t(metadb::path_compare_metadb_handle);
+
+ t_filesize ret = 0;
+ t_size n, m = list.get_count();
+ for(n=0;n<m;n++) {
+ if (n==0 || metadb::path_compare(list[n-1]->get_path(),list[n]->get_path())) {
+ t_filesize t = list[n]->get_filesize();
+ if (t == filesize_invalid) {
+ foundUnknown = true;
+ } else {
+ ret += t;
+ }
+ }
+ }
+ return ret;
+}
+
+bool metadb_handle_list_helper::extract_single_path(metadb_handle_list_cref list, const char * &pathOut) {
+ const t_size total = list.get_count();
+ if (total == 0) return false;
+ const char * path = list[0]->get_path();
+ for(t_size walk = 1; walk < total; ++walk) {
+ if (metadb::path_compare(path, list[walk]->get_path()) != 0) return false;
+ }
+ pathOut = path;
+ return true;
+}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/modeless_dialog.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/modeless_dialog.h index 1f6c9ad..cc7d10d 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/modeless_dialog.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/modeless_dialog.h @@ -1,12 +1,8 @@ -#ifndef _MODELESS_DIALOG_H_
-#define _MODELESS_DIALOG_H_
-
-
//! Service for plugging your nonmodal dialog windows into main app loop to receive IsDialogMessage()-translated messages.\n
//! Note that all methods are valid from main app thread only.\n
//! Usage: static_api_ptr_t<modeless_dialog_manager> or modeless_dialog_manager::g_add / modeless_dialog_manager::g_remove.
-class NOVTABLE modeless_dialog_manager : public service_base
-{
+class NOVTABLE modeless_dialog_manager : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(modeless_dialog_manager);
public:
//! Adds specified window to global list of windows to receive IsDialogMessage().
virtual void add(HWND p_wnd) = 0;
@@ -14,11 +10,8 @@ public: virtual void remove(HWND p_wnd) = 0;
//! Static helper; see add().
- static void g_add(HWND p_wnd);
+ static void g_add(HWND p_wnd) {static_api_ptr_t<modeless_dialog_manager>()->add(p_wnd);}
//! Static helper; see remove().
- static void g_remove(HWND p_wnd);
+ static void g_remove(HWND p_wnd) {static_api_ptr_t<modeless_dialog_manager>()->remove(p_wnd);}
- FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(modeless_dialog_manager);
};
-
-#endif //_MODELESS_DIALOG_H_
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ole_interaction.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ole_interaction.h new file mode 100644 index 0000000..5159194 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ole_interaction.h @@ -0,0 +1,149 @@ +class NOVTABLE playlist_dataobject_desc {
+public:
+ virtual t_size get_entry_count() const = 0;
+ virtual void get_entry_name(t_size which, pfc::string_base & out) const = 0;
+ virtual void get_entry_content(t_size which, metadb_handle_list_ref out) const = 0;
+
+ virtual void set_entry_count(t_size count) = 0;
+ virtual void set_entry_name(t_size which, const char * name) = 0;
+ virtual void set_entry_content(t_size which, metadb_handle_list_cref content) = 0;
+
+ void copy(playlist_dataobject_desc const & source) {
+ const t_size count = source.get_entry_count(); set_entry_count(count);
+ metadb_handle_list content; pfc::string8 name;
+ for(t_size walk = 0; walk < count; ++walk) {
+ source.get_entry_name(walk,name); source.get_entry_content(walk,content);
+ set_entry_name(walk,name); set_entry_content(walk,content);
+ }
+ }
+protected:
+ ~playlist_dataobject_desc() {}
+private:
+ const playlist_dataobject_desc & operator=(const playlist_dataobject_desc &) {return *this;}
+};
+
+class NOVTABLE playlist_dataobject_desc_v2 : public playlist_dataobject_desc {
+public:
+ virtual void get_side_data(t_size which, mem_block_container & out) const = 0;
+ virtual void set_side_data(t_size which, const void * data, t_size size) = 0;
+
+ void copy(playlist_dataobject_desc_v2 const & source) {
+ const t_size count = source.get_entry_count(); set_entry_count(count);
+ metadb_handle_list content; pfc::string8 name;
+ mem_block_container_impl_t<pfc::alloc_fast_aggressive> sideData;
+ for(t_size walk = 0; walk < count; ++walk) {
+ source.get_entry_name(walk,name); source.get_entry_content(walk,content); source.get_side_data(walk, sideData);
+ set_entry_name(walk,name); set_entry_content(walk,content); set_side_data(walk, sideData.get_ptr(), sideData.get_size());
+ }
+ }
+
+ void set_from_playlist_manager(bit_array const & mask) {
+ static_api_ptr_t<playlist_manager_v4> api;
+ const t_size pltotal = api->get_playlist_count();
+ const t_size total = mask.calc_count(true,0,pltotal);
+ set_entry_count(total);
+ t_size done = 0;
+ pfc::string8 name; metadb_handle_list content;
+ abort_callback_dummy abort;
+ for(t_size walk = 0; walk < pltotal; ++walk) if (mask[walk]) {
+ pfc::dynamic_assert( done < total );
+ api->playlist_get_name(walk,name); api->playlist_get_all_items(walk,content);
+ set_entry_name(done,name); set_entry_content(done,content);
+ stream_writer_buffer_simple sideData; api->playlist_get_sideinfo(walk, &sideData, abort);
+ set_side_data(done,sideData.m_buffer.get_ptr(), sideData.m_buffer.get_size());
+ ++done;
+ }
+ pfc::dynamic_assert( done == total );
+ }
+
+ const playlist_dataobject_desc_v2 & operator=(const playlist_dataobject_desc_v2& source) {copy(source); return *this;}
+protected:
+ ~playlist_dataobject_desc_v2() {}
+};
+
+class playlist_dataobject_desc_impl : public playlist_dataobject_desc_v2 {
+public:
+ playlist_dataobject_desc_impl() {}
+ playlist_dataobject_desc_impl(const playlist_dataobject_desc_v2 & source) {copy(source);}
+
+ t_size get_entry_count() const {return m_entries.get_size();}
+ void get_entry_name(t_size which, pfc::string_base & out) const {
+ if (which < m_entries.get_size()) out = m_entries[which].m_name;
+ else throw pfc::exception_invalid_params();
+ }
+ void get_entry_content(t_size which, metadb_handle_list_ref out) const {
+ if (which < m_entries.get_size()) out = m_entries[which].m_content;
+ else throw pfc::exception_invalid_params();
+ }
+ void set_entry_count(t_size count) {
+ m_entries.set_size(count);
+ }
+ void set_entry_name(t_size which, const char * name) {
+ if (which < m_entries.get_size()) m_entries[which].m_name = name;
+ else throw pfc::exception_invalid_params();
+ }
+ void set_entry_content(t_size which, metadb_handle_list_cref content) {
+ if (which < m_entries.get_size()) m_entries[which].m_content = content;
+ else throw pfc::exception_invalid_params();
+ }
+ void get_side_data(t_size which, mem_block_container & out) const {
+ if (which < m_entries.get_size()) out.set(m_entries[which].m_sideData);
+ else throw pfc::exception_invalid_params();
+ }
+ void set_side_data(t_size which, const void * data, t_size size) {
+ if (which < m_entries.get_size()) m_entries[which].m_sideData.set_data_fromptr(reinterpret_cast<const t_uint8*>(data), size);
+ else throw pfc::exception_invalid_params();
+ }
+private:
+ struct entry { metadb_handle_list m_content; pfc::string8 m_name; pfc::array_t<t_uint8> m_sideData; };
+ pfc::array_t<entry> m_entries;
+};
+
+//! \since 0.9.5
+//! Provides various methods for interaction between foobar2000 and OLE IDataObjects, Windows Clipboard, drag&drop and such.
+//! To instantiate, use static_api_ptr_t<ole_interaction>.
+class NOVTABLE ole_interaction : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(ole_interaction)
+public:
+ enum {
+ KClipboardFormatSimpleLocations,
+ KClipboardFormatFPL,
+ KClipboardFormatMultiFPL,
+ KClipboardFormatTotal
+ };
+ //! Retrieves clipboard format ID for one of foobar2000's internal data formats.
+ //! @param which One of KClipboardFormat* constants.
+ virtual t_uint32 get_clipboard_format(t_uint32 which) = 0;
+
+ //! Creates an IDataObject from a group of tracks.
+ virtual pfc::com_ptr_t<IDataObject> create_dataobject(metadb_handle_list_cref source) = 0;
+
+ //! Creates an IDataObject from one or more playlists, including playlist name info for re-creating those playlists later.
+ virtual pfc::com_ptr_t<IDataObject> create_dataobject(const playlist_dataobject_desc & source) = 0;
+
+ //! Attempts to parse an IDataObject as playlists.
+ virtual HRESULT parse_dataobject_playlists(pfc::com_ptr_t<IDataObject> obj, playlist_dataobject_desc & out) = 0;
+
+ //! For internal use only. Will succeed only if the metadb_handle list can be generated immediately, without performing potentially timeconsuming tasks such as parsing media files (for an example when the specified IDataObject contains data in one of our internal formats).
+ virtual HRESULT parse_dataobject_immediate(pfc::com_ptr_t<IDataObject> obj, metadb_handle_list_ref out) = 0;
+
+ //! Attempts to parse an IDataObject into a dropped_files_data object (list of metadb_handles if immediately available, list of file paths otherwise).
+ virtual HRESULT parse_dataobject(pfc::com_ptr_t<IDataObject> obj, dropped_files_data & out) = 0;
+
+ //! Checks whether the specified IDataObject appears to be parsable by our parse_dataobject methods.
+ virtual HRESULT check_dataobject(pfc::com_ptr_t<IDataObject> obj, DWORD & dropEffect, bool & isNative) = 0;
+
+ //! Checks whether the specified IDataObject appears to be parsable as playlists (parse_dataobject_playlists method).
+ virtual HRESULT check_dataobject_playlists(pfc::com_ptr_t<IDataObject> obj) = 0;
+};
+
+//! \since 0.9.5.4
+class NOVTABLE ole_interaction_v2 : public ole_interaction {
+ FB2K_MAKE_SERVICE_INTERFACE(ole_interaction_v2, ole_interaction)
+public:
+ //! Creates an IDataObject from one or more playlists, including playlist name info for re-creating those playlists later.
+ virtual pfc::com_ptr_t<IDataObject> create_dataobject(const playlist_dataobject_desc_v2 & source) = 0;
+
+ //! Attempts to parse an IDataObject as playlists.
+ virtual HRESULT parse_dataobject_playlists(pfc::com_ptr_t<IDataObject> obj, playlist_dataobject_desc_v2 & out) = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/packet_decoder.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/packet_decoder.h index 7527707..55f6a69 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/packet_decoder.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/packet_decoder.h @@ -1,6 +1,6 @@ //! Provides interface to decode various audio data types to PCM. Use packet_decoder_factory_t template to register.
-class packet_decoder : public service_base {
+class NOVTABLE packet_decoder : public service_base {
protected:
//! Prototype of function that must be implemented by packet_decoder implementation but is not accessible through packet_decoder interface itself.
//! Determines whether specific packet_decoder implementation supports specified decoder setup data.
@@ -75,7 +75,7 @@ public: FB2K_MAKE_SERVICE_INTERFACE(packet_decoder,service_base);
};
-class packet_decoder_streamparse : public packet_decoder
+class NOVTABLE packet_decoder_streamparse : public packet_decoder
{
public:
virtual void decode_ex(const void * p_buffer,t_size p_bytes,t_size & p_bytes_processed,audio_chunk & p_chunk,abort_callback & p_abort) = 0;
@@ -84,7 +84,7 @@ public: FB2K_MAKE_SERVICE_INTERFACE(packet_decoder_streamparse,packet_decoder);
};
-class packet_decoder_entry : public service_base
+class NOVTABLE packet_decoder_entry : public service_base
{
public:
virtual bool is_our_setup(const GUID & p_owner,t_size p_param1,const void * p_param2,t_size p_param2size) = 0;
@@ -110,4 +110,4 @@ public: };
template<typename T>
-class packet_decoder_factory_t : public service_factory_single_t<packet_decoder_entry_impl_t<T> > {};
\ No newline at end of file +class packet_decoder_factory_t : public service_factory_single_t<packet_decoder_entry_impl_t<T> > {};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/play_callback.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/play_callback.h index f98b1d7..2fc4801 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/play_callback.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/play_callback.h @@ -1,6 +1,3 @@ -#ifndef _PLAY_CALLBACK_H_
-#define _PLAY_CALLBACK_H_
-
/*!
Class receiving notifications about playback events. Note that all methods are called only from app's main thread.
Use play_callback_manager to register your dynamically created instances. Statically registered version is available too - see play_callback_static.
@@ -8,15 +5,15 @@ Use play_callback_manager to register your dynamically created instances. Static class NOVTABLE play_callback {
public:
//! Playback process is being initialized. on_playback_new_track() should be called soon after this when first file is successfully opened for decoding.
- virtual void FB2KAPI on_playback_starting(play_control::t_track_command p_command,bool p_paused)=0;
+ virtual void FB2KAPI on_playback_starting(play_control::t_track_command p_command,bool p_paused) = 0;
//! Playback advanced to new track.
virtual void FB2KAPI on_playback_new_track(metadb_handle_ptr p_track) = 0;
//! Playback stopped.
- virtual void FB2KAPI on_playback_stop(play_control::t_stop_reason p_reason)=0;
+ virtual void FB2KAPI on_playback_stop(play_control::t_stop_reason p_reason) = 0;
//! User has seeked to specific time.
- virtual void FB2KAPI on_playback_seek(double p_time)=0;
+ virtual void FB2KAPI on_playback_seek(double p_time) = 0;
//! Called on pause/unpause.
- virtual void FB2KAPI on_playback_pause(bool p_state)=0;
+ virtual void FB2KAPI on_playback_pause(bool p_state) = 0;
//! Called when currently played file gets edited.
virtual void FB2KAPI on_playback_edited(metadb_handle_ptr p_track) = 0;
//! Dynamic info (VBR bitrate etc) change.
@@ -60,6 +57,7 @@ public: //! Registers a play_callback object.
//! @param p_callback Interface to register.
//! @param p_flags Indicates which notifications are requested.
+ //! @param p_forward_status_on_register Set to true to have the callback immediately receive current playback status as notifications if playback is active (eg. to receive info about playback process that started before our callback was registered).
virtual void FB2KAPI register_callback(play_callback * p_callback,unsigned p_flags,bool p_forward_status_on_register) = 0;
//! Unregisters a play_callback object.
//! @p_callback Previously registered interface to unregister.
@@ -68,6 +66,33 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(play_callback_manager);
};
+//! Implementation helper.
+class play_callback_impl_base : public play_callback {
+public:
+ play_callback_impl_base(unsigned p_flags = ~0) {
+ static_api_ptr_t<play_callback_manager>()->register_callback(this,p_flags,false);
+ }
+ ~play_callback_impl_base() {
+ static_api_ptr_t<play_callback_manager>()->unregister_callback(this);
+ }
+ void play_callback_reregister(unsigned flags, bool refresh = false) {
+ static_api_ptr_t<play_callback_manager> api;
+ api->unregister_callback(this);
+ api->register_callback(this,flags,refresh);
+ }
+ void on_playback_starting(play_control::t_track_command p_command,bool p_paused) {}
+ void on_playback_new_track(metadb_handle_ptr p_track) {}
+ void on_playback_stop(play_control::t_stop_reason p_reason) {}
+ void on_playback_seek(double p_time) {}
+ void on_playback_pause(bool p_state) {}
+ void on_playback_edited(metadb_handle_ptr p_track) {}
+ void on_playback_dynamic_info(const file_info & p_info) {}
+ void on_playback_dynamic_info_track(const file_info & p_info) {}
+ void on_playback_time(double p_time) {}
+ void on_volume_change(float p_new_val) {}
+
+ PFC_CLASS_NOT_COPYABLE_EX(play_callback_impl_base)
+};
//! Static (autoregistered) version of play_callback. Use play_callback_static_factory_t to register.
class play_callback_static : public service_base, public play_callback {
@@ -93,4 +118,32 @@ public: template<typename T>
class playback_statistics_collector_factory_t : public service_factory_single_t<T> {};
-#endif
\ No newline at end of file +
+
+
+
+//! Helper providing a simplified interface for receiving playback events, in case your code does not care about the kind of playback event that has occurred; useful typically for GUI/rendering code that just refreshes some control whenever a playback state change occurs.
+class playback_event_notify : private play_callback_impl_base {
+public:
+ playback_event_notify(playback_control::t_display_level level = playback_control::display_level_all) : play_callback_impl_base(GrabCBFlags(level)) {}
+
+ static t_uint32 GrabCBFlags(playback_control::t_display_level level) {
+ t_uint32 flags = flag_on_playback_starting | flag_on_playback_new_track | flag_on_playback_stop | flag_on_playback_pause | flag_on_playback_edited | flag_on_volume_change;
+ if (level >= playback_control::display_level_titles) flags |= flag_on_playback_dynamic_info_track;
+ if (level >= playback_control::display_level_all) flags |= flag_on_playback_seek | flag_on_playback_dynamic_info | flag_on_playback_time;
+ return flags;
+ }
+protected:
+ virtual void on_playback_event() {}
+private:
+ void on_playback_starting(play_control::t_track_command p_command,bool p_paused) {on_playback_event();}
+ void on_playback_new_track(metadb_handle_ptr p_track) {on_playback_event();}
+ void on_playback_stop(play_control::t_stop_reason p_reason) {on_playback_event();}
+ void on_playback_seek(double p_time) {on_playback_event();}
+ void on_playback_pause(bool p_state) {on_playback_event();}
+ void on_playback_edited(metadb_handle_ptr p_track) {on_playback_event();}
+ void on_playback_dynamic_info(const file_info & p_info) {on_playback_event();}
+ void on_playback_dynamic_info_track(const file_info & p_info) {on_playback_event();}
+ void on_playback_time(double p_time) {on_playback_event();}
+ void on_volume_change(float p_new_val) {on_playback_event();}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playable_location.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playable_location.cpp index 416c169..5ad6e0c 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playable_location.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playable_location.cpp @@ -2,7 +2,7 @@ int playable_location::g_compare(const playable_location & p_item1,const playable_location & p_item2) {
int ret = metadb::path_compare(p_item1.get_path(),p_item2.get_path());
- if (ret != 0) return 0;
+ if (ret != 0) return ret;
return pfc::compare_t(p_item1.get_subsong(),p_item2.get_subsong());
}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playable_location.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playable_location.h index ac7b732..0f1d182 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playable_location.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playable_location.h @@ -1,8 +1,6 @@ #ifndef _FOOBAR2000_PLAYABLE_LOCATION_H_
#define _FOOBAR2000_PLAYABLE_LOCATION_H_
-#include "service.h"
-
//playable_location stores location of a playable resource, currently implemented as file path and integer for indicating multiple playable "subsongs" per file
//also see: file_info.h
//for getting more info about resource referenced by a playable_location, see metadb.h
@@ -34,6 +32,11 @@ public: inline t_uint32 get_subsong_index() const {return get_subsong();}
inline void set_subsong_index(t_uint32 v) {set_subsong(v);}
+ class comparator {
+ public:
+ static int compare(const playable_location & v1, const playable_location & v2) {return g_compare(v1,v2);}
+ };
+
protected:
playable_location() {}
~playable_location() {}
@@ -84,4 +87,4 @@ public: pfc::string_base & operator<<(pfc::string_base & p_fmt,const playable_location & p_location);
-#endif //_FOOBAR2000_PLAYABLE_LOCATION_H_
\ No newline at end of file +#endif //_FOOBAR2000_PLAYABLE_LOCATION_H_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playback_control.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playback_control.h index cedc0c7..b247bf4 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playback_control.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playback_control.h @@ -1,6 +1,3 @@ -#ifndef _PLAY_CONTROL_H_
-#define _PLAY_CONTROL_H_
-
//! Provides control for various playback-related operations.
//! All methods provided by this interface work from main app thread only. Calling from another thread will do nothing or trigger an exception. If you need to trigger one of playback_control methods from another thread, see main_thread_callback.
//! Do not call playback_control methods from inside any kind of global callback (e.g. playlist callback), otherwise race conditions may occur.
@@ -20,10 +17,16 @@ public: enum t_track_command {
track_command_default = 0,
track_command_play,
+ //! Plays the next track from the current playlist according to the current playback order.
track_command_next,
+ //! Plays the previous track from the current playlist according to the current playback order.
track_command_prev,
+ //! For internal use only, do not use.
track_command_settrack,
+ //! Plays a random track from the current playlist.
track_command_rand,
+
+ //! For internal use only, do not use.
track_command_resume,
};
@@ -78,9 +81,9 @@ public: display_level_none,
//! Static info and is_playing/is_paused stats
display_level_basic,
- //! Display_level_static + dynamic track titles on e.g. live streams
+ //! display_level_basic + dynamic track titles on e.g. live streams
display_level_titles,
- //! Display_level_titles + timing + VBR bitrate display etc
+ //! display_level_titles + timing + VBR bitrate display etc
display_level_all,
};
@@ -124,6 +127,8 @@ public: //deprecated
inline void play_stop() {stop();}
+ static const int volume_mute = -100;
+
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playback_control);
};
@@ -136,5 +141,3 @@ public: //for compatibility with old code
typedef playback_control play_control;
-
-#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playback_stream_capture.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playback_stream_capture.h new file mode 100644 index 0000000..64d28f4 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playback_stream_capture.h @@ -0,0 +1,23 @@ +//! \since 1.0
+class NOVTABLE playback_stream_capture_callback {
+public:
+ //! Delivers a real-time chunk of audio data. \n
+ //! Audio is roughly synchronized with what can currently be heard. This API is provided for utility purposes such as streaming; if you want to implement a visualisation, use the visualisation_manager API instead. \n
+ //! Called only from the main thread.
+ virtual void on_chunk(const audio_chunk &) = 0;
+protected:
+ playback_stream_capture_callback() {}
+ ~playback_stream_capture_callback() {}
+};
+
+//! \since 1.0
+class NOVTABLE playback_stream_capture : public service_base {
+public:
+ //! Possible to call only from the main thread.
+ virtual void add_callback(playback_stream_capture_callback * ) = 0;
+ //! Possible to call only from the main thread.
+ virtual void remove_callback(playback_stream_capture_callback * ) = 0;
+
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playback_stream_capture)
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist.cpp index e49a9a7..93064a5 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist.cpp @@ -1,6 +1,5 @@ #include "foobar2000.h"
-
namespace {
class enum_items_callback_retrieve_item : public playlist_manager::enum_items_callback
{
@@ -57,7 +56,7 @@ namespace { {
pfc::list_base_t<metadb_handle_ptr> & m_out;
public:
- enum_items_callback_retrieve_selected_items(pfc::list_base_t<metadb_handle_ptr> & p_out) : m_out(p_out) {}
+ enum_items_callback_retrieve_selected_items(pfc::list_base_t<metadb_handle_ptr> & p_out) : m_out(p_out) {m_out.remove_all();}
bool on_item(t_size p_index,const metadb_handle_ptr & p_location,bool b_selected)
{
if (b_selected) m_out.add_item(p_location);
@@ -106,6 +105,13 @@ bool playlist_manager::playlist_is_item_selected(t_size p_playlist,t_size p_item return callback.get_state();
}
+metadb_handle_ptr playlist_manager::playlist_get_item_handle(t_size playlist, t_size item) {
+ metadb_handle_ptr temp;
+ if (!playlist_get_item_handle(temp, playlist, item)) throw pfc::exception_invalid_params();
+ PFC_ASSERT( temp.is_valid() );
+ return temp;
+
+}
bool playlist_manager::playlist_get_item_handle(metadb_handle_ptr & p_out,t_size p_playlist,t_size p_item)
{
enum_items_callback_retrieve_item callback;
@@ -114,8 +120,11 @@ bool playlist_manager::playlist_get_item_handle(metadb_handle_ptr & p_out,t_size return p_out.is_valid();
}
-bool playlist_manager::playlist_move_selection(t_size p_playlist,int p_delta)
-{
+void playlist_manager::g_make_selection_move_permutation(t_size * p_output,t_size p_count,const bit_array & p_selection,int p_delta) {
+ pfc::create_move_items_permutation(p_output,p_count,p_selection,p_delta);
+}
+
+bool playlist_manager::playlist_move_selection(t_size p_playlist,int p_delta) {
if (p_delta==0) return true;
t_size count = playlist_get_item_count(p_playlist);
@@ -123,44 +132,8 @@ bool playlist_manager::playlist_move_selection(t_size p_playlist,int p_delta) pfc::array_t<t_size> order; order.set_size(count);
pfc::array_t<bool> selection; selection.set_size(count);
- {
- t_size n;
- for(n=0;n<count;n++) order[n]=n;
- }
-
playlist_get_selection_mask(p_playlist,bit_array_var_table(selection.get_ptr(),selection.get_size()));
-
- if (p_delta<0)
- {
- for(;p_delta<0;p_delta++)
- {
- t_size idx;
- for(idx=1;idx<count;idx++)
- {
- if (selection[idx] && !selection[idx-1])
- {
- pfc::swap_t(order[idx],order[idx-1]);
- pfc::swap_t(selection[idx],selection[idx-1]);
- }
- }
- }
- }
- else
- {
- for(;p_delta>0;p_delta--)
- {
- t_size idx;
- for(idx=count-2;(int)idx>=0;idx--)
- {
- if (selection[idx] && !selection[idx+1])
- {
- pfc::swap_t(order[idx],order[idx+1]);
- pfc::swap_t(selection[idx],selection[idx+1]);
- }
- }
- }
- }
-
+ g_make_selection_move_permutation(order.get_ptr(),count,bit_array_table(selection.get_ptr(),selection.get_size()),p_delta);
return playlist_reorder_items(p_playlist,order.get_ptr(),count);
}
@@ -168,27 +141,27 @@ bool playlist_manager::playlist_move_selection(t_size p_playlist,int p_delta) t_size playlist_manager::activeplaylist_get_item_count()
{
t_size playlist = get_active_playlist();
- if (playlist == infinite) return 0;
+ if (playlist == pfc_infinite) return 0;
else return playlist_get_item_count(playlist);
}
void playlist_manager::activeplaylist_enum_items(enum_items_callback & p_callback,const bit_array & p_mask)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_enum_items(playlist,p_callback,p_mask);
+ if (playlist != pfc_infinite) playlist_enum_items(playlist,p_callback,p_mask);
}
t_size playlist_manager::activeplaylist_get_focus_item()
{
t_size playlist = get_active_playlist();
- if (playlist == infinite) return infinite;
+ if (playlist == pfc_infinite) return pfc_infinite;
else return playlist_get_focus_item(playlist);
}
bool playlist_manager::activeplaylist_get_name(pfc::string_base & p_out)
{
t_size playlist = get_active_playlist();
- if (playlist == infinite) return false;
+ if (playlist == pfc_infinite) return false;
else return playlist_get_name(playlist,p_out);
}
@@ -196,92 +169,98 @@ bool playlist_manager::activeplaylist_get_name(pfc::string_base & p_out) bool playlist_manager::activeplaylist_reorder_items(const t_size * order,t_size count)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_reorder_items(playlist,order,count);
+ if (playlist != pfc_infinite) return playlist_reorder_items(playlist,order,count);
else return false;
}
void playlist_manager::activeplaylist_set_selection(const bit_array & affected,const bit_array & status)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_set_selection(playlist,affected,status);
+ if (playlist != pfc_infinite) playlist_set_selection(playlist,affected,status);
}
bool playlist_manager::activeplaylist_remove_items(const bit_array & mask)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_remove_items(playlist,mask);
+ if (playlist != pfc_infinite) return playlist_remove_items(playlist,mask);
else return false;
}
bool playlist_manager::activeplaylist_replace_item(t_size p_item,const metadb_handle_ptr & p_new_item)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_replace_item(playlist,p_item,p_new_item);
+ if (playlist != pfc_infinite) return playlist_replace_item(playlist,p_item,p_new_item);
else return false;
}
void playlist_manager::activeplaylist_set_focus_item(t_size p_item)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_set_focus_item(playlist,p_item);
+ if (playlist != pfc_infinite) playlist_set_focus_item(playlist,p_item);
}
t_size playlist_manager::activeplaylist_insert_items(t_size p_base,const pfc::list_base_const_t<metadb_handle_ptr> & data,const bit_array & p_selection)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_insert_items(playlist,p_base,data,p_selection);
- else return infinite;
+ if (playlist != pfc_infinite) return playlist_insert_items(playlist,p_base,data,p_selection);
+ else return pfc_infinite;
}
void playlist_manager::activeplaylist_ensure_visible(t_size p_item)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_ensure_visible(playlist,p_item);
+ if (playlist != pfc_infinite) playlist_ensure_visible(playlist,p_item);
}
bool playlist_manager::activeplaylist_rename(const char * p_name,t_size p_name_len)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_rename(playlist,p_name,p_name_len);
+ if (playlist != pfc_infinite) return playlist_rename(playlist,p_name,p_name_len);
else return false;
}
bool playlist_manager::activeplaylist_is_item_selected(t_size p_item)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_is_item_selected(playlist,p_item);
+ if (playlist != pfc_infinite) return playlist_is_item_selected(playlist,p_item);
else return false;
}
+metadb_handle_ptr playlist_manager::activeplaylist_get_item_handle(t_size p_item) {
+ metadb_handle_ptr temp;
+ if (!activeplaylist_get_item_handle(temp, p_item)) throw pfc::exception_invalid_params();
+ PFC_ASSERT( temp.is_valid() );
+ return temp;
+}
bool playlist_manager::activeplaylist_get_item_handle(metadb_handle_ptr & p_out,t_size p_item)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_get_item_handle(p_out,playlist,p_item);
+ if (playlist != pfc_infinite) return playlist_get_item_handle(p_out,playlist,p_item);
else return false;
}
void playlist_manager::activeplaylist_move_selection(int p_delta)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_move_selection(playlist,p_delta);
+ if (playlist != pfc_infinite) playlist_move_selection(playlist,p_delta);
}
void playlist_manager::activeplaylist_get_selection_mask(bit_array_var & out)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_get_selection_mask(playlist,out);
+ if (playlist != pfc_infinite) playlist_get_selection_mask(playlist,out);
}
void playlist_manager::activeplaylist_get_all_items(pfc::list_base_t<metadb_handle_ptr> & out)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_get_all_items(playlist,out);
+ if (playlist != pfc_infinite) playlist_get_all_items(playlist,out);
}
void playlist_manager::activeplaylist_get_selected_items(pfc::list_base_t<metadb_handle_ptr> & out)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_get_selected_items(playlist,out);
+ if (playlist != pfc_infinite) playlist_get_selected_items(playlist,out);
}
bool playlist_manager::remove_playlist(t_size idx)
@@ -302,18 +281,69 @@ void playlist_manager::playlist_clear(t_size p_playlist) void playlist_manager::activeplaylist_clear()
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_clear(playlist);
+ if (playlist != pfc_infinite) playlist_clear(playlist);
}
+bool playlist_manager::playlist_update_content(t_size playlist, metadb_handle_list_cref content, bool bUndoBackup) {
+ metadb_handle_list old;
+ playlist_get_all_items(playlist, old);
+ if (old.get_size() == 0) {
+ if (content.get_size() == 0) return false;
+ if (bUndoBackup) playlist_undo_backup(playlist);
+ playlist_add_items(playlist, content, bit_array_false());
+ return true;
+ }
+ pfc::avltree_t<metadb_handle::nnptr> itemsOld, itemsNew;
+
+ for(t_size walk = 0; walk < old.get_size(); ++walk) itemsOld += old[walk];
+ for(t_size walk = 0; walk < content.get_size(); ++walk) itemsNew += content[walk];
+ bit_array_bittable removeMask(old.get_size());
+ bit_array_bittable filterMask(content.get_size());
+ bool gotNew = false, filterNew = false, gotRemove = false;
+ for(t_size walk = 0; walk < content.get_size(); ++walk) {
+ const bool state = !itemsOld.have_item(content[walk]);
+ if (state) gotNew = true;
+ else filterNew = true;
+ filterMask.set(walk, state);
+ }
+ for(t_size walk = 0; walk < old.get_size(); ++walk) {
+ const bool state = !itemsNew.have_item(old[walk]);
+ if (state) gotRemove = true;
+ removeMask.set(walk, state);
+ }
+ if (!gotNew && !gotRemove) return false;
+ if (bUndoBackup) playlist_undo_backup(playlist);
+ if (gotRemove) {
+ playlist_remove_items(playlist, removeMask);
+ }
+ if (gotNew) {
+ if (filterNew) {
+ metadb_handle_list temp(content);
+ temp.filter_mask(filterMask);
+ playlist_add_items(playlist, temp, bit_array_false());
+ } else {
+ playlist_add_items(playlist, content, bit_array_false());
+ }
+ }
+
+ {
+ playlist_get_all_items(playlist, old);
+ pfc::array_t<t_size> order;
+ if (pfc::guess_reorder_pattern<pfc::list_base_const_t<metadb_handle_ptr> >(order, old, content)) {
+ playlist_reorder_items(playlist, order.get_ptr(), order.get_size());
+ }
+ }
+ return true;
+}
bool playlist_manager::playlist_add_items(t_size playlist,const pfc::list_base_const_t<metadb_handle_ptr> & data,const bit_array & p_selection)
{
- return playlist_insert_items(playlist,infinite,data,p_selection) != infinite;
+ return playlist_insert_items(playlist,pfc_infinite,data,p_selection) != pfc_infinite;
}
bool playlist_manager::activeplaylist_add_items(const pfc::list_base_const_t<metadb_handle_ptr> & data,const bit_array & p_selection)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_add_items(playlist,data,p_selection);
+ if (playlist != pfc_infinite) return playlist_add_items(playlist,data,p_selection);
else return false;
}
@@ -323,13 +353,13 @@ bool playlist_manager::playlist_insert_items_filter(t_size p_playlist,t_size p_b static_api_ptr_t<playlist_incoming_item_filter> api;
if (!api->filter_items(p_data,temp))
return false;
- return playlist_insert_items(p_playlist,p_base,temp,bit_array_val(p_select)) != infinite;
+ return playlist_insert_items(p_playlist,p_base,temp,bit_array_val(p_select)) != pfc_infinite;
}
bool playlist_manager::activeplaylist_insert_items_filter(t_size p_base,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_insert_items_filter(playlist,p_base,p_data,p_select);
+ if (playlist != pfc_infinite) return playlist_insert_items_filter(playlist,p_base,p_data,p_select);
else return false;
}
@@ -338,33 +368,33 @@ bool playlist_manager::playlist_insert_locations(t_size p_playlist,t_size p_base metadb_handle_list temp;
static_api_ptr_t<playlist_incoming_item_filter> api;
if (!api->process_locations(p_urls,temp,true,0,0,p_parentwnd)) return false;
- return playlist_insert_items(p_playlist,p_base,temp,bit_array_val(p_select)) != infinite;
+ return playlist_insert_items(p_playlist,p_base,temp,bit_array_val(p_select)) != pfc_infinite;
}
bool playlist_manager::activeplaylist_insert_locations(t_size p_base,const pfc::list_base_const_t<const char*> & p_urls,bool p_select,HWND p_parentwnd)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_insert_locations(playlist,p_base,p_urls,p_select,p_parentwnd);
+ if (playlist != pfc_infinite) return playlist_insert_locations(playlist,p_base,p_urls,p_select,p_parentwnd);
else return false;
}
bool playlist_manager::playlist_add_items_filter(t_size p_playlist,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select)
{
- return playlist_insert_items_filter(p_playlist,infinite,p_data,p_select);
+ return playlist_insert_items_filter(p_playlist,pfc_infinite,p_data,p_select);
}
bool playlist_manager::activeplaylist_add_items_filter(const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select)
{
- return activeplaylist_insert_items_filter(infinite,p_data,p_select);
+ return activeplaylist_insert_items_filter(pfc_infinite,p_data,p_select);
}
bool playlist_manager::playlist_add_locations(t_size p_playlist,const pfc::list_base_const_t<const char*> & p_urls,bool p_select,HWND p_parentwnd)
{
- return playlist_insert_locations(p_playlist,infinite,p_urls,p_select,p_parentwnd);
+ return playlist_insert_locations(p_playlist,pfc_infinite,p_urls,p_select,p_parentwnd);
}
bool playlist_manager::activeplaylist_add_locations(const pfc::list_base_const_t<const char*> & p_urls,bool p_select,HWND p_parentwnd)
{
- return activeplaylist_insert_locations(infinite,p_urls,p_select,p_parentwnd);
+ return activeplaylist_insert_locations(pfc_infinite,p_urls,p_select,p_parentwnd);
}
void playlist_manager::reset_playing_playlist()
@@ -380,26 +410,26 @@ void playlist_manager::playlist_clear_selection(t_size p_playlist) void playlist_manager::activeplaylist_clear_selection()
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_clear_selection(playlist);
+ if (playlist != pfc_infinite) playlist_clear_selection(playlist);
}
void playlist_manager::activeplaylist_undo_backup()
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_undo_backup(playlist);
+ if (playlist != pfc_infinite) playlist_undo_backup(playlist);
}
bool playlist_manager::activeplaylist_undo_restore()
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_undo_restore(playlist);
+ if (playlist != pfc_infinite) return playlist_undo_restore(playlist);
else return false;
}
bool playlist_manager::activeplaylist_redo_restore()
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_redo_restore(playlist);
+ if (playlist != pfc_infinite) return playlist_redo_restore(playlist);
else return false;
}
@@ -414,13 +444,13 @@ void playlist_manager::playlist_remove_selection(t_size p_playlist,bool p_crop) void playlist_manager::activeplaylist_remove_selection(bool p_crop)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_remove_selection(playlist,p_crop);
+ if (playlist != pfc_infinite) playlist_remove_selection(playlist,p_crop);
}
void playlist_manager::activeplaylist_item_format_title(t_size p_item,titleformat_hook * p_hook,pfc::string_base & out,const service_ptr_t<titleformat_object> & p_script,titleformat_text_filter * p_filter,play_control::t_display_level p_playback_info_level)
{
t_size playlist = get_active_playlist();
- if (playlist == infinite) out = "NJET";
+ if (playlist == pfc_infinite) out = "NJET";
else playlist_item_format_title(playlist,p_item,p_hook,out,p_script,p_filter,p_playback_info_level);
}
@@ -432,7 +462,7 @@ void playlist_manager::playlist_set_selection_single(t_size p_playlist,t_size p_ void playlist_manager::activeplaylist_set_selection_single(t_size p_item,bool p_state)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_set_selection_single(playlist,p_item,p_state);
+ if (playlist != pfc_infinite) playlist_set_selection_single(playlist,p_item,p_state);
}
t_size playlist_manager::playlist_get_selection_count(t_size p_playlist,t_size p_max)
@@ -445,57 +475,66 @@ t_size playlist_manager::playlist_get_selection_count(t_size p_playlist,t_size p t_size playlist_manager::activeplaylist_get_selection_count(t_size p_max)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_get_selection_count(playlist,p_max);
+ if (playlist != pfc_infinite) return playlist_get_selection_count(playlist,p_max);
else return 0;
}
bool playlist_manager::playlist_get_focus_item_handle(metadb_handle_ptr & p_out,t_size p_playlist)
{
t_size index = playlist_get_focus_item(p_playlist);
- if (index == infinite) return false;
+ if (index == pfc_infinite) return false;
return playlist_get_item_handle(p_out,p_playlist,index);
}
bool playlist_manager::activeplaylist_get_focus_item_handle(metadb_handle_ptr & p_out)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_get_focus_item_handle(p_out,playlist);
+ if (playlist != pfc_infinite) return playlist_get_focus_item_handle(p_out,playlist);
else return false;
}
t_size playlist_manager::find_playlist(const char * p_name,t_size p_name_length)
{
t_size n, m = get_playlist_count();
- pfc::string8_fastalloc temp;
- for(n=0;n<m;n++)
- {
+ pfc::string_formatter temp;
+ for(n=0;n<m;n++) {
if (!playlist_get_name(n,temp)) break;
if (stricmp_utf8_ex(temp,temp.length(),p_name,p_name_length) == 0) return n;
}
- return infinite;
+ return pfc_infinite;
}
+t_size playlist_manager::find_or_create_playlist_unlocked(const char * p_name, t_size p_name_length) {
+ t_size n, m = get_playlist_count();
+ pfc::string_formatter temp;
+ for(n=0;n<m;n++) {
+ if (!playlist_lock_is_present(n) && playlist_get_name(n,temp)) {
+ if (stricmp_utf8_ex(temp,~0,p_name,p_name_length) == 0) return n;
+ }
+ }
+ return create_playlist(p_name,p_name_length,pfc_infinite);
+}
t_size playlist_manager::find_or_create_playlist(const char * p_name,t_size p_name_length)
{
t_size index = find_playlist(p_name,p_name_length);
- if (index != infinite) return index;
- return create_playlist(p_name,p_name_length,infinite);
+ if (index != pfc_infinite) return index;
+ return create_playlist(p_name,p_name_length,pfc_infinite);
}
t_size playlist_manager::create_playlist_autoname(t_size p_index) {
static const char new_playlist_text[] = "New Playlist";
- if (find_playlist(new_playlist_text,infinite) == infinite) return create_playlist(new_playlist_text,infinite,p_index);
+ if (find_playlist(new_playlist_text,pfc_infinite) == pfc_infinite) return create_playlist(new_playlist_text,pfc_infinite,p_index);
for(t_size walk = 2; ; walk++) {
pfc::string_fixed_t<64> namebuffer;
namebuffer << new_playlist_text << " (" << walk << ")";
- if (find_playlist(namebuffer,infinite) == infinite) return create_playlist(namebuffer,infinite,p_index);
+ if (find_playlist(namebuffer,pfc_infinite) == pfc_infinite) return create_playlist(namebuffer,pfc_infinite,p_index);
}
}
bool playlist_manager::activeplaylist_sort_by_format(const char * spec,bool p_sel_only)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) return playlist_sort_by_format(playlist,spec,p_sel_only);
+ if (playlist != pfc_infinite) return playlist_sort_by_format(playlist,spec,p_sel_only);
else return false;
}
@@ -518,13 +557,14 @@ void playlist_manager::playlist_get_items(t_size p_playlist,pfc::list_base_t<met void playlist_manager::activeplaylist_get_items(pfc::list_base_t<metadb_handle_ptr> & out,const bit_array & p_mask)
{
t_size playlist = get_active_playlist();
- if (playlist != infinite) playlist_get_items(playlist,out,p_mask);
+ if (playlist != pfc_infinite) playlist_get_items(playlist,out,p_mask);
+ else out.remove_all();
}
void playlist_manager::active_playlist_fix()
{
t_size playlist = get_active_playlist();
- if (playlist == infinite)
+ if (playlist == pfc_infinite)
{
t_size max = get_playlist_count();
if (max == 0)
@@ -545,7 +585,7 @@ namespace { enum_items_callback_remove_list(const metadb_handle_list & p_data,bit_array_var & p_table) : m_data(p_data), m_table(p_table), m_found(0) {}
bool on_item(t_size p_index,const metadb_handle_ptr & p_location,bool b_selected)
{
- bool found = m_data.bsearch_by_pointer(p_location) != infinite;
+ bool found = m_data.bsearch_by_pointer(p_location) != pfc_infinite;
m_table.set(p_index,found);
if (found) m_found++;
return true;
@@ -558,7 +598,7 @@ namespace { void playlist_manager::remove_items_from_all_playlists(const pfc::list_base_const_t<metadb_handle_ptr> & p_data)
{
t_size playlist_num, playlist_max = get_playlist_count();
- if (playlist_max != infinite)
+ if (playlist_max != pfc_infinite)
{
metadb_handle_list temp;
temp.add_items(p_data);
@@ -566,7 +606,7 @@ void playlist_manager::remove_items_from_all_playlists(const pfc::list_base_cons for(playlist_num = 0; playlist_num < playlist_max; playlist_num++ )
{
t_size playlist_item_count = playlist_get_item_count(playlist_num);
- if (playlist_item_count == infinite) break;
+ if (playlist_item_count == pfc_infinite) break;
bit_array_bittable table(playlist_item_count);
enum_items_callback_remove_list callback(temp,table);
playlist_enum_items(playlist_num,callback,bit_array_true());
@@ -579,7 +619,7 @@ void playlist_manager::remove_items_from_all_playlists(const pfc::list_base_cons bool playlist_manager::get_all_items(pfc::list_base_t<metadb_handle_ptr> & out)
{
t_size n, m = get_playlist_count();
- if (m == infinite) return false;
+ if (m == pfc_infinite) return false;
enum_items_callback_retrieve_all_items callback(out);
for(n=0;n<m;n++)
{
@@ -591,21 +631,21 @@ bool playlist_manager::get_all_items(pfc::list_base_t<metadb_handle_ptr> & out) t_uint32 playlist_manager::activeplaylist_lock_get_filter_mask()
{
t_size playlist = get_active_playlist();
- if (playlist == infinite) return ~0;
+ if (playlist == pfc_infinite) return ~0;
else return playlist_lock_get_filter_mask(playlist);
}
bool playlist_manager::activeplaylist_is_undo_available()
{
t_size playlist = get_active_playlist();
- if (playlist == infinite) return false;
+ if (playlist == pfc_infinite) return false;
else return playlist_is_undo_available(playlist);
}
bool playlist_manager::activeplaylist_is_redo_available()
{
t_size playlist = get_active_playlist();
- if (playlist == infinite) return false;
+ if (playlist == pfc_infinite) return false;
else return playlist_is_redo_available(playlist);
}
@@ -644,7 +684,7 @@ bool t_playback_queue_item::operator!=(const t_playback_queue_item & p_item) con bool playlist_manager::activeplaylist_execute_default_action(t_size p_item) {
t_size idx = get_active_playlist();
- if (idx == infinite) return false;
+ if (idx == pfc_infinite) return false;
else return playlist_execute_default_action(idx,p_item);
}
@@ -697,3 +737,133 @@ bool dropped_files_data_impl::to_handles(pfc::list_base_t<metadb_handle_ptr> & p return true;
}
}
+
+void playlist_manager::playlist_activate_delta(int p_delta) {
+ const t_size total = get_playlist_count();
+ if (total > 0) {
+ t_size active = get_active_playlist();
+
+ //clip p_delta to -(total-1)...(total-1) range
+ if (p_delta < 0) {
+ p_delta = - ( (-p_delta) % (t_ssize)total );
+ } else {
+ p_delta = p_delta % total;
+ }
+ if (p_delta != 0) {
+ if (active == pfc_infinite) {
+ //special case when no playlist is active
+ if (p_delta > 0) {
+ active = (t_size)(p_delta - 1);
+ } else {
+ active = (total + p_delta);//p_delta is negative
+ }
+ } else {
+ active = (t_size) (active + total + p_delta) % total;
+ }
+ set_active_playlist(active % total);
+ }
+ }
+}
+namespace {
+ class enum_items_callback_get_selected_count : public playlist_manager::enum_items_callback {
+ public:
+ enum_items_callback_get_selected_count() : m_found() {}
+ t_size get_count() const {return m_found;}
+ bool on_item(t_size p_index,const metadb_handle_ptr & p_location,bool b_selected) {
+ if (b_selected) m_found++;
+ return true;
+ }
+ private:
+ t_size m_found;
+ };
+}
+t_size playlist_manager::playlist_get_selected_count(t_size p_playlist,bit_array const & p_mask) {
+ enum_items_callback_get_selected_count callback;
+ playlist_enum_items(p_playlist,callback,p_mask);
+ return callback.get_count();
+}
+
+namespace {
+ class enum_items_callback_find_item : public playlist_manager::enum_items_callback {
+ public:
+ enum_items_callback_find_item(metadb_handle_ptr p_lookingFor) : m_result(pfc_infinite), m_lookingFor(p_lookingFor) {}
+ t_size result() const {return m_result;}
+ bool on_item(t_size p_index,const metadb_handle_ptr & p_location,bool b_selected) {
+ if (p_location == m_lookingFor) {
+ m_result = p_index;
+ return false;
+ } else {
+ return true;
+ }
+ }
+ private:
+ metadb_handle_ptr m_lookingFor;
+ t_size m_result;
+ };
+ class enum_items_callback_find_item_selected : public playlist_manager::enum_items_callback {
+ public:
+ enum_items_callback_find_item_selected(metadb_handle_ptr p_lookingFor) : m_result(pfc_infinite), m_lookingFor(p_lookingFor) {}
+ t_size result() const {return m_result;}
+ bool on_item(t_size p_index,const metadb_handle_ptr & p_location,bool b_selected) {
+ if (b_selected && p_location == m_lookingFor) {
+ m_result = p_index;
+ return false;
+ } else {
+ return true;
+ }
+ }
+ private:
+ metadb_handle_ptr m_lookingFor;
+ t_size m_result;
+ };
+}
+
+bool playlist_manager::playlist_find_item(t_size p_playlist,metadb_handle_ptr p_item,t_size & p_result) {
+ enum_items_callback_find_item callback(p_item);
+ playlist_enum_items(p_playlist,callback,bit_array_true());
+ t_size result = callback.result();
+ if (result == pfc_infinite) return false;
+ p_result = result;
+ return true;
+}
+bool playlist_manager::playlist_find_item_selected(t_size p_playlist,metadb_handle_ptr p_item,t_size & p_result) {
+ enum_items_callback_find_item_selected callback(p_item);
+ playlist_enum_items(p_playlist,callback,bit_array_true());
+ t_size result = callback.result();
+ if (result == pfc_infinite) return false;
+ p_result = result;
+ return true;
+}
+t_size playlist_manager::playlist_set_focus_by_handle(t_size p_playlist,metadb_handle_ptr p_item) {
+ t_size index;
+ if (!playlist_find_item(p_playlist,p_item,index)) index = pfc_infinite;
+ playlist_set_focus_item(p_playlist,index);
+ return index;
+}
+bool playlist_manager::activeplaylist_find_item(metadb_handle_ptr p_item,t_size & p_result) {
+ t_size playlist = get_active_playlist();
+ if (playlist == pfc_infinite) return false;
+ return playlist_find_item(playlist,p_item,p_result);
+}
+t_size playlist_manager::activeplaylist_set_focus_by_handle(metadb_handle_ptr p_item) {
+ t_size playlist = get_active_playlist();
+ if (playlist == pfc_infinite) return pfc_infinite;
+ return playlist_set_focus_by_handle(playlist,p_item);
+}
+
+pfc::com_ptr_t<interface IDataObject> playlist_incoming_item_filter::create_dataobject_ex(metadb_handle_list_cref data) {
+ pfc::com_ptr_t<interface IDataObject> temp; temp.attach( create_dataobject(data) ); PFC_ASSERT( temp.is_valid() ); return temp;
+}
+
+void playlist_manager_v3::recycler_restore_by_id(t_uint32 id) {
+ t_size which = recycler_find_by_id(id);
+ if (which != ~0) recycler_restore(which);
+}
+
+t_size playlist_manager_v3::recycler_find_by_id(t_uint32 id) {
+ const t_size total = recycler_get_count();
+ for(t_size walk = 0; walk < total; ++walk) {
+ if (id == recycler_get_id(walk)) return walk;
+ }
+ return ~0;
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist.h index 2d783cb..0fef24d 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist.h @@ -1,6 +1,3 @@ -#ifndef _PLAYLIST_H_
-#define _PLAYLIST_H_
-
//! This interface allows filtering of playlist modification operations.\n
//! Implemented by components "locking" playlists; use playlist_manager::playlist_lock_install() etc to takeover specific playlist with your instance of playlist_lock.
class NOVTABLE playlist_lock : public service_base {
@@ -103,7 +100,7 @@ public: //! @param p_index Index at which to insert new playlist; set to infinite to put it at the end of playlist list.
//! @returns Actual index of newly inserted playlist, infinite on failure (call from invalid context).
virtual t_size create_playlist(const char * p_name,t_size p_name_length,t_size p_index) = 0;
- //! Reorders playlist list according to specified permutation.
+ //! Reorders the playlist list according to specified permutation.
//! @returns True on success, false on failure (call from invalid context).
virtual bool reorder(const t_size * p_order,t_size p_count) = 0;
@@ -114,7 +111,7 @@ public: virtual void playlist_enum_items(t_size p_playlist,enum_items_callback & p_callback,const bit_array & p_mask) = 0;
//! Retrieves index of focus item on specified playlist; returns infinite when no item has focus.
virtual t_size playlist_get_focus_item(t_size p_playlist) = 0;
- //! Retrieves name of specified playlist.
+ //! Retrieves name of specified playlist. Should never fail unless the parameters are invalid.
virtual bool playlist_get_name(t_size p_playlist,pfc::string_base & p_out) = 0;
//! Reorders items in specified playlist according to specified permutation.
@@ -248,8 +245,10 @@ public: //! Helper; returns whether specified item on specified playlist is selected or not.
bool playlist_is_item_selected(t_size p_playlist,t_size p_item);
- //! Helper; retrieves metadb_handle of specified playlist item. Returns true on success, false on failure (invalid parameters).
+ //! Helper; retrieves metadb_handle of the specified playlist item. Returns true on success, false on failure (invalid parameters).
bool playlist_get_item_handle(metadb_handle_ptr & p_out,t_size p_playlist,t_size p_item);
+ //! Helper; retrieves metadb_handle of the specified playlist item; throws pfc::exception_invalid_params() on failure.
+ metadb_handle_ptr playlist_get_item_handle(t_size playlist, t_size item);
//! Moves selected items up/down in the playlist by specified offset.
//! @param p_playlist Index of playlist to alter.
@@ -268,6 +267,10 @@ public: void playlist_clear_selection(t_size p_playlist);
void playlist_remove_selection(t_size p_playlist,bool p_crop = false);
+
+ //! Changes contents of the specified playlist to the specified items, trying to reuse existing playlist content as much as possible (preserving selection/focus/etc). Order of items in playlist not guaranteed to be the same as in the specified item list.
+ //! @returns true if the playlist has been altered, false if there was nothing to update.
+ bool playlist_update_content(t_size playlist, metadb_handle_list_cref content, bool bUndoBackup);
//retrieving status
t_size activeplaylist_get_item_count();
@@ -291,6 +294,7 @@ public: bool activeplaylist_is_item_selected(t_size p_item);
bool activeplaylist_get_item_handle(metadb_handle_ptr & item,t_size p_item);
+ metadb_handle_ptr activeplaylist_get_item_handle(t_size p_item);
void activeplaylist_move_selection(int p_delta);
void activeplaylist_get_selection_mask(bit_array_var & out);
void activeplaylist_get_items(pfc::list_base_t<metadb_handle_ptr> & out,const bit_array & p_mask);
@@ -303,9 +307,9 @@ public: bool playlist_insert_items_filter(t_size p_playlist,t_size p_base,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select);
bool activeplaylist_insert_items_filter(t_size p_base,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select);
- //! DEPRECATED (0.9.3) - use playlist_incoming_item_filter_v2::process_locations_async whenever possible
+ //! \deprecated (since 0.9.3) Use playlist_incoming_item_filter_v2::process_locations_async whenever possible
bool playlist_insert_locations(t_size p_playlist,t_size p_base,const pfc::list_base_const_t<const char*> & p_urls,bool p_select,HWND p_parentwnd);
- //! DEPRECATED (0.9.3) - use playlist_incoming_item_filter_v2::process_locations_async whenever possible
+ //! \deprecated (since 0.9.3) Use playlist_incoming_item_filter_v2::process_locations_async whenever possible
bool activeplaylist_insert_locations(t_size p_base,const pfc::list_base_const_t<const char*> & p_urls,bool p_select,HWND p_parentwnd);
bool playlist_add_items_filter(t_size p_playlist,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,bool p_select);
@@ -330,10 +334,11 @@ public: bool playlist_get_focus_item_handle(metadb_handle_ptr & p_item,t_size p_playlist);
bool activeplaylist_get_focus_item_handle(metadb_handle_ptr & item);
- t_size find_playlist(const char * p_name,t_size p_name_length);
- t_size find_or_create_playlist(const char * p_name,t_size p_name_length);
+ t_size find_playlist(const char * p_name,t_size p_name_length = ~0);
+ t_size find_or_create_playlist(const char * p_name,t_size p_name_length = ~0);
+ t_size find_or_create_playlist_unlocked(const char * p_name,t_size p_name_length = ~0);
- t_size create_playlist_autoname(t_size p_index = infinite);
+ t_size create_playlist_autoname(t_size p_index = ~0);
bool activeplaylist_sort_by_format(const char * spec,bool p_sel_only);
@@ -349,21 +354,172 @@ public: bool get_all_items(pfc::list_base_t<metadb_handle_ptr> & out);
+ void playlist_activate_delta(int p_delta);
+ void playlist_activate_next() {playlist_activate_delta(1);}
+ void playlist_activate_previous() {playlist_activate_delta(-1);}
+
+
+ t_size playlist_get_selected_count(t_size p_playlist,bit_array const & p_mask);
+ t_size activeplaylist_get_selected_count(bit_array const & p_mask) {return playlist_get_selected_count(get_active_playlist(),p_mask);}
+
+ bool playlist_find_item(t_size p_playlist,metadb_handle_ptr p_item,t_size & p_result);//inefficient, walks entire playlist
+ bool playlist_find_item_selected(t_size p_playlist,metadb_handle_ptr p_item,t_size & p_result);//inefficient, walks entire playlist
+ t_size playlist_set_focus_by_handle(t_size p_playlist,metadb_handle_ptr p_item);
+ bool activeplaylist_find_item(metadb_handle_ptr p_item,t_size & p_result);//inefficient, walks entire playlist
+ t_size activeplaylist_set_focus_by_handle(metadb_handle_ptr p_item);
+
+ static void g_make_selection_move_permutation(t_size * p_output,t_size p_count,const bit_array & p_selection,int p_delta);
+
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playlist_manager);
};
+//! Extension of the playlist_manager service that manages playlist properties.
+//! Playlist properties come in two flavors: persistent and runtime.
+//! Persistent properties are blocks of binary that that will be preserved when the application is exited and restarted.
+//! Runtime properties are service pointers that will be lost when the application exits.
+//! \since 0.9.5
+class NOVTABLE playlist_manager_v2 : public playlist_manager {
+public:
+ //! Write a persistent playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_stream stream that contains the data that will be associated with the property
+ //! \param p_abort abort_callback that will be used when reading from p_stream
+ virtual void playlist_set_property(t_size p_playlist,const GUID & p_property,stream_reader * p_stream,t_size p_size_hint,abort_callback & p_abort) = 0;
+ //! Read a persistent playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_stream stream that will receive the stored data
+ //! \param p_abort abort_callback that will be used when writing to p_stream
+ //! \return true if the property exists, false otherwise
+ virtual bool playlist_get_property(t_size p_playlist,const GUID & p_property,stream_writer * p_stream,abort_callback & p_abort) = 0;
+ //! Test existence of a persistent playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \return true if the property exists, false otherwise
+ virtual bool playlist_have_property(t_size p_playlist,const GUID & p_property) = 0;
+ //! Remove a persistent playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \return true if the property existed, false otherwise
+ virtual bool playlist_remove_property(t_size p_playlist,const GUID & p_property) = 0;
+
+ //! Write a runtime playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_data service pointer that will be associated with the property
+ virtual void playlist_set_runtime_property(t_size p_playlist,const GUID & p_property,service_ptr_t<service_base> p_data) = 0;
+ //! Read a runtime playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_data base service pointer reference that will receive the stored servive pointer
+ //! \return true if the property exists, false otherwise
+ virtual bool playlist_get_runtime_property(t_size p_playlist,const GUID & p_property,service_ptr_t<service_base> & p_data) = 0;
+ //! Test existence of a runtime playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \return true if the property exists, false otherwise
+ virtual bool playlist_have_runtime_property(t_size p_playlist,const GUID & p_property) = 0;
+ //! Remove a runtime playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \return true if the property existed, false otherwise
+ virtual bool playlist_remove_runtime_property(t_size p_playlist,const GUID & p_property) = 0;
+
+ //! Write a persistent playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_data array that contains the data that will be associated with the property
+ template<typename t_array> void playlist_set_property(t_size p_playlist,const GUID & p_property,const t_array & p_data) {
+ PFC_STATIC_ASSERT( sizeof(p_data[0]) == 1 );
+ playlist_set_property(p_playlist,p_property,&stream_reader_memblock_ref(p_data),p_data.get_size(),abort_callback_dummy());
+ }
+ //! Read a persistent playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_data array that will receive the stored data
+ //! \return true if the property exists, false otherwise
+ template<typename t_array> bool playlist_get_property(t_size p_playlist,const GUID & p_property,t_array & p_data) {
+ PFC_STATIC_ASSERT( sizeof(p_data[0]) == 1 );
+ typedef pfc::array_t<t_uint8,pfc::alloc_fast_aggressive> t_temp;
+ t_temp temp;
+ if (!playlist_get_property(p_playlist,p_property,&stream_writer_buffer_append_ref_t<t_temp>(temp),abort_callback_dummy())) return false;
+ p_data = temp;
+ return true;
+ }
+ //! Read a runtime playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_data specific service pointer reference that will receive the stored servive pointer
+ //! \return true if the property exists and can be converted to the type of p_data, false otherwise
+ template<typename _t_interface> bool playlist_get_runtime_property(t_size p_playlist,const GUID & p_property,service_ptr_t<_t_interface> & p_data) {
+ service_ptr_t<service_base> ptr;
+ if (!playlist_get_runtime_property(p_playlist,p_property,ptr)) return false;
+ return ptr->service_query_t(p_data);
+ }
+
+ //! Write a persistent playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_value integer that will be associated with the property
+ template<typename _t_int>
+ void playlist_set_property_int(t_size p_playlist,const GUID & p_property,_t_int p_value) {
+ pfc::array_t<t_uint8> temp; temp.set_size(sizeof(_t_int));
+ pfc::encode_little_endian(temp.get_ptr(),p_value);
+ playlist_set_property(p_playlist,p_property,temp);
+ }
+ //! Read a persistent playlist property.
+ //! \param p_playlist Index of the playlist
+ //! \param p_property GUID that identifies the property
+ //! \param p_value integer reference that will receive the stored data
+ //! \return true if the property exists and if the data is compatible with p_value, false otherwise
+ template<typename _t_int>
+ bool playlist_get_property_int(t_size p_playlist,const GUID & p_property,_t_int & p_value) {
+ pfc::array_t<t_uint8> temp;
+ if (!playlist_get_property(p_playlist,p_property,temp)) return false;
+ if (temp.get_size() != sizeof(_t_int)) return false;
+ pfc::decode_little_endian(p_value,temp.get_ptr());
+ return true;
+ }
+
+ FB2K_MAKE_SERVICE_INTERFACE(playlist_manager_v2,playlist_manager)
+};
+
+//! \since 0.9.5
+class NOVTABLE playlist_manager_v3 : public playlist_manager_v2 {
+ FB2K_MAKE_SERVICE_INTERFACE(playlist_manager_v3,playlist_manager_v2)
+public:
+ virtual t_size recycler_get_count() = 0;
+ virtual void recycler_get_content(t_size which, metadb_handle_list_ref out) = 0;
+ virtual void recycler_get_name(t_size which, pfc::string_base & out) = 0;
+ virtual t_uint32 recycler_get_id(t_size which) = 0;
+ virtual void recycler_purge(const bit_array & mask) = 0;
+ virtual void recycler_restore(t_size which) = 0;
+
+ void recycler_restore_by_id(t_uint32 id);
+ t_size recycler_find_by_id(t_uint32 id);
+};
+
+//! \since 0.9.5.4
+class NOVTABLE playlist_manager_v4 : public playlist_manager_v3 {
+ FB2K_MAKE_SERVICE_INTERFACE(playlist_manager_v4, playlist_manager_v3)
+public:
+ virtual void playlist_get_sideinfo(t_size which, stream_writer * stream, abort_callback & abort) = 0;
+ virtual t_size create_playlist_ex(const char * p_name,t_size p_name_length,t_size p_index, metadb_handle_list_cref content, stream_reader * sideInfo, abort_callback & abort) = 0;
+};
+
class NOVTABLE playlist_callback
{
public:
- virtual void FB2KAPI on_items_added(t_size p_playlist,t_size p_start, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection)=0;//inside any of these methods, you can call playlist APIs to get exact info about what happened (but only methods that read playlist state, not those that modify it)
- virtual void FB2KAPI on_items_reordered(t_size p_playlist,const t_size * p_order,t_size p_count)=0;//changes selection too; doesnt actually change set of items that are selected or item having focus, just changes their order
- virtual void FB2KAPI on_items_removing(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;//called before actually removing them
- virtual void FB2KAPI on_items_removed(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;
- virtual void FB2KAPI on_items_selection_change(t_size p_playlist,const bit_array & p_affected,const bit_array & p_state) = 0;
- virtual void FB2KAPI on_item_focus_change(t_size p_playlist,t_size p_from,t_size p_to)=0;//focus may be -1 when no item has focus; reminder: focus may also change on other callbacks
+ virtual void on_items_added(t_size p_playlist,t_size p_start, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection)=0;//inside any of these methods, you can call playlist APIs to get exact info about what happened (but only methods that read playlist state, not those that modify it)
+ virtual void on_items_reordered(t_size p_playlist,const t_size * p_order,t_size p_count)=0;//changes selection too; doesnt actually change set of items that are selected or item having focus, just changes their order
+ virtual void on_items_removing(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;//called before actually removing them
+ virtual void on_items_removed(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;
+ virtual void on_items_selection_change(t_size p_playlist,const bit_array & p_affected,const bit_array & p_state) = 0;
+ virtual void on_item_focus_change(t_size p_playlist,t_size p_from,t_size p_to)=0;//focus may be -1 when no item has focus; reminder: focus may also change on other callbacks
- virtual void FB2KAPI on_items_modified(t_size p_playlist,const bit_array & p_mask)=0;
- virtual void FB2KAPI on_items_modified_fromplayback(t_size p_playlist,const bit_array & p_mask,play_control::t_display_level p_level)=0;
+ virtual void on_items_modified(t_size p_playlist,const bit_array & p_mask)=0;
+ virtual void on_items_modified_fromplayback(t_size p_playlist,const bit_array & p_mask,play_control::t_display_level p_level)=0;
struct t_on_items_replaced_entry
{
@@ -371,20 +527,20 @@ public: metadb_handle_ptr m_old,m_new;
};
- virtual void FB2KAPI on_items_replaced(t_size p_playlist,const bit_array & p_mask,const pfc::list_base_const_t<t_on_items_replaced_entry> & p_data)=0;
+ virtual void on_items_replaced(t_size p_playlist,const bit_array & p_mask,const pfc::list_base_const_t<t_on_items_replaced_entry> & p_data)=0;
- virtual void FB2KAPI on_item_ensure_visible(t_size p_playlist,t_size p_idx)=0;
+ virtual void on_item_ensure_visible(t_size p_playlist,t_size p_idx)=0;
- virtual void FB2KAPI on_playlist_activate(t_size p_old,t_size p_new) = 0;
- virtual void FB2KAPI on_playlist_created(t_size p_index,const char * p_name,t_size p_name_len) = 0;
- virtual void FB2KAPI on_playlists_reorder(const t_size * p_order,t_size p_count) = 0;
- virtual void FB2KAPI on_playlists_removing(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) = 0;
- virtual void FB2KAPI on_playlists_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) = 0;
- virtual void FB2KAPI on_playlist_renamed(t_size p_index,const char * p_new_name,t_size p_new_name_len) = 0;
+ virtual void on_playlist_activate(t_size p_old,t_size p_new) = 0;
+ virtual void on_playlist_created(t_size p_index,const char * p_name,t_size p_name_len) = 0;
+ virtual void on_playlists_reorder(const t_size * p_order,t_size p_count) = 0;
+ virtual void on_playlists_removing(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) = 0;
+ virtual void on_playlists_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) = 0;
+ virtual void on_playlist_renamed(t_size p_index,const char * p_new_name,t_size p_new_name_len) = 0;
- virtual void FB2KAPI on_default_format_changed() = 0;
- virtual void FB2KAPI on_playback_order_changed(t_size p_new_index) = 0;
- virtual void FB2KAPI on_playlist_locked(t_size p_playlist,bool p_locked) = 0;
+ virtual void on_default_format_changed() = 0;
+ virtual void on_playback_order_changed(t_size p_new_index) = 0;
+ virtual void on_playlist_locked(t_size p_playlist,bool p_locked) = 0;
enum {
flag_on_items_added = 1 << 0,
@@ -408,6 +564,8 @@ public: flag_on_playlist_locked = 1 << 18,
flag_all = ~0,
+ flag_item_ops = flag_on_items_added | flag_on_items_reordered | flag_on_items_removing | flag_on_items_removed | flag_on_items_selection_change | flag_on_item_focus_change | flag_on_items_modified | flag_on_items_modified_fromplayback | flag_on_items_replaced | flag_on_item_ensure_visible,
+ flag_playlist_ops = flag_on_playlist_activate | flag_on_playlist_created | flag_on_playlists_reorder | flag_on_playlists_removing | flag_on_playlists_removed | flag_on_playlist_renamed | flag_on_playlist_locked,
};
protected:
playlist_callback() {}
@@ -425,23 +583,23 @@ public: class NOVTABLE playlist_callback_single
{
public:
- virtual void FB2KAPI on_items_added(t_size start, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection)=0;//inside any of these methods, you can call playlist APIs to get exact info about what happened (but only methods that read playlist state, not those that modify it)
- virtual void FB2KAPI on_items_reordered(const t_size * order,t_size count)=0;//changes selection too; doesnt actually change set of items that are selected or item having focus, just changes their order
- virtual void FB2KAPI on_items_removing(const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;//called before actually removing them
- virtual void FB2KAPI on_items_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;
- virtual void FB2KAPI on_items_selection_change(const bit_array & p_affected,const bit_array & p_state) = 0;
- virtual void FB2KAPI on_item_focus_change(t_size p_from,t_size p_to)=0;//focus may be -1 when no item has focus; reminder: focus may also change on other callbacks
- virtual void FB2KAPI on_items_modified(const bit_array & p_mask)=0;
- virtual void FB2KAPI on_items_modified_fromplayback(const bit_array & p_mask,play_control::t_display_level p_level)=0;
- virtual void FB2KAPI on_items_replaced(const bit_array & p_mask,const pfc::list_base_const_t<playlist_callback::t_on_items_replaced_entry> & p_data)=0;
- virtual void FB2KAPI on_item_ensure_visible(t_size p_idx)=0;
-
- virtual void FB2KAPI on_playlist_switch() = 0;
- virtual void FB2KAPI on_playlist_renamed(const char * p_new_name,t_size p_new_name_len) = 0;
- virtual void FB2KAPI on_playlist_locked(bool p_locked) = 0;
-
- virtual void FB2KAPI on_default_format_changed() = 0;
- virtual void FB2KAPI on_playback_order_changed(t_size p_new_index) = 0;
+ virtual void on_items_added(t_size p_base, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection)=0;//inside any of these methods, you can call playlist APIs to get exact info about what happened (but only methods that read playlist state, not those that modify it)
+ virtual void on_items_reordered(const t_size * p_order,t_size p_count)=0;//changes selection too; doesnt actually change set of items that are selected or item having focus, just changes their order
+ virtual void on_items_removing(const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;//called before actually removing them
+ virtual void on_items_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count)=0;
+ virtual void on_items_selection_change(const bit_array & p_affected,const bit_array & p_state) = 0;
+ virtual void on_item_focus_change(t_size p_from,t_size p_to)=0;//focus may be -1 when no item has focus; reminder: focus may also change on other callbacks
+ virtual void on_items_modified(const bit_array & p_mask)=0;
+ virtual void on_items_modified_fromplayback(const bit_array & p_mask,play_control::t_display_level p_level)=0;
+ virtual void on_items_replaced(const bit_array & p_mask,const pfc::list_base_const_t<playlist_callback::t_on_items_replaced_entry> & p_data)=0;
+ virtual void on_item_ensure_visible(t_size p_idx)=0;
+
+ virtual void on_playlist_switch() = 0;
+ virtual void on_playlist_renamed(const char * p_new_name,t_size p_new_name_len) = 0;
+ virtual void on_playlist_locked(bool p_locked) = 0;
+
+ virtual void on_default_format_changed() = 0;
+ virtual void on_playback_order_changed(t_size p_new_index) = 0;
enum {
flag_on_items_added = 1 << 0,
@@ -466,6 +624,80 @@ protected: ~playlist_callback_single() {}
};
+//! playlist_callback implementation helper - registers itself on creation / unregisters on destruction. Must not be instantiated statically!
+class playlist_callback_impl_base : public playlist_callback {
+public:
+ playlist_callback_impl_base(t_uint32 p_flags = 0) {
+ static_api_ptr_t<playlist_manager>()->register_callback(this,p_flags);
+ }
+ ~playlist_callback_impl_base() {
+ static_api_ptr_t<playlist_manager>()->unregister_callback(this);
+ }
+ void set_callback_flags(t_uint32 p_flags) {
+ static_api_ptr_t<playlist_manager>()->modify_callback(this,p_flags);
+ }
+ //dummy implementations - avoid possible pure virtual function calls!
+ void on_items_added(t_size p_playlist,t_size p_start, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection) {}
+ void on_items_reordered(t_size p_playlist,const t_size * p_order,t_size p_count) {}
+ void on_items_removing(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count) {}
+ void on_items_removed(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count) {}
+ void on_items_selection_change(t_size p_playlist,const bit_array & p_affected,const bit_array & p_state) {}
+ void on_item_focus_change(t_size p_playlist,t_size p_from,t_size p_to) {}
+
+ void on_items_modified(t_size p_playlist,const bit_array & p_mask) {}
+ void on_items_modified_fromplayback(t_size p_playlist,const bit_array & p_mask,play_control::t_display_level p_level) {}
+
+ void on_items_replaced(t_size p_playlist,const bit_array & p_mask,const pfc::list_base_const_t<t_on_items_replaced_entry> & p_data) {}
+
+ void on_item_ensure_visible(t_size p_playlist,t_size p_idx) {}
+
+ void on_playlist_activate(t_size p_old,t_size p_new) {}
+ void on_playlist_created(t_size p_index,const char * p_name,t_size p_name_len) {}
+ void on_playlists_reorder(const t_size * p_order,t_size p_count) {}
+ void on_playlists_removing(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) {}
+ void on_playlists_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) {}
+ void on_playlist_renamed(t_size p_index,const char * p_new_name,t_size p_new_name_len) {}
+
+ void on_default_format_changed() {}
+ void on_playback_order_changed(t_size p_new_index) {}
+ void on_playlist_locked(t_size p_playlist,bool p_locked) {}
+};
+
+//! playlist_callback_single implementation helper - registers itself on creation / unregisters on destruction. Must not be instantiated statically!
+class playlist_callback_single_impl_base : public playlist_callback_single {
+protected:
+ playlist_callback_single_impl_base(t_uint32 p_flags = 0) {
+ static_api_ptr_t<playlist_manager>()->register_callback(this,p_flags);
+ }
+ void set_callback_flags(t_uint32 p_flags) {
+ static_api_ptr_t<playlist_manager>()->modify_callback(this,p_flags);
+ }
+ ~playlist_callback_single_impl_base() {
+ static_api_ptr_t<playlist_manager>()->unregister_callback(this);
+ }
+
+ //dummy implementations - avoid possible pure virtual function calls!
+ void on_items_added(t_size p_base, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection) {}
+ void on_items_reordered(const t_size * p_order,t_size p_count) {}
+ void on_items_removing(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) {}
+ void on_items_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) {}
+ void on_items_selection_change(const bit_array & p_affected,const bit_array & p_state) {}
+ void on_item_focus_change(t_size p_from,t_size p_to) {}
+ void on_items_modified(const bit_array & p_mask) {}
+ void on_items_modified_fromplayback(const bit_array & p_mask,play_control::t_display_level p_level) {}
+ void on_items_replaced(const bit_array & p_mask,const pfc::list_base_const_t<playlist_callback::t_on_items_replaced_entry> & p_data) {}
+ void on_item_ensure_visible(t_size p_idx) {}
+
+ void on_playlist_switch() {}
+ void on_playlist_renamed(const char * p_new_name,t_size p_new_name_len) {}
+ void on_playlist_locked(bool p_locked) {}
+
+ void on_default_format_changed() {}
+ void on_playback_order_changed(t_size p_new_index) {}
+
+ PFC_CLASS_NOT_COPYABLE(playlist_callback_single_impl_base,playlist_callback_single_impl_base);
+};
+
class playlist_callback_single_static : public service_base, public playlist_callback_single
{
public:
@@ -476,7 +708,7 @@ public: //! Class used for async processing of IDataObject. Content of IDataObject can be dumped into dropped_files_data without any time-consuming operations - won't block calling app when used inside drag&drop handler - and actual time-consuming processing (listing directories and reading infos) can be done later.\n
-//! In 0.9.3 and up, instead of going thru dropped_files_data, you can use playlist_incoming_item_filter_v2::process_dropped_files_async().
+//! \deprecated In 0.9.3 and up, instead of going thru dropped_files_data, you can use playlist_incoming_item_filter_v2::process_dropped_files_async().
class NOVTABLE dropped_files_data {
public:
virtual void set_paths(pfc::string_list_const const & p_paths) = 0;
@@ -487,21 +719,25 @@ protected: };
-class NOVTABLE playlist_incoming_item_filter : public service_base
-{
+class NOVTABLE playlist_incoming_item_filter : public service_base {
public:
- virtual bool filter_items(const pfc::list_base_const_t<metadb_handle_ptr> & in,pfc::list_base_t<metadb_handle_ptr> & out) = 0;//sort / remove duplicates
+ //! Pre-sorts incoming items according to user-configured settings, removes duplicates. \n
+ //! @param in Items to process.
+ //! @param out Receives processed item list. \n
+ //! NOTE: because of an implementation bug in pre-0.9.5, the output list should be emptied before calling filter_items(), otherwise the results will be inconsistent/unpredictable.
+ //! @returns True when there's one or more item in the output list, false when the output list is empty.
+ virtual bool filter_items(metadb_handle_list_cref in,metadb_handle_list_ref out) = 0;
- //! Deprecated; use playlist_incoming_item_filter_v2::process_locations_async() when possible.\n
//! Converts one or more paths to a list of metadb_handles; displays a progress dialog.\n
//! Note that this function creates modal dialog and does not return until the operation has completed.
//! @returns True on success, false on user abort.
+ //! \deprecated Use playlist_incoming_item_filter_v2::process_locations_async() when possible.
virtual bool process_locations(const pfc::list_base_const_t<const char*> & p_urls,pfc::list_base_t<metadb_handle_ptr> & p_out,bool p_filter,const char * p_restrict_mask_override, const char * p_exclude_mask_override,HWND p_parentwnd) = 0;
- //! Deprecated; use playlist_incoming_item_filter_v2::process_dropped_files_async() when possible.\n
//! Converts an IDataObject to a list of metadb_handles.
//! Using this function is strongly disrecommended as it implies blocking the drag&drop source app (as well as our app).\n
//! @returns True on success, false on user abort or unknown data format.
+ //! \deprecated Use playlist_incoming_item_filter_v2::process_dropped_files_async() when possible.
virtual bool process_dropped_files(interface IDataObject * pDataObject,pfc::list_base_t<metadb_handle_ptr> & p_out,bool p_filter,HWND p_parentwnd) = 0;
//! Checks whether IDataObject contains one of known data formats that can be translated to a list of metadb_handles.
@@ -510,7 +746,7 @@ public: //! Checks whether IDataObject contains our own private data format (drag&drop within the app etc).
virtual bool process_dropped_files_check_if_native(interface IDataObject * pDataObject) = 0;
- //! Creates an IDataObject from specified metadb_handle list.
+ //! Creates an IDataObject from specified metadb_handle list. The caller is responsible for releasing the returned object. It is recommended that you use create_dataobject_ex() to get an autopointer that ensures proper deletion.
virtual interface IDataObject * create_dataobject(const pfc::list_base_const_t<metadb_handle_ptr> & p_data) = 0;
//! Checks whether IDataObject contains one of known data formats that can be translated to a list of metadb_handles.\n
@@ -523,13 +759,16 @@ public: //! @returns True on success, false when IDataObject does not contain any of known data formats.
virtual bool process_dropped_files_delayed(dropped_files_data & p_out,interface IDataObject * pDataObject) = 0;
- //helper
+ //! Helper - calls process_locations() with a single URL. See process_locations() for more info.
bool process_location(const char * url,pfc::list_base_t<metadb_handle_ptr> & out,bool filter,const char * p_mask,const char * p_exclude,HWND p_parentwnd);
+ //! Helper - returns a pfc::com_ptr_t<> rather than a raw pointer.
+ pfc::com_ptr_t<interface IDataObject> create_dataobject_ex(metadb_handle_list_cref data);
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playlist_incoming_item_filter);
};
//! For use with playlist_incoming_item_filter_v2::process_locations_async().
+//! \since 0.9.3
class NOVTABLE process_locations_notify : public service_base {
public:
virtual void on_completion(const pfc::list_base_const_t<metadb_handle_ptr> & p_items) = 0;
@@ -540,7 +779,7 @@ public: typedef service_ptr_t<process_locations_notify> process_locations_notify_ptr;
-//! New (0.9.3)
+//! \since 0.9.3
class NOVTABLE playlist_incoming_item_filter_v2 : public playlist_incoming_item_filter {
public:
enum {
@@ -571,6 +810,14 @@ public: FB2K_MAKE_SERVICE_INTERFACE(playlist_incoming_item_filter_v2,playlist_incoming_item_filter);
};
+//! \since 0.9.5
+class playlist_incoming_item_filter_v3 : public playlist_incoming_item_filter_v2 {
+public:
+ virtual bool auto_playlist_name(metadb_handle_list_cref data,pfc::string_base & out) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(playlist_incoming_item_filter_v3,playlist_incoming_item_filter_v2)
+};
+
//! Implementation of dropped_files_data.
class dropped_files_data_impl : public dropped_files_data {
public:
@@ -608,4 +855,19 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playback_queue_callback);
};
-#endif
\ No newline at end of file +
+class playlist_lock_change_notify : private playlist_callback_single_impl_base {
+public:
+ playlist_lock_change_notify() : playlist_callback_single_impl_base(flag_on_playlist_switch|flag_on_playlist_locked) {}
+protected:
+ virtual void on_lock_state_change() {}
+ bool is_playlist_command_available(t_uint32 what) const {
+ static_api_ptr_t<playlist_manager> api;
+ const t_size active = api->get_active_playlist();
+ if (active == ~0) return false;
+ return (api->playlist_lock_get_filter_mask(active) & what) == 0;
+ }
+private:
+ void on_playlist_switch() {on_lock_state_change();}
+ void on_playlist_locked(bool p_locked) {on_lock_state_change();}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist_loader.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist_loader.cpp index 511808a..b04a6f2 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist_loader.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist_loader.cpp @@ -1,105 +1,133 @@ #include "foobar2000.h"
-static void process_path_internal(const char * p_path,const service_ptr_t<file> & p_reader,playlist_loader_callback & callback,playlist_loader_callback::t_entry_type type,const t_filestats & p_stats);
+#if FOOBAR2000_TARGET_VERSION >= 76
+static void process_path_internal(const char * p_path,const service_ptr_t<file> & p_reader,playlist_loader_callback::ptr callback, abort_callback & abort,playlist_loader_callback::t_entry_type type,const t_filestats & p_stats);
namespace {
- class archive_callback_impl : public archive_callback
- {
+ class archive_callback_impl : public archive_callback {
public:
- archive_callback_impl(playlist_loader_callback & p_callback) : m_callback(p_callback) {}
+ archive_callback_impl(playlist_loader_callback::ptr p_callback, abort_callback & p_abort) : m_callback(p_callback), m_abort(p_abort) {}
bool on_entry(archive * owner,const char * p_path,const t_filestats & p_stats,const service_ptr_t<file> & p_reader)
{
- process_path_internal(p_path,p_reader,m_callback,playlist_loader_callback::entry_directory_enumerated,p_stats);
- return !m_callback.is_aborting();
+ process_path_internal(p_path,p_reader,m_callback,m_abort,playlist_loader_callback::entry_directory_enumerated,p_stats);
+ return !m_abort.is_aborting();
}
- bool is_aborting() const {return m_callback.is_aborting();}
- abort_callback_event get_abort_event() const {return m_callback.get_abort_event();}
+ bool is_aborting() const {return m_abort.is_aborting();}
+ abort_callback_event get_abort_event() const {return m_abort.get_abort_event();}
private:
- playlist_loader_callback & m_callback;
+ const playlist_loader_callback::ptr m_callback;
+ abort_callback & m_abort;
};
}
-void playlist_loader::g_load_playlist(const char * p_path,playlist_loader_callback & callback)
-{
- TRACK_CALL_TEXT("playlist_loader::g_load_playlist");
- pfc::string8 filename;
-
- filename = file_path_canonical(p_path);
+void playlist_loader::g_load_playlist_filehint(file::ptr fileHint,const char * p_path,playlist_loader_callback::ptr p_callback, abort_callback & p_abort) {
+ TRACK_CALL_TEXT("playlist_loader::g_load_playlist_filehint");
+ pfc::string8 filepath;
- service_enum_t<playlist_loader> e;
- service_ptr_t<playlist_loader> l;
+ filesystem::g_get_canonical_path(p_path,filepath);
+
+ pfc::string_extension extension(filepath);
- pfc::string_extension extension(filename);
+ service_ptr_t<file> l_file = fileHint;
- service_ptr_t<file> l_file;
+ if (l_file.is_empty()) {
+ filesystem::ptr fs;
+ if (filesystem::g_get_interface(fs,filepath)) {
+ if (fs->supports_content_types()) {
+ fs->open(l_file,filepath,filesystem::open_mode_read,p_abort);
+ }
+ }
+ }
{
- bool /*have_content_type, */have_extension;
-// string8 content_type;
-// have_content_type = r->get_content_type(content_type);
- have_extension = extension.length()>0;
+ service_enum_t<playlist_loader> e;
- if (e.first(l)) do {
- if (
-// have_content_type && l->is_our_content_type(content_type) ||
- (have_extension && !stricmp_utf8(l->get_extension(),extension)))
- {
- if (l_file.is_empty()) {
- filesystem::g_open_read(l_file,filename,callback);
+ if (l_file.is_valid()) {
+ pfc::string8 content_type;
+ if (l_file->get_content_type(content_type)) {
+ service_ptr_t<playlist_loader> l;
+ e.reset(); while(e.next(l)) {
+ if (l->is_our_content_type(content_type)) {
+ try {
+ TRACK_CODE("playlist_loader::open",l->open(filepath,l_file,p_callback, p_abort));
+ return;
+ } catch(exception_io_unsupported_format) {
+ l_file->reopen(p_abort);
+ }
+ }
}
+ }
+ }
- TRACK_CODE("playlist_loader::open",l->open(filename,l_file,callback));
- return;//success
+ if (extension.length()>0) {
+ playlist_loader::ptr l;
+ e.reset(); while(e.next(l)) {
+ if (stricmp_utf8(l->get_extension(),extension) == 0) {
+ if (l_file.is_empty()) filesystem::g_open_read(l_file,filepath,p_abort);
+ try {
+ TRACK_CODE("playlist_loader::open",l->open(filepath,l_file,p_callback,p_abort));
+ return;
+ } catch(exception_io_unsupported_format) {
+ l_file->reopen(p_abort);
+ }
+ }
}
- } while(e.next(l));
+ }
}
throw exception_io_unsupported_format();
}
+void playlist_loader::g_load_playlist(const char * p_path,playlist_loader_callback::ptr callback, abort_callback & abort) {
+ g_load_playlist_filehint(NULL,p_path,callback,abort);
+}
-static void track_indexer__g_get_tracks_e(const char * p_path,const service_ptr_t<file> & p_reader,const t_filestats & p_stats,playlist_loader_callback::t_entry_type p_type,playlist_loader_callback & p_callback,bool & p_got_input)
+static void index_tracks_helper(const char * p_path,const service_ptr_t<file> & p_reader,const t_filestats & p_stats,playlist_loader_callback::t_entry_type p_type,playlist_loader_callback::ptr p_callback, abort_callback & p_abort,bool & p_got_input)
{
+ TRACK_CALL_TEXT("index_tracks_helper");
if (p_reader.is_empty() && filesystem::g_is_remote_safe(p_path))
{
+ TRACK_CALL_TEXT("remote");
metadb_handle_ptr handle;
- p_callback.handle_create(handle,make_playable_location(p_path,0));
+ p_callback->handle_create(handle,make_playable_location(p_path,0));
p_got_input = true;
- p_callback.on_entry(handle,p_type,p_stats,true);
+ p_callback->on_entry(handle,p_type,p_stats,true);
} else {
+ TRACK_CALL_TEXT("hintable");
service_ptr_t<input_info_reader> instance;
- input_entry::g_open_for_info_read(instance,p_reader,p_path,p_callback);
+ input_entry::g_open_for_info_read(instance,p_reader,p_path,p_abort);
- t_filestats stats = instance->get_file_stats(p_callback);
+ t_filestats stats = instance->get_file_stats(p_abort);
t_uint32 subsong,subsong_count = instance->get_subsong_count();
for(subsong=0;subsong<subsong_count;subsong++)
{
- p_callback.check_e();
+ TRACK_CALL_TEXT("subsong-loop");
+ p_abort.check();
metadb_handle_ptr handle;
t_uint32 index = instance->get_subsong(subsong);
- p_callback.handle_create(handle,make_playable_location(p_path,index));
+ p_callback->handle_create(handle,make_playable_location(p_path,index));
p_got_input = true;
- if (p_callback.want_info(handle,p_type,stats,true))
+ if (p_callback->want_info(handle,p_type,stats,true))
{
file_info_impl info;
- instance->get_info(index,info,p_callback);
- p_callback.on_entry_info(handle,p_type,stats,info,true);
+ TRACK_CODE("get_info",instance->get_info(index,info,p_abort));
+ p_callback->on_entry_info(handle,p_type,stats,info,true);
}
else
{
- p_callback.on_entry(handle,p_type,stats,true);
+ p_callback->on_entry(handle,p_type,stats,true);
}
}
}
}
-static void track_indexer__g_get_tracks_wrap(const char * p_path,const service_ptr_t<file> & p_reader,const t_filestats & p_stats,playlist_loader_callback::t_entry_type p_type,playlist_loader_callback & p_callback) {
+static void track_indexer__g_get_tracks_wrap(const char * p_path,const service_ptr_t<file> & p_reader,const t_filestats & p_stats,playlist_loader_callback::t_entry_type p_type,playlist_loader_callback::ptr p_callback, abort_callback & p_abort) {
bool got_input = false;
bool fail = false;
try {
- track_indexer__g_get_tracks_e(p_path,p_reader,p_stats,p_type,p_callback,got_input);
+ index_tracks_helper(p_path,p_reader,p_stats,p_type,p_callback,p_abort, got_input);
} catch(exception_aborted) {
throw;
} catch(exception_io_unsupported_format) {
@@ -109,34 +137,34 @@ static void track_indexer__g_get_tracks_wrap(const char * p_path,const service_p console::formatter() << "could not enumerate tracks (" << e << ") on:\n" << file_path_display(p_path);
}
if (fail) {
- if (!got_input && !p_callback.is_aborting()) {
+ if (!got_input && !p_abort.is_aborting()) {
if (p_type == playlist_loader_callback::entry_user_requested)
{
metadb_handle_ptr handle;
- p_callback.handle_create(handle,make_playable_location(p_path,0));
- p_callback.on_entry(handle,p_type,p_stats,true);
+ p_callback->handle_create(handle,make_playable_location(p_path,0));
+ p_callback->on_entry(handle,p_type,p_stats,true);
}
}
}
}
-static void process_path_internal(const char * p_path,const service_ptr_t<file> & p_reader,playlist_loader_callback & p_callback,playlist_loader_callback::t_entry_type p_type,const t_filestats & p_stats)
+static void process_path_internal(const char * p_path,const service_ptr_t<file> & p_reader,playlist_loader_callback::ptr callback, abort_callback & abort,playlist_loader_callback::t_entry_type type,const t_filestats & p_stats)
{
//p_path must be canonical
- p_callback.check_e();
+ abort.check();
- p_callback.on_progress(p_path);
+ callback->on_progress(p_path);
{
if (p_reader.is_empty()) {
directory_callback_impl directory_results(true);
try {
- filesystem::g_list_directory(p_path,directory_results,p_callback);
+ filesystem::g_list_directory(p_path,directory_results,abort);
for(t_size n=0;n<directory_results.get_count();n++) {
- process_path_internal(directory_results.get_item(n),0,p_callback,playlist_loader_callback::entry_directory_enumerated,directory_results.get_item_stats(n));
+ process_path_internal(directory_results.get_item(n),0,callback,abort,playlist_loader_callback::entry_directory_enumerated,directory_results.get_item_stats(n));
}
return;
} catch(exception_aborted) {throw;}
@@ -150,14 +178,14 @@ static void process_path_internal(const char * p_path,const service_ptr_t<file> {
- archive_callback_impl archive_results(p_callback);
+ archive_callback_impl archive_results(callback, abort);
service_enum_t<filesystem> e;
service_ptr_t<filesystem> f;
while(e.next(f)) {
- p_callback.check_e();
+ abort.check();
service_ptr_t<archive> arch;
if (f->service_query_t(arch)) {
- if (p_reader.is_valid()) p_reader->reopen(p_callback);
+ if (p_reader.is_valid()) p_reader->reopen(abort);
try {
TRACK_CODE("archive::archive_list",arch->archive_list(p_path,p_reader,archive_results,true));
@@ -175,29 +203,31 @@ static void process_path_internal(const char * p_path,const service_ptr_t<file> service_ptr_t<link_resolver> ptr;
if (link_resolver::g_find(ptr,p_path))
{
- if (p_reader.is_valid()) p_reader->reopen(p_callback);
+ if (p_reader.is_valid()) p_reader->reopen(abort);
pfc::string8 temp;
try {
- TRACK_CODE("link_resolver::resolve",ptr->resolve(p_reader,p_path,temp,p_callback));
+ TRACK_CODE("link_resolver::resolve",ptr->resolve(p_reader,p_path,temp,abort));
- track_indexer__g_get_tracks_wrap(temp,0,filestats_invalid,playlist_loader_callback::entry_from_playlist,p_callback);
+ track_indexer__g_get_tracks_wrap(temp,0,filestats_invalid,playlist_loader_callback::entry_from_playlist,callback, abort);
return;//success
} catch(exception_aborted) {throw;}
catch(...) {}
}
}
- track_indexer__g_get_tracks_wrap(p_path,p_reader,p_stats,p_type,p_callback);
+ if (callback->is_path_wanted(p_path,type)) {
+ track_indexer__g_get_tracks_wrap(p_path,p_reader,p_stats,type,callback, abort);
+ }
}
-void playlist_loader::g_process_path(const char * p_filename,playlist_loader_callback & callback,playlist_loader_callback::t_entry_type type)
+void playlist_loader::g_process_path(const char * p_filename,playlist_loader_callback::ptr callback, abort_callback & abort,playlist_loader_callback::t_entry_type type)
{
TRACK_CALL_TEXT("playlist_loader::g_process_path");
file_path_canonical filename(p_filename);
- process_path_internal(filename,0,callback,type,filestats_invalid);
+ process_path_internal(filename,0,callback,abort, type,filestats_invalid);
}
void playlist_loader::g_save_playlist(const char * p_filename,const pfc::list_base_const_t<metadb_handle_ptr> & data,abort_callback & p_abort)
@@ -229,13 +259,15 @@ void playlist_loader::g_save_playlist(const char * p_filename,const pfc::list_ba }
-bool playlist_loader::g_process_path_ex(const char * filename,playlist_loader_callback & callback,playlist_loader_callback::t_entry_type type)
+bool playlist_loader::g_process_path_ex(const char * filename,playlist_loader_callback::ptr callback, abort_callback & abort,playlist_loader_callback::t_entry_type type)
{
try {
- g_load_playlist(filename,callback);
+ g_load_playlist(filename,callback, abort);
return true;
} catch(exception_io_unsupported_format) {//not a playlist format
- g_process_path(filename,callback,type);
+ g_process_path(filename,callback,abort,type);
return false;
}
}
+
+#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist_loader.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist_loader.h index 40a226a..5041baa 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist_loader.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/playlist_loader.h @@ -1,9 +1,8 @@ -#ifndef _PLAYLIST_LOADER_H_
-#define _PLAYLIST_LOADER_H_
-
-//! Callback interface receiving item locations from playlist loader. Also inherits abort_callback methods and can be passed to functions that require an abort_callback. \n
-//! See playlist_loader_callback_impl for a basic implementation of playlist_loader_callback. Typically, you call one of standard services such as playlist_incoming_item_filter instead of implementing this interface and calling playlist_loader methods directly.
-class NOVTABLE playlist_loader_callback : public abort_callback {
+#if FOOBAR2000_TARGET_VERSION >= 76
+//! Callback interface receiving item locations from playlist loader. \n
+//! Typically, you call one of standard services such as playlist_incoming_item_filter instead of implementing this interface and calling playlist_loader methods directly.
+class NOVTABLE playlist_loader_callback : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(playlist_loader_callback, service_base)
public:
//! Enumeration type representing origin of item passed to playlist_loader_callback.
enum t_entry_type {
@@ -40,39 +39,15 @@ public: //! Same as metadb::handle_create(); provided here to avoid repeated metadb instantiation bottleneck since calling code will need this function often.
virtual void handle_create(metadb_handle_ptr & p_out,const playable_location & p_location) = 0;
-protected:
- playlist_loader_callback() {}
- ~playlist_loader_callback() {}
-};
-
-//! Basic implementation of playlist_loader_callback.
-class playlist_loader_callback_impl : public playlist_loader_callback {
-public:
-
- playlist_loader_callback_impl(abort_callback & p_abort) : m_abort(p_abort) {}
-
- bool is_aborting() const {return m_abort.is_aborting();}
- abort_callback_event get_abort_event() const {return m_abort.get_abort_event();}
-
- const metadb_handle_ptr & get_item(t_size idx) const {return m_data[idx];}
- const metadb_handle_ptr & operator[](t_size idx) const {return m_data[idx];}
- t_size get_count() const {return m_data.get_count();}
-
- const metadb_handle_list & get_data() const {return m_data;}
-
- void on_progress(const char * path) {}
+ //! Returns whether further on_entry() calls for this file are wanted. Typically always returns true, can be used to optimize cases when directories are searched for files matching specific pattern only so unwanted files aren't parsed unnecessarily.
+ //! @param path Canonical path to the media file being processed.
+ virtual bool is_path_wanted(const char * path, t_entry_type type) = 0;
- void on_entry(const metadb_handle_ptr & ptr,t_entry_type type,const t_filestats & p_stats,bool p_fresh) {m_data.add_item(ptr);}
- bool want_info(const metadb_handle_ptr & ptr,t_entry_type type,const t_filestats & p_stats,bool p_fresh) {return false;}
- void on_entry_info(const metadb_handle_ptr & ptr,t_entry_type type,const t_filestats & p_stats,const file_info & p_info,bool p_fresh) {m_data.add_item(ptr);}
+ virtual bool want_browse_info(const metadb_handle_ptr & p_item,t_entry_type p_type,t_filetimestamp ts) = 0;
+ virtual void on_browse_info(const metadb_handle_ptr & p_item,t_entry_type p_type,const file_info & info, t_filetimestamp ts) = 0;
+};
- void handle_create(metadb_handle_ptr & p_out,const playable_location & p_location) {m_api->handle_create(p_out,p_location);}
-private:
- metadb_handle_list m_data;
- abort_callback & m_abort;
- static_api_ptr_t<metadb> m_api;
-};
//! Service handling playlist file operations. There are multiple implementations handling different playlist formats; you can add new implementations to allow new custom playlist file formats to be read or written.\n
//! Also provides static helper functions for turning a filesystem path into a list of playable item locations. \n
@@ -84,34 +59,41 @@ public: //! Parses specified playlist file into list of playable locations. Throws exception_io or derivatives on failure, exception_aborted on abort. If specified file is not a recognized playlist file, exception_io_unsupported_format is thrown.
//! @param p_path Path of playlist file to parse. Used for relative path handling purposes (p_file parameter is used for actual file access).
//! @param p_file File interface to use for reading. Read/write pointer must be set to beginning by caller before calling.
- //! @param p_callback Callback object receiving enumerated playable item locations as well as signaling user aborting the operation.
- virtual void open(const char * p_path, const service_ptr_t<file> & p_file,playlist_loader_callback & p_callback) = 0;
+ //! @param p_callback Callback object receiving enumerated playable item locations.
+ virtual void open(const char * p_path, const service_ptr_t<file> & p_file,playlist_loader_callback::ptr p_callback, abort_callback & p_abort) = 0;
//! Writes a playlist file containing specific item list to specified file. Will fail (pfc::exception_not_implemented) if specified playlist_loader is read-only (can_write() returns false).
//! @param p_path Path of playlist file to write. Used for relative path handling purposes (p_file parameter is used for actual file access).
//! @param p_file File interface to use for writing. Caller should ensure that the file is empty (0 bytes long) before calling.
//! @param p_data List of items to save to playlist file.
//! @param p_abort abort_callback object signaling user aborting the operation. Note that aborting a save playlist operation will most likely leave user with corrupted/incomplete file.
- virtual void write(const char * p_path, const service_ptr_t<file> & p_file,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,abort_callback & p_abort) = 0;
+ virtual void write(const char * p_path, const service_ptr_t<file> & p_file,metadb_handle_list_cref p_data,abort_callback & p_abort) = 0;
//! Returns extension of file format handled by this playlist_loader implementation (a UTF-8 encoded null-terminated string).
virtual const char * get_extension() = 0;
//! Returns whether this playlist_loader implementation supports writing. If can_write() returns false, all write() calls will fail.
virtual bool can_write() = 0;
- //! Returns whether specified content type is one of playlist types supported by this playlist_loaded implementation or not.
+ //! Returns whether specified content type is one of playlist types supported by this playlist_loader implementation or not.
//! @param p_content_type Content type to query, a UTF-8 encoded null-terminated string.
virtual bool is_our_content_type(const char* p_content_type) = 0;
//! Returns whether playlist format extension supported by this implementation should be listed on file types associations page.
virtual bool is_associatable() = 0;
+ //! Attempts to load a playlist file from specified filesystem path. Throws exception_io or derivatives on failure, exception_aborted on abort. If specified file is not a recognized playlist file, exception_io_unsupported_format is thrown. \n
+ //! Equivalent to g_load_playlist_filehint(NULL,p_path,p_callback).
+ //! @param p_path Filesystem path to load playlist from, a UTF-8 encoded null-terminated string.
+ //! @param p_callback Callback object receiving enumerated playable item locations as well as signaling user aborting the operation.
+ static void g_load_playlist(const char * p_path,playlist_loader_callback::ptr p_callback, abort_callback & p_abort);
+
//! Attempts to load a playlist file from specified filesystem path. Throws exception_io or derivatives on failure, exception_aborted on abort. If specified file is not a recognized playlist file, exception_io_unsupported_format is thrown.
//! @param p_path Filesystem path to load playlist from, a UTF-8 encoded null-terminated string.
//! @param p_callback Callback object receiving enumerated playable item locations as well as signaling user aborting the operation.
- static void g_load_playlist(const char * p_path,playlist_loader_callback & p_callback);
+ //! @param fileHint File object to read from, can be NULL if not available.
+ static void g_load_playlist_filehint(file::ptr fileHint,const char * p_path,playlist_loader_callback::ptr p_callback, abort_callback & p_abort);
//! Saves specified list of locations into a playlist file. Throws exception_io or derivatives on failure, exception_aborted on abort.
//! @param p_path Filesystem path to save playlist to, a UTF-8 encoded null-terminated string.
//! @param p_data List of items to save to playlist file.
//! @param p_abort abort_callback object signaling user aborting the operation. Note that aborting a save playlist operation will most likely leave user with corrupted/incomplete file.
- static void g_save_playlist(const char * p_path,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,abort_callback & p_abort);
+ static void g_save_playlist(const char * p_path,metadb_handle_list_cref p_data,abort_callback & p_abort);
//! Processes specified path to generate list of playable items. Includes recursive directory/archive enumeration. \n
//! Does not touch playlist files encountered - use g_process_path_ex() if specified path is possibly a playlist file; playlist files found inside directories or archives are ignored regardless.\n
@@ -119,12 +101,12 @@ public: //! @param p_path Filesystem path to process; a UTF-8 encoded null-terminated string.
//! @param p_callback Callback object receiving enumerated playable item locations as well as signaling user aborting the operation.
//! @param p_type Origin of p_path string. Reserved for internal use in recursive calls, should be left at default value; it controls various internal behaviors.
- static void g_process_path(const char * p_path,playlist_loader_callback & p_callback,playlist_loader_callback::t_entry_type p_type = playlist_loader_callback::entry_user_requested);
+ static void g_process_path(const char * p_path,playlist_loader_callback::ptr p_callback, abort_callback & p_abort,playlist_loader_callback::t_entry_type p_type = playlist_loader_callback::entry_user_requested);
//! Calls attempts to process specified path as a playlist; if that fails (i.e. not a playlist), calls g_process_path with same parameters. See g_process_path for parameter descriptions. \n
//! Warning: caller must handle exceptions which will occur in case of I/O failure or playlist parsing failure.
//! @returns True if specified path was processed as a playlist file, false otherwise (relevant in some scenarios where output is sorted after loading, playlist file contents should not be sorted).
- static bool g_process_path_ex(const char * p_path,playlist_loader_callback & p_callback,playlist_loader_callback::t_entry_type p_type = playlist_loader_callback::entry_user_requested);
+ static bool g_process_path_ex(const char * p_path,playlist_loader_callback::ptr p_callback, abort_callback & p_abort,playlist_loader_callback::t_entry_type p_type = playlist_loader_callback::entry_user_requested);
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(playlist_loader);
};
@@ -132,5 +114,4 @@ public: template<typename t_myclass>
class playlist_loader_factory_t : public service_factory_single_t<t_myclass> {};
-
-#endif //_PLAYLIST_LOADER_H_
\ No newline at end of file +#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/popup_message.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/popup_message.h index 34beef0..bd72e70 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/popup_message.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/popup_message.h @@ -1,6 +1,3 @@ -#ifndef _POPUP_MESSAGE_H_
-#define _POPUP_MESSAGE_H_
-
//! This interface allows you to show generic nonmodal noninteractive dialog with a text message. This should be used instead of MessageBox where possible.\n
//! Usage: use popup_message::g_show / popup_message::g_show_ex static helpers, or static_api_ptr_t<popup_message>.\n
@@ -21,14 +18,37 @@ public: //! @param p_msg Message to show (UTF-8 encoded string).
//! @param p_title Title of dialog to show (UTF-8 encoded string).
//! @param p_icon Icon of the dialog - can be set to icon_information, icon_error or icon_query.
- inline void show(const char * p_msg,const char * p_title,t_icon p_icon = icon_information) {show_ex(p_msg,infinite,p_title,infinite,p_icon);}
+ inline void show(const char * p_msg,const char * p_title,t_icon p_icon = icon_information) {show_ex(p_msg,~0,p_title,~0,p_icon);}
//! Static helper function instantiating the service and activating the message dialog. See show_ex() for description of parameters.
static void g_show_ex(const char * p_msg,unsigned p_msg_length,const char * p_title,unsigned p_title_length,t_icon p_icon = icon_information);
//! Static helper function instantiating the service and activating the message dialog. See show() for description of parameters.
- static inline void g_show(const char * p_msg,const char * p_title,t_icon p_icon = icon_information) {g_show_ex(p_msg,infinite,p_title,infinite,p_icon);}
+ static inline void g_show(const char * p_msg,const char * p_title,t_icon p_icon = icon_information) {g_show_ex(p_msg,~0,p_title,~0,p_icon);}
+
+ static void g_complain(const char * what) {
+ g_show(what, "Information", icon_error);
+ }
+
+ static void g_complain(const char * p_whatFailed, const std::exception & p_exception) {
+ g_complain(p_whatFailed,p_exception.what());
+ }
+ static void g_complain(const char * p_whatFailed, const char * msg) {
+ g_complain(pfc::string_formatter() << p_whatFailed << ": " << msg);
+ }
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(popup_message);
};
-#endif //_POPUP_MESSAGE_H_
\ No newline at end of file +#define EXCEPTION_TO_POPUP_MESSAGE(CODE,LABEL) try { CODE; } catch(std::exception const & e) {popup_message::g_complain(LABEL,e);}
+
+//! \since 1.1
+class NOVTABLE popup_message_v2 : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(popup_message_v2);
+public:
+ virtual void show(HWND parent, const char * msg, t_size msg_length, const char * title, t_size title_length) = 0;
+ void show(HWND parent, const char * msg, const char * title) {show(parent, msg, ~0, title, ~0);}
+
+ static void g_show(HWND parent, const char * msg, const char * title = "Information") {static_api_ptr_t<popup_message_v2>()->show(parent, msg, title);}
+ static void g_complain(HWND parent, const char * whatFailed, const char * msg) {g_show(parent, pfc::string_formatter() << whatFailed << ": " << msg);}
+ static void g_complain(HWND parent, const char * whatFailed, const std::exception & e) {g_complain(parent, whatFailed, e.what());}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/preferences_page.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/preferences_page.cpp index c60c963..037d6a8 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/preferences_page.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/preferences_page.cpp @@ -1,12 +1,10 @@ #include "foobar2000.h"
-bool preferences_page::get_help_url(pfc::string_base & p_out)
-{
- p_out = "http://help.foobar2000.org/";
- p_out += core_version_info::g_get_version_string();
- p_out += "/preferences/";
- p_out += (const char*) pfc::print_guid(get_guid());
- p_out += "/";
- p_out += get_name();
+void preferences_page::get_help_url_helper(pfc::string_base & out, const char * category, const GUID & id, const char * name) {
+ out.reset();
+ out << "http://help.foobar2000.org/" << core_version_info::g_get_version_string() << "/" << category << "/" << pfc::print_guid(id) << "/" << name;
+}
+bool preferences_page::get_help_url(pfc::string_base & p_out) {
+ get_help_url_helper(p_out,"preferences",get_guid(), get_name());
return true;
-}
\ No newline at end of file +}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/preferences_page.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/preferences_page.h index cfa18ab..1cbe8ce 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/preferences_page.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/preferences_page.h @@ -1,7 +1,5 @@ -#ifndef _FOOBAR2000_SDK_PREFERENCES_PAGE_H_
-#define _FOOBAR2000_SDK_PREFERENCES_PAGE_H_
-
-//! Implementing this service will generate a page in preferences dialog. Use preferences_page_factory_t template to register.
+//! Implementing this service will generate a page in preferences dialog. Use preferences_page_factory_t template to register. \n
+//! In 1.0 and newer you should always derive from preferences_page_v3 rather than from preferences_page directly.
class NOVTABLE preferences_page : public service_base {
public:
//! Creates preferences page dialog window. It is safe to assume that two dialog instances will never coexist. Caller is responsible for embedding it into preferences dialog itself.
@@ -12,14 +10,16 @@ public: virtual GUID get_guid() = 0;
//! Retrieves GUID of parent page/branch of this page. See preferences_page::guid_* constants for list of standard parent GUIDs. Can also be a GUID of another page or a branch (see: preferences_branch).
virtual GUID get_parent_guid() = 0;
- //! Queries whether this page supports "reset page" feature.
+ //! Obsolete.
virtual bool reset_query() = 0;
- //! Activates "reset page" feature. It is safe to assume that the preferences page dialog does not exist at the point this is called (caller destroys it before calling reset and creates it again afterwards).
+ //! Obsolete.
virtual void reset() = 0;
//! Retrieves help URL. Without overriding it, it will redirect to foobar2000 wiki.
virtual bool get_help_url(pfc::string_base & p_out);
+
+ static void get_help_url_helper(pfc::string_base & out, const char * category, const GUID & id, const char * name);
- static const GUID guid_root, guid_hidden, guid_tools,guid_core,guid_display,guid_playback,guid_visualisations,guid_input,guid_tag_writing,guid_media_library;
+ static const GUID guid_root, guid_hidden, guid_tools,guid_core,guid_display,guid_playback,guid_visualisations,guid_input,guid_tag_writing,guid_media_library, guid_tagging;
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(preferences_page);
};
@@ -27,7 +27,7 @@ public: class NOVTABLE preferences_page_v2 : public preferences_page {
public:
//! Allows custom sorting order of preferences pages. Return lower value for higher priority (lower resulting index in the list). When sorting priority of two items matches, alphabetic sorting is used. Return 0 to use default alphabetic sorting without overriding priority.
- virtual double get_sort_priority() = 0;
+ virtual double get_sort_priority() {return 0;}
FB2K_MAKE_SERVICE_INTERFACE(preferences_page_v2,preferences_page);
};
@@ -52,7 +52,7 @@ public: class preferences_branch_v2 : public preferences_branch {
public:
//! Allows custom sorting order of preferences pages. Return lower value for higher priority (lower resulting index in the list). When sorting priority of two items matches, alphabetic sorting is used. Return 0 to use default alphabetic sorting without overriding priority.
- virtual double get_sort_priority() = 0;
+ virtual double get_sort_priority() {return 0;}
FB2K_MAKE_SERVICE_INTERFACE(preferences_branch_v2,preferences_branch);
};
@@ -70,13 +70,67 @@ private: const double m_sort_priority;
};
-typedef service_factory_single_t<preferences_branch_impl> __preferences_branch_factory;
+typedef service_factory_single_t<preferences_branch_impl> _preferences_branch_factory;
//! Instantiating this class declares a preferences branch with specified parameters.\n
//! Usage: static preferences_branch_factory g_mybranch(mybranchguid,parentbranchguid,"name of my preferences branch goes here");
-class preferences_branch_factory : public __preferences_branch_factory {
+class preferences_branch_factory : public _preferences_branch_factory {
+public:
+ preferences_branch_factory(const GUID & p_guid,const GUID & p_parent,const char * p_name,double p_sort_priority = 0) : _preferences_branch_factory(p_guid,p_parent,p_name,p_sort_priority) {}
+};
+
+
+
+
+class preferences_state {
public:
- preferences_branch_factory(const GUID & p_guid,const GUID & p_parent,const char * p_name,double p_sort_priority = 0) : __preferences_branch_factory(p_guid,p_parent,p_name,p_sort_priority) {}
+ enum {
+ changed = 1,
+ needs_restart = 2,
+ needs_restart_playback = 4,
+ resettable = 8,
+
+ //! \since 1.1
+ //! Indicates that the dialog is currently busy and cannot be applied or cancelled. Do not use without a good reason! \n
+ //! This flag was introduced in 1.1. It will not be respected in earlier foobar2000 versions. It is recommended not to use this flag unless you are absolutely sure that you need it and take appropriate precautions. \n
+ //! Note that this has no power to entirely prevent your preferences page from being destroyed/cancelled as a result of app shutdown if the user dismisses the warnings, but you won't be getting an "apply" call while this is set.
+ busy = 16,
+ };
};
-#endif //_FOOBAR2000_SDK_PREFERENCES_PAGE_H_
\ No newline at end of file +class preferences_page_callback : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(preferences_page_callback, service_base)
+public:
+ virtual void on_state_changed() = 0;
+};
+
+//! \since 1.0
+//! Implements a preferences page instance. \n
+//! Instantiated through preferences_page_v3::instantiate(). \n
+//! Note that the window will be destroyed by the caller before the last reference to the preferences_page_instance is released. \n
+//! WARNING: misguided use of modal dialogs - or ANY windows APIs that might spawn such dialogs - may result in conditions when the owner dialog (along with your page) is destroyed somewhere inside your message handler, also releasing references to your object. \n
+//! It is recommended to use window_service_impl_t<> from ATLHelpers to instantiate preferences_page_instances, or preferences_page_impl<> framework for your preferences_page code to cleanly workaround such cases.
+class preferences_page_instance : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(preferences_page_instance, service_base)
+public:
+ //! @returns a combination of preferences_state constants.
+ virtual t_uint32 get_state() = 0;
+ //! @returns the window handle.
+ virtual HWND get_wnd() = 0;
+ //! Applies preferences changes.
+ virtual void apply() = 0;
+ //! Resets this page's content to the default values. Does not apply any changes - lets user preview the changes before hitting "apply".
+ virtual void reset() = 0;
+};
+
+//! \since 1.0
+//! Implements a preferences page.
+class preferences_page_v3 : public preferences_page_v2 {
+ FB2K_MAKE_SERVICE_INTERFACE(preferences_page_v3, preferences_page_v2)
+public:
+ virtual preferences_page_instance::ptr instantiate(HWND parent, preferences_page_callback::ptr callback) = 0;
+private:
+ HWND create(HWND p_parent) {throw pfc::exception_not_implemented();} //stub
+ bool reset_query() {return false;} //stub - the new apply-friendly reset should be used instead.
+ void reset() {} //stub
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/progress_meter.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/progress_meter.h new file mode 100644 index 0000000..9e373fb --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/progress_meter.h @@ -0,0 +1,18 @@ +//! Interface for setting current operation progress state to be visible on Windows 7 taskbar. Use static_api_ptr_t<progress_meter>()->acquire() to instantiate.
+class NOVTABLE progress_meter_instance : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(progress_meter_instance, service_base);
+public:
+ //! Sets the current progress state.
+ //! @param value Progress state, in 0..1 range.
+ virtual void set_progress(float value) = 0;
+ //! Toggles paused state.
+ virtual void set_pause(bool isPaused) = 0;
+};
+
+//! Entrypoint interface for instantiating progress_meter_instance objects.
+class NOVTABLE progress_meter : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(progress_meter);
+public:
+ //! Creates a progress_meter_instance object.
+ virtual progress_meter_instance::ptr acquire() = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain.cpp index 1011745..caa22e6 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain.cpp @@ -220,4 +220,4 @@ bool t_replaygain_config::is_active() const default:
return false;
}
-}
\ No newline at end of file +}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain.h index 4dc3ff4..f3bfa43 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain.h @@ -1,14 +1,11 @@ -#ifndef _FOOBAR2000_SDK_REPLAYGAIN_H_
-#define _FOOBAR2000_SDK_REPLAYGAIN_H_
-
//! Structure storing ReplayGain configuration: album/track source data modes, gain/peak processing modes and preamp values.
struct t_replaygain_config
{
- enum t_source_mode {source_mode_none,source_mode_track,source_mode_album};
- enum t_processing_mode {processing_mode_none,processing_mode_gain,processing_mode_gain_and_peak,processing_mode_peak};
+ enum /*t_source_mode*/ {source_mode_none,source_mode_track,source_mode_album};
+ enum /*t_processing_mode*/ {processing_mode_none,processing_mode_gain,processing_mode_gain_and_peak,processing_mode_peak};
+ typedef t_uint32 t_source_mode; typedef t_uint32 t_processing_mode;
t_replaygain_config() {reset();}
- t_replaygain_config(const t_replaygain_config & p_source) {*this = p_source;}
t_replaygain_config(t_source_mode p_source_mode,t_processing_mode p_processing_mode,float p_preamp_without_rg, float p_preamp_with_rg)
: m_source_mode(p_source_mode), m_processing_mode(p_processing_mode), m_preamp_without_rg(p_preamp_without_rg), m_preamp_with_rg(p_preamp_with_rg) {}
@@ -23,8 +20,21 @@ struct t_replaygain_config void format_name(pfc::string_base & p_out) const;
bool is_active() const;
+
+ static bool equals(const t_replaygain_config & v1, const t_replaygain_config & v2) {
+ return v1.m_source_mode == v2.m_source_mode && v1.m_processing_mode == v2.m_processing_mode && v1.m_preamp_without_rg == v2.m_preamp_without_rg && v1.m_preamp_with_rg == v2.m_preamp_with_rg;
+ }
+ bool operator==(const t_replaygain_config & other) const {return equals(*this, other);}
+ bool operator!=(const t_replaygain_config & other) const {return !equals(*this, other);}
};
+FB2K_STREAM_READER_OVERLOAD(t_replaygain_config) {
+ return stream >> value.m_source_mode >> value.m_processing_mode >> value.m_preamp_with_rg >> value.m_preamp_without_rg;
+}
+FB2K_STREAM_WRITER_OVERLOAD(t_replaygain_config) {
+ return stream << value.m_source_mode << value.m_processing_mode << value.m_preamp_with_rg << value.m_preamp_without_rg;
+}
+
//! Core service providing methods to retrieve/alter playback ReplayGain settings, as well as use ReplayGain configuration dialog.
class NOVTABLE replaygain_manager : public service_base {
public:
@@ -42,6 +52,11 @@ public: //! Alters playback ReplayGain settings.
virtual void set_core_settings(const t_replaygain_config & p_config) = 0;
+ //! New in 1.0
+ virtual void configure_embedded_set(HWND wnd, t_replaygain_config const & p_data) = 0;
+ //! New in 1.0
+ virtual void get_core_defaults(t_replaygain_config & out) = 0;
+
//! Helper; queries scale value for specified item according to core playback settings.
audio_sample core_settings_query_scale(const file_info & p_info);
//! Helper; queries scale value for specified item according to core playback settings.
@@ -49,5 +64,3 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(replaygain_manager);
};
-
-#endif //_FOOBAR2000_SDK_REPLAYGAIN_H_
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain_info.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain_info.cpp index e1c5640..b63874b 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain_info.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain_info.cpp @@ -44,32 +44,32 @@ static const char meta_album_gain[] = "replaygain_album_gain", meta_album_peak[] bool replaygain_info::g_is_meta_replaygain(const char * p_name,t_size p_name_len)
{
return
- stricmp_utf8_ex(p_name,p_name_len,meta_album_gain,infinite) == 0 ||
- stricmp_utf8_ex(p_name,p_name_len,meta_album_peak,infinite) == 0 ||
- stricmp_utf8_ex(p_name,p_name_len,meta_track_gain,infinite) == 0 ||
- stricmp_utf8_ex(p_name,p_name_len,meta_track_peak,infinite) == 0;
+ stricmp_utf8_ex(p_name,p_name_len,meta_album_gain,~0) == 0 ||
+ stricmp_utf8_ex(p_name,p_name_len,meta_album_peak,~0) == 0 ||
+ stricmp_utf8_ex(p_name,p_name_len,meta_track_gain,~0) == 0 ||
+ stricmp_utf8_ex(p_name,p_name_len,meta_track_peak,~0) == 0;
}
bool replaygain_info::set_from_meta_ex(const char * p_name,t_size p_name_len,const char * p_value,t_size p_value_len)
{
fpu_control_roundnearest bah;
- if (stricmp_utf8_ex(p_name,p_name_len,meta_album_gain,infinite) == 0)
+ if (stricmp_utf8_ex(p_name,p_name_len,meta_album_gain,~0) == 0)
{
m_album_gain = (float)pfc::string_to_float(p_value,p_value_len);
return true;
}
- else if (stricmp_utf8_ex(p_name,p_name_len,meta_album_peak,infinite) == 0)
+ else if (stricmp_utf8_ex(p_name,p_name_len,meta_album_peak,~0) == 0)
{
m_album_peak = (float)pfc::string_to_float(p_value,p_value_len);
if (m_album_peak < 0) m_album_peak = 0;
return true;
}
- else if (stricmp_utf8_ex(p_name,p_name_len,meta_track_gain,infinite) == 0)
+ else if (stricmp_utf8_ex(p_name,p_name_len,meta_track_gain,~0) == 0)
{
m_track_gain = (float)pfc::string_to_float(p_value,p_value_len);
return true;
}
- else if (stricmp_utf8_ex(p_name,p_name_len,meta_track_peak,infinite) == 0)
+ else if (stricmp_utf8_ex(p_name,p_name_len,meta_track_peak,~0) == 0)
{
m_track_peak = (float)pfc::string_to_float(p_value,p_value_len);
if (m_track_peak < 0) m_track_peak = 0;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain_scanner.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain_scanner.h new file mode 100644 index 0000000..0224d8a --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/replaygain_scanner.h @@ -0,0 +1,37 @@ +//! Container of ReplayGain scan results from one or more tracks.
+class replaygain_result : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(replaygain_result, service_base);
+public:
+ //! Retrieves the gain value, in dB.
+ virtual float get_gain() = 0;
+ //! Retrieves the peak value, normalized to 0..1 range (audio_sample value).
+ virtual float get_peak() = 0;
+ //! Merges ReplayGain scan results from different tracks. Merge results from all tracks in an album to get album gain/peak values. \n
+ //! This function returns a newly created replaygain_result object. Existing replaygain_result objects remain unaltered.
+ virtual replaygain_result::ptr merge(replaygain_result::ptr other) = 0;
+};
+
+//! Instance of a ReplayGain scanner. \n
+//! Use static_api_ptr_t<replaygain_scanner_entry>()->instantiate() to create a replaygain_scanner object; see replaygain_scanner_entry for more info. \n
+//! Typical use: call process_chunk() with each chunk read from your track, call finalize() to obtain results for this track and reset replaygain_scanner's state for scanning another track; to obtain album gain/peak values, merge results (replaygain_result::merge) from all tracks. \n
+class replaygain_scanner : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(replaygain_scanner, service_base);
+public:
+ //! Processes a PCM chunk. \n
+ //! May throw exception_io_data if the chunk contains something that can't be processed properly.
+ virtual void process_chunk(const audio_chunk & chunk) = 0;
+ //! Finalizes the scanning process; resets scanner's internal state and returns results for the track we've just scanned. \n
+ //! After calling finalize(), scanner's state becomes the same as after instantiation; you can continue with processing another track without creating a new scanner object.
+ virtual replaygain_result::ptr finalize() = 0;
+};
+
+
+//! Entrypoint class for instantiating replaygain_scanner objects. Use static_api_ptr_t<replaygain_scanner_entry>()->instantiate() to create replaygain_scanner instances. \n
+//! This service is OPTIONAL; it's available from foobar2000 0.9.5.3 up but only if the ReplayGain Scanner component is installed. \n
+//! It is recommended that you use replaygain_scanner like this: try { myInstance = static_api_ptr_t<replaygain_scanner_entry>()->instantiate(); } catch(exception_service_not_found) { /* too old foobar2000 version or no foo_rgscan installed - complain/fail/etc */ }
+class replaygain_scanner_entry : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(replaygain_scanner_entry);
+public:
+ //! Instantiates a replaygain_scanner object.
+ virtual replaygain_scanner::ptr instantiate() = 0;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/resampler.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/resampler.h index 1b3b7f3..de46269 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/resampler.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/resampler.h @@ -22,4 +22,4 @@ public: };
template<typename T>
-class resampler_factory_t : public service_factory_single_t<resampler_entry_impl_t<T> > {};
\ No newline at end of file +class resampler_factory_t : public service_factory_single_t<resampler_entry_impl_t<T> > {};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/search_tools.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/search_tools.h new file mode 100644 index 0000000..db70571 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/search_tools.h @@ -0,0 +1,69 @@ +//! Instance of a search filter object. New in 0.9.5. \n
+//! This object contains a preprocessed search query; used to perform filtering similar to Media Library Search or Album List's "filter" box. \n
+//! Use search_filter_manager API to instantiate search_filter objects.
+class search_filter : public service_base {
+public:
+ //! For backwards compatibility with older (0.9.5 alpha) revisions of this API. Do not call.
+ virtual bool test_locked(const metadb_handle_ptr & p_item,const file_info * p_info) = 0;
+
+ //! Use this to run this filter on a group of items.
+ //! @param data Items to test.
+ //! @param out Pointer to a buffer (size at least equal to number of items in the source list) receiving the results.
+ virtual void test_multi(metadb_handle_list_cref data, bool * out) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(search_filter,service_base);
+};
+
+//! New in 0.9.5.3. You can obtain a search_filter_v2 pointer by using service_query() on a search_filter pointer, or from search_filter_manager_v2::create_ex().
+class search_filter_v2 : public search_filter {
+public:
+ virtual bool get_sort_pattern(titleformat_object::ptr & out, int & direction) = 0;
+
+ //! Abortable version of test_multi(). If the abort_callback object becomes signaled while the operation is being performed, contents of the output buffer are undefined and the operation will fail with exception_aborted.
+ virtual void test_multi_ex(metadb_handle_list_cref data, bool * out, abort_callback & abort) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(search_filter_v2, search_filter)
+};
+
+//! New in 0.9.5.4. You can obtain a search_filter_v2 pointer by using service_query() on a search_filter/search_filter_v2 pointer.
+class search_filter_v3 : public search_filter_v2 {
+public:
+ //! Returns whether the sort pattern returned by get_sort_pattern() was set by the user explicitly using "SORT BY" syntax or whether it was determined implicitly from some other part of the query. It's recommended to use this to determine whether to create a force-sorted autoplaylist or not.
+ virtual bool is_sort_explicit() = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(search_filter_v3, search_filter_v2)
+};
+
+//! Entrypoint class to instantiate search_filter objects. New in 0.9.5.
+class search_filter_manager : public service_base {
+public:
+ //! Creates a search_filter object. Throws an exception on failure (such as an error in the query). It's recommended that you relay the exception message to the user if this function fails.
+ virtual search_filter::ptr create(const char * p_query) = 0;
+
+ //! Retrieves the search expression manual string. See also: show_manual().
+ virtual void get_manual(pfc::string_base & p_out) = 0;
+
+ void show_manual() {
+ pfc::string8 temp;
+ get_manual(temp);
+ popup_message::g_show(temp,"Search Expression Reference");
+ }
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(search_filter_manager);
+};
+
+//! New in 0.9.5.3.
+class search_filter_manager_v2 : public search_filter_manager {
+public:
+ enum {
+ KFlagAllowSort = 1 << 0,
+ KFlagSuppressNotify = 1 << 1,
+ };
+ //! Creates a search_filter object. Throws an exception on failure (such as an error in the query). It's recommended that you relay the exception message to the user if this function fails.
+ //! @param changeNotify A completion_notify callback object that will get called each time the query's behavior changes as a result of some external event (such as system time change). The caller must refresh query results each time this callback is triggered. The status parameter of its on_completion() parameter is unused and always set to zero.
+ virtual search_filter_v2::ptr create_ex(const char * query, completion_notify::ptr changeNotify, t_uint32 flags) = 0;
+
+ //! Opens the search query syntax reference document, typically an external HTML in user's default web browser.
+ virtual void show_manual() = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(search_filter_manager_v2, search_filter_manager);
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service.cpp index dda21f0..a26f4d5 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service.cpp @@ -1,24 +1,59 @@ #include "foobar2000.h"
#include "component.h"
-foobar2000_api * g_api;
+foobar2000_api * g_foobar2000_api = NULL;
service_class_ref service_factory_base::enum_find_class(const GUID & p_guid)
{
- PFC_ASSERT(core_api::are_services_available() && g_api);
- return g_api->service_enum_find_class(p_guid);
+ PFC_ASSERT(core_api::are_services_available() && g_foobar2000_api);
+ return g_foobar2000_api->service_enum_find_class(p_guid);
}
bool service_factory_base::enum_create(service_ptr_t<service_base> & p_out,service_class_ref p_class,t_size p_index)
{
- PFC_ASSERT(core_api::are_services_available() && g_api);
- return g_api->service_enum_create(p_out,p_class,p_index);
+ PFC_ASSERT(core_api::are_services_available() && g_foobar2000_api);
+ return g_foobar2000_api->service_enum_create(p_out,p_class,p_index);
}
t_size service_factory_base::enum_get_count(service_class_ref p_class)
{
- PFC_ASSERT(core_api::are_services_available() && g_api);
- return g_api->service_enum_get_count(p_class);
+ PFC_ASSERT(core_api::are_services_available() && g_foobar2000_api);
+ return g_foobar2000_api->service_enum_get_count(p_class);
}
service_factory_base * service_factory_base::__internal__list = NULL;
+
+
+
+
+
+namespace {
+ class main_thread_callback_release_object : public main_thread_callback {
+ public:
+ main_thread_callback_release_object(service_ptr obj) : m_object(obj) {}
+ void callback_run() {
+ try { m_object.release(); } catch(...) {}
+ }
+ private:
+ service_ptr m_object;
+ };
+}
+namespace service_impl_helper {
+ void release_object_delayed(service_ptr obj) {
+ static_api_ptr_t<main_thread_callback_manager>()->add_callback(new service_impl_t<main_thread_callback_release_object>(obj));
+ }
+};
+
+
+void _standard_api_create_internal(service_ptr & out, const GUID & classID) {
+ service_class_ref c = service_factory_base::enum_find_class(classID);
+ switch(service_factory_base::enum_get_count(c)) {
+ case 0:
+ throw exception_service_not_found();
+ case 1:
+ PFC_ASSERT_SUCCESS( service_factory_base::enum_create(out, c, 0) );
+ break;
+ default:
+ throw exception_service_duplicated();
+ }
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service.h index 117f84e..4d04f3f 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service.h @@ -1,5 +1,5 @@ -#ifndef _SERVICE_H_
-#define _SERVICE_H_
+#ifndef _foobar2000_sdk_service_h_included_
+#define _foobar2000_sdk_service_h_included_
typedef const void* service_class_ref;
@@ -27,50 +27,74 @@ private: //! Converts a service interface pointer to a pointer that obscures service counter functionality.
template<typename T> static inline service_obscure_refcounting<T>* service_obscure_refcounting_cast(T * p_source) throw() {return static_cast<service_obscure_refcounting<T>*>(p_source);}
-//! Multiple inheritance SNAFU fix. In some cases, old service_release_safe method of service_base would not get a NULL this pointer when called on a NULL pointer.
+//Must be templated instead of taking service_base* because of multiple inheritance issues.
template<typename T> static void service_release_safe(T * p_ptr) throw() {
- if (p_ptr != NULL) p_ptr->service_release();
+ if (p_ptr != NULL) PFC_ASSERT_NO_EXCEPTION( p_ptr->service_release() );
}
-//! Multiple inheritance SNAFU fix. In some cases, old service_add_ref_safe method of service_base would not get a NULL this pointer when called on a NULL pointer.
+//Must be templated instead of taking service_base* because of multiple inheritance issues.
template<typename T> static void service_add_ref_safe(T * p_ptr) throw() {
- if (p_ptr != NULL) p_ptr->service_add_ref();
+ if (p_ptr != NULL) PFC_ASSERT_NO_EXCEPTION( p_ptr->service_add_ref() );
}
+class service_base;
+
+template<typename T>
+class service_ptr_base_t {
+public:
+ inline T* get_ptr() const throw() {return m_ptr;}
+protected:
+ T * m_ptr;
+};
+
+// forward declaration
+template<typename T> class service_nnptr_t;
+
//! Autopointer class to be used with all services. Manages reference counter calls behind-the-scenes.
template<typename T>
-class service_ptr_t {
+class service_ptr_t : public service_ptr_base_t<T> {
private:
typedef service_ptr_t<T> t_self;
-public:
- inline service_ptr_t() throw() : m_ptr(NULL) {}
- inline service_ptr_t(T* p_ptr) throw() : m_ptr(NULL) {copy(p_ptr);}
- inline service_ptr_t(const t_self & p_source) throw() : m_ptr(NULL) {copy(p_source);}
- template<typename t_source>
- inline service_ptr_t(t_source * p_ptr) throw() : m_ptr(NULL) {copy(p_ptr);}
+ template<typename t_source> void _init(t_source * in) {
+ m_ptr = in;
+ if (m_ptr) m_ptr->service_add_ref();
+ }
+public:
+ service_ptr_t() throw() {m_ptr = NULL;}
+ service_ptr_t(T * p_ptr) throw() {_init(p_ptr);}
+ service_ptr_t(const t_self & p_source) throw() {_init(p_source.get_ptr());}
+ template<typename t_source> service_ptr_t(t_source * p_ptr) throw() {_init(p_ptr);}
+ template<typename t_source> service_ptr_t(const service_ptr_base_t<t_source> & p_source) throw() {_init(p_source.get_ptr());}
- template<typename t_source>
- inline service_ptr_t(const service_ptr_t<t_source> & p_source) throw() : m_ptr(NULL) {copy(p_source);}
+ template<typename t_source> service_ptr_t(const service_nnptr_t<t_source> & p_source) throw() { m_ptr = p_source.get_ptr(); m_ptr->service_add_ref(); }
- inline ~service_ptr_t() throw() {service_release_safe(m_ptr);}
+ ~service_ptr_t() throw() {service_release_safe(m_ptr);}
template<typename t_source>
void copy(t_source * p_ptr) throw() {
+ service_add_ref_safe(p_ptr);
service_release_safe(m_ptr);
m_ptr = pfc::safe_ptr_cast<T>(p_ptr);
- service_add_ref_safe(m_ptr);
}
template<typename t_source>
- inline void copy(const service_ptr_t<t_source> & p_source) throw() {copy(p_source.get_ptr());}
+ void copy(const service_ptr_base_t<t_source> & p_source) throw() {copy(p_source.get_ptr());}
inline const t_self & operator=(const t_self & p_source) throw() {copy(p_source); return *this;}
inline const t_self & operator=(T * p_ptr) throw() {copy(p_ptr); return *this;}
- template<typename t_source> inline t_self & operator=(const service_ptr_t<t_source> & p_source) throw() {copy(p_source); return *this;}
+ template<typename t_source> inline t_self & operator=(const service_ptr_base_t<t_source> & p_source) throw() {copy(p_source); return *this;}
template<typename t_source> inline t_self & operator=(t_source * p_ptr) throw() {copy(p_ptr); return *this;}
+
+ template<typename t_source> inline t_self & operator=(const service_nnptr_t<t_source> & p_ptr) throw() {
+ service_release_safe(m_ptr);
+ t_source * ptr = p_ptr.get_ptr();
+ ptr->service_add_ref();
+ m_ptr = ptr;
+ return *this;
+ }
inline void release() throw() {
service_release_safe(m_ptr);
@@ -91,35 +115,112 @@ public: inline bool operator<(const t_self & p_item) const throw() {return m_ptr < p_item.get_ptr();}
template<typename t_other>
- inline t_self & operator<<(service_ptr_t<t_other> & p_source) throw() {__unsafe_set(p_source.__unsafe_detach());return *this;}
+ inline t_self & operator<<(service_ptr_t<t_other> & p_source) throw() {attach(p_source.detach());return *this;}
template<typename t_other>
- inline t_self & operator>>(service_ptr_t<t_other> & p_dest) throw() {p_dest.__unsafe_set(__unsafe_detach());return *this;}
+ inline t_self & operator>>(service_ptr_t<t_other> & p_dest) throw() {p_dest.attach(detach());return *this;}
- inline T* __unsafe_duplicate() const throw() {//should not be used ! temporary !
+ inline T* _duplicate_ptr() const throw() {//should not be used ! temporary !
service_add_ref_safe(m_ptr);
return m_ptr;
}
- inline T* __unsafe_detach() throw() {//should not be used ! temporary !
+ inline T* detach() throw() {
return pfc::replace_null_t(m_ptr);
}
template<typename t_source>
- inline void __unsafe_set(t_source * p_ptr) throw() {//should not be used ! temporary !
+ inline void attach(t_source * p_ptr) throw() {
service_release_safe(m_ptr);
m_ptr = pfc::safe_ptr_cast<T>(p_ptr);
}
+
+ T & operator*() const throw() {return *m_ptr;}
+
+ service_ptr_t<service_base> & _as_base_ptr() {
+ PFC_ASSERT( _as_base_ptr_check() );
+ return *reinterpret_cast<service_ptr_t<service_base>*>(this);
+ }
+ static bool _as_base_ptr_check() {
+ return static_cast<service_base*>((T*)NULL) == reinterpret_cast<service_base*>((T*)NULL);
+ }
+};
+
+//! Autopointer class to be used with all services. Manages reference counter calls behind-the-scenes. \n
+//! This assumes that the pointers are valid all the time (can't point to null). Mainly intended to be used for scenarios where null pointers are not valid and relevant code should crash ASAP if somebody passes invalid pointers around. \n
+//! You want to use service_ptr_t<> rather than service_nnptr_t<> most of the time.
+template<typename T>
+class service_nnptr_t : public service_ptr_base_t<T> {
private:
- T* m_ptr;
+ typedef service_nnptr_t<T> t_self;
+
+ template<typename t_source> void _init(t_source * in) {
+ m_ptr = in;
+ m_ptr->service_add_ref();
+ }
+ service_nnptr_t() throw() {pfc::crash();}
+public:
+ service_nnptr_t(T * p_ptr) throw() {_init(p_ptr);}
+ service_nnptr_t(const t_self & p_source) throw() {_init(p_source.get_ptr());}
+ template<typename t_source> service_nnptr_t(t_source * p_ptr) throw() {_init(p_ptr);}
+ template<typename t_source> service_nnptr_t(const service_ptr_base_t<t_source> & p_source) throw() {_init(p_source.get_ptr());}
+
+ ~service_nnptr_t() throw() {m_ptr->service_release();}
+
+ template<typename t_source>
+ void copy(t_source * p_ptr) throw() {
+ p_ptr->service_add_ref();
+ m_ptr->service_release();
+ m_ptr = pfc::safe_ptr_cast<T>(p_ptr);
+ }
+
+ template<typename t_source>
+ void copy(const service_ptr_base_t<t_source> & p_source) throw() {copy(p_source.get_ptr());}
+
+
+ inline const t_self & operator=(const t_self & p_source) throw() {copy(p_source); return *this;}
+ inline const t_self & operator=(T * p_ptr) throw() {copy(p_ptr); return *this;}
+
+ template<typename t_source> inline t_self & operator=(const service_ptr_base_t<t_source> & p_source) throw() {copy(p_source); return *this;}
+ template<typename t_source> inline t_self & operator=(t_source * p_ptr) throw() {copy(p_ptr); return *this;}
+
+
+ inline service_obscure_refcounting<T>* operator->() const throw() {PFC_ASSERT(m_ptr != NULL);return service_obscure_refcounting_cast(m_ptr);}
+
+ inline T* get_ptr() const throw() {return m_ptr;}
+
+ inline bool is_valid() const throw() {return true;}
+ inline bool is_empty() const throw() {return false;}
+
+ inline bool operator==(const t_self & p_item) const throw() {return m_ptr == p_item.get_ptr();}
+ inline bool operator!=(const t_self & p_item) const throw() {return m_ptr != p_item.get_ptr();}
+ inline bool operator>(const t_self & p_item) const throw() {return m_ptr > p_item.get_ptr();}
+ inline bool operator<(const t_self & p_item) const throw() {return m_ptr < p_item.get_ptr();}
+
+ inline T* _duplicate_ptr() const throw() {//should not be used ! temporary !
+ service_add_ref_safe(m_ptr);
+ return m_ptr;
+ }
+
+ T & operator*() const throw() {return *m_ptr;}
+
+ service_ptr_t<service_base> & _as_base_ptr() {
+ PFC_ASSERT( _as_base_ptr_check() );
+ return *reinterpret_cast<service_ptr_t<service_base>*>(this);
+ }
+ static bool _as_base_ptr_check() {
+ return static_cast<service_base*>((T*)NULL) == reinterpret_cast<service_base*>((T*)NULL);
+ }
};
namespace pfc {
- template<typename T>
- class traits_t<service_ptr_t<T> > : public traits_default {
+ class traits_service_ptr : public traits_default {
public:
enum { realloc_safe = true, constructor_may_fail = false};
};
+
+ template<typename T> class traits_t<service_ptr_t<T> > : public traits_service_ptr {};
+ template<typename T> class traits_t<service_nnptr_t<T> > : public traits_service_ptr {};
}
@@ -144,6 +245,8 @@ class service_list_t : public pfc::list_t<service_ptr_t<T>, t_alloc > if (p_guid == class_guid) {p_out = this; return true;} \
else return PARENTCLASS::service_query(p_out,p_guid); \
} \
+ typedef service_ptr_t<t_interface> ptr; \
+ typedef service_nnptr_t<t_interface> nnptr; \
protected: \
THISCLASS() {} \
~THISCLASS() {} \
@@ -154,7 +257,7 @@ class service_list_t : public pfc::list_t<service_ptr_t<T>, t_alloc > void __private__service_declaration_selftest() { \
pfc::assert_same_type<PARENTCLASS,PARENTCLASS::t_interface>(); /*parentclass must be an interface*/ \
__validate_service_class_helper<THISCLASS>(); /*service_base must be reachable by walking t_interface_parent*/ \
- pfc::safe_cast<service_base*>(this); /*this class must derive from service_base, directly or indirectly, and be implictly castable to it*/ \
+ pfc::implicit_cast<service_base*>(this); /*this class must derive from service_base, directly or indirectly, and be implictly castable to it*/ \
}
//! Helper macro for use when defining an entrypoint service class. Generates standard features of a service, including ability to register using service_factory and enumerate using service_enum. \n
@@ -203,10 +306,7 @@ public: bool service_query_t(service_ptr_t<T> & p_out)
{
pfc::assert_same_type<T,T::t_interface>();
- service_ptr_t<service_base> temp;
- if (!service_query(temp,T::class_guid)) return false;
- p_out.__unsafe_set(static_cast<T*>(temp.__unsafe_detach()));
- return true;
+ return service_query( *reinterpret_cast<service_ptr_t<service_base>*>(&p_out),T::class_guid);
}
typedef service_base t_interface;
@@ -219,6 +319,9 @@ private: const service_base & operator=(const service_base&) {throw pfc::exception_not_implemented();}
};
+typedef service_ptr_t<service_base> service_ptr;
+typedef service_nnptr_t<service_base> service_nnptr;
+
template<typename T>
static void __validate_service_class_helper() {
__validate_service_class_helper<T::t_interface_parent>();
@@ -232,7 +335,7 @@ static void __validate_service_class_helper<service_base>() {} class NOVTABLE service_factory_base {
protected:
- inline service_factory_base(const GUID & p_guid) : m_guid(p_guid) {PFC_ASSERT(!core_api::are_services_available());__internal__next=__internal__list;__internal__list=this;}
+ inline service_factory_base(const GUID & p_guid, service_factory_base * & factoryList) : m_guid(p_guid) {PFC_ASSERT(!core_api::are_services_available());__internal__next=factoryList;factoryList=this;}
inline ~service_factory_base() {PFC_ASSERT(!core_api::are_services_available());}
public:
inline const GUID & get_class_guid() const {return m_guid;}
@@ -254,18 +357,31 @@ private: const GUID & m_guid;
};
+template<typename B>
+class service_factory_traits {
+public:
+ static service_factory_base * & factory_list() {return service_factory_base::__internal__list;}
+};
template<typename B>
class service_factory_base_t : public service_factory_base {
public:
- service_factory_base_t() : service_factory_base(B::class_guid) {
+ service_factory_base_t() : service_factory_base(B::class_guid, service_factory_traits<B>::factory_list()) {
pfc::assert_same_type<B,B::t_interface_entrypoint>();
}
-
};
+template<typename T> static void _validate_service_ptr(service_ptr_t<T> const & ptr) {
+ PFC_ASSERT( ptr.is_valid() );
+ service_ptr_t<T> test;
+ PFC_ASSERT( ptr->service_query_t(test) );
+}
-
+#ifdef _DEBUG
+#define FB2K_ASSERT_VALID_SERVICE_PTR(ptr) _validate_service_ptr(ptr)
+#else
+#define FB2K_ASSERT_VALID_SERVICE_PTR(ptr)
+#endif
template<class T> static bool service_enum_create_t(service_ptr_t<T> & p_out,t_size p_index) {
pfc::assert_same_type<T,T::t_interface_entrypoint>();
@@ -279,6 +395,28 @@ template<class T> static bool service_enum_create_t(service_ptr_t<T> & p_out,t_s }
}
+template<typename T> static service_class_ref _service_find_class() {
+ pfc::assert_same_type<T,T::t_interface_entrypoint>();
+ return service_factory_base::enum_find_class(T::class_guid);
+}
+
+template<typename what>
+static bool _service_instantiate_helper(service_ptr_t<what> & out, service_class_ref servClass, t_size index) {
+ /*if (out._as_base_ptr_check()) {
+ const bool state = service_factory_base::enum_create(out._as_base_ptr(), servClass, index);
+ if (state) { FB2K_ASSERT_VALID_SERVICE_PTR(out); }
+ return state;
+ } else */{
+ service_ptr temp;
+ const bool state = service_factory_base::enum_create(temp, servClass, index);
+ if (state) {
+ out.attach( static_cast<what*>( temp.detach() ) );
+ FB2K_ASSERT_VALID_SERVICE_PTR( out );
+ }
+ return state;
+ }
+}
+
template<typename T> class service_class_helper_t {
public:
service_class_helper_t() : m_class(service_factory_base::enum_find_class(T::class_guid)) {
@@ -289,33 +427,25 @@ public: }
bool create(service_ptr_t<T> & p_out,t_size p_index) const {
- service_ptr_t<service_base> temp;
- if (!service_factory_base::enum_create(temp,m_class,p_index)) return false;
- p_out.__unsafe_set(static_cast<T*>(temp.__unsafe_detach()));
- return true;
+ return _service_instantiate_helper(p_out, m_class, p_index);
}
service_ptr_t<T> create(t_size p_index) const {
service_ptr_t<T> temp;
- if (!create(temp,p_index)) throw pfc::exception_bug_check();
+ if (!create(temp,p_index)) throw pfc::exception_bug_check_v2();
return temp;
}
+ service_class_ref get_class() const {return m_class;}
private:
service_class_ref m_class;
};
+void _standard_api_create_internal(service_ptr & out, const GUID & classID);
+
template<typename T> static void standard_api_create_t(service_ptr_t<T> & p_out) {
if (pfc::is_same_type<T,T::t_interface_entrypoint>::value) {
- service_class_helper_t<T::t_interface_entrypoint> helper;
- switch(helper.get_count()) {
- case 0:
- throw exception_service_not_found();
- case 1:
- if (!helper.create(reinterpret_cast<service_ptr_t<T::t_interface_entrypoint>&>(p_out),0)) throw pfc::exception_bug_check();
- break;
- default:
- throw exception_service_duplicated();
- }
+ _standard_api_create_internal(p_out._as_base_ptr(), T::class_guid);
+ FB2K_ASSERT_VALID_SERVICE_PTR(p_out);
} else {
service_ptr_t<T::t_interface_entrypoint> temp;
standard_api_create_t(temp);
@@ -323,26 +453,53 @@ template<typename T> static void standard_api_create_t(service_ptr_t<T> & p_out) }
}
+template<typename T> static void standard_api_create_t(T* & p_out) {
+ p_out = NULL;
+ standard_api_create_t( *reinterpret_cast< service_ptr_t<T> * >( & p_out ) );
+}
+
template<typename T> static service_ptr_t<T> standard_api_create_t() {
service_ptr_t<T> temp;
standard_api_create_t(temp);
return temp;
}
+template<typename T>
+static bool static_api_test_t() {
+ typedef T::t_interface_entrypoint EP;
+ service_class_helper_t<EP> helper;
+ if (helper.get_count() != 1) return false;
+ if (!pfc::is_same_type<T,EP>::value) {
+ service_ptr_t<T> t;
+ if (!helper.create(0)->service_query_t(t)) return false;
+ }
+ return true;
+}
+
+#define FB2K_API_AVAILABLE(API) static_api_test_t<API>()
+
//! Helper template used to easily access core services. \n
//! Usage: static_api_ptr_t<myclass> api; api->dosomething();
-//! Can be used at any point of code, WITH EXCEPTION of static objects that are initialized during DLL load before service system is initialized; such as static static_api_ptr_t objects or having static_api_ptr_t as members of statically created objects.
+//! Can be used at any point of code, WITH EXCEPTION of static objects that are initialized during the DLL loading process before the service system is initialized; such as static static_api_ptr_t objects or having static_api_ptr_t instances as members of statically created objects.
//! Throws exception_service_not_found if service could not be reached (which can be ignored for core APIs that are always present unless there is some kind of bug in the code).
template<typename t_interface>
class static_api_ptr_t {
+private:
+ typedef static_api_ptr_t<t_interface> t_self;
public:
static_api_ptr_t() {
standard_api_create_t(m_ptr);
}
- service_obscure_refcounting<t_interface>* operator->() const {return service_obscure_refcounting_cast(m_ptr.get_ptr());}
- t_interface* get_ptr() const {return m_ptr.get_ptr();}
+ service_obscure_refcounting<t_interface>* operator->() const {return service_obscure_refcounting_cast(m_ptr);}
+ t_interface * get_ptr() const {return m_ptr;}
+ ~static_api_ptr_t() {m_ptr->service_release();}
+
+ static_api_ptr_t(const t_self & in) {
+ m_ptr = in.m_ptr; m_ptr->service_add_ref();
+ }
+ const t_self & operator=(const t_self & in) {return *this;} //obsolete, each instance should carry the same pointer
private:
- service_ptr_t<t_interface> m_ptr;
+ t_interface * m_ptr;
};
//! Helper; simulates array with instance of each available implementation of given service class.
@@ -405,7 +562,7 @@ template<typename T> class service_factory_t : public service_factory_base_t<typename T::t_interface_entrypoint> {
public:
void instance_create(service_ptr_t<service_base> & p_out) {
- p_out = pfc::safe_cast<service_base*>(pfc::safe_cast<typename T::t_interface_entrypoint*>(pfc::safe_cast<T*>( new service_impl_t<T> )));
+ p_out = pfc::implicit_cast<service_base*>(pfc::implicit_cast<typename T::t_interface_entrypoint*>(pfc::implicit_cast<T*>( new service_impl_t<T> )));
}
};
@@ -416,10 +573,11 @@ public: TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(service_factory_single_t,g_instance)
void instance_create(service_ptr_t<service_base> & p_out) {
- p_out = pfc::safe_cast<service_base*>(pfc::safe_cast<typename T::t_interface_entrypoint*>(pfc::safe_cast<T*>(&g_instance)));
+ p_out = pfc::implicit_cast<service_base*>(pfc::implicit_cast<typename T::t_interface_entrypoint*>(pfc::implicit_cast<T*>(&g_instance)));
}
inline T& get_static_instance() {return g_instance;}
+ inline const T& get_static_instance() const {return g_instance;}
};
template<typename T>
@@ -431,7 +589,7 @@ public: service_factory_single_ref_t(T& param) : instance(param) {}
void instance_create(service_ptr_t<service_base> & p_out) {
- p_out = pfc::safe_cast<service_base*>(pfc::safe_cast<typename T::t_interface_entrypoint*>(pfc::safe_cast<T*>(&instance)));
+ p_out = pfc::implicit_cast<service_base*>(pfc::implicit_cast<typename T::t_interface_entrypoint*>(pfc::implicit_cast<T*>(&instance)));
}
inline T& get_static_instance() {return instance;}
@@ -445,10 +603,117 @@ public: TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(service_factory_single_transparent_t,service_impl_single_t<T>)
void instance_create(service_ptr_t<service_base> & p_out) {
- p_out = pfc::safe_cast<service_base*>(pfc::safe_cast<typename T::t_interface_entrypoint*>(pfc::safe_cast<T*>(this)));
+ p_out = pfc::implicit_cast<service_base*>(pfc::implicit_cast<typename T::t_interface_entrypoint*>(pfc::implicit_cast<T*>(this)));
}
inline T& get_static_instance() {return *(T*)this;}
};
-#endif
\ No newline at end of file +
+
+
+
+
+
+
+
+
+
+
+
+
+
+template<typename what>
+static bool service_by_guid_fallback(service_ptr_t<what> & out, const GUID & id) {
+ service_enum_t<what> e;
+ service_ptr_t<what> ptr;
+ while(e.next(ptr)) {
+ if (ptr->get_guid() == id) {out = ptr; return true;}
+ }
+ return false;
+}
+
+template<typename what>
+class service_by_guid_data {
+public:
+ service_by_guid_data() : m_servClass(), m_inited() {}
+
+ bool ready() const {return m_inited;}
+
+ void initialize() {
+ if (m_inited) return;
+ pfc::assert_same_type< what, typename what::t_interface_entrypoint >();
+ m_servClass = service_factory_base::enum_find_class(what::class_guid);
+ const t_size servCount = service_factory_base::enum_get_count(m_servClass);
+ for(t_size walk = 0; walk < servCount; ++walk) {
+ service_ptr_t<what> temp;
+ if (_service_instantiate_helper(temp, m_servClass, walk)) {
+ m_order.set(temp->get_guid(), walk);
+ }
+ }
+ m_inited = true;
+ }
+
+ bool create(service_ptr_t<what> & out, const GUID & id) const {
+ PFC_ASSERT(m_inited);
+ t_size index;
+ if (!m_order.query(id,index)) return false;
+ return _service_instantiate_helper(out, m_servClass, index);
+ }
+ service_ptr_t<what> create(const GUID & id) const {
+ service_ptr_t<what> temp; if (!crete(temp,id)) throw exception_service_not_found(); return temp;
+ }
+
+private:
+ volatile bool m_inited;
+ pfc::map_t<GUID,t_size> m_order;
+ service_class_ref m_servClass;
+};
+
+template<typename what>
+class _service_by_guid_data_container {
+public:
+ static service_by_guid_data<what> data;
+};
+template<typename what> service_by_guid_data<what> _service_by_guid_data_container<what>::data;
+
+
+template<typename what>
+static void service_by_guid_init() {
+ service_by_guid_data<what> & data = _service_by_guid_data_container<what>::data;
+ data.initialize();
+}
+template<typename what>
+static bool service_by_guid(service_ptr_t<what> & out, const GUID & id) {
+ pfc::assert_same_type< what, typename what::t_interface_entrypoint >();
+ service_by_guid_data<what> & data = _service_by_guid_data_container<what>::data;
+ if (data.ready()) {
+ //fall-thru
+ } else if (core_api::is_main_thread()) {
+ data.initialize();
+ } else {
+#ifdef _DEBUG
+ uDebugLog() << "Warning: service_by_guid() used in non-main thread without initialization, using fallback";
+#endif
+ return service_by_guid_fallback(out,id);
+ }
+ return data.create(out,id);
+}
+template<typename what>
+static service_ptr_t<what> service_by_guid(const GUID & id) {
+ service_ptr_t<what> temp;
+ if (!service_by_guid(temp,id)) throw exception_service_not_found();
+ return temp;
+}
+
+#define FB2K_FOR_EACH_SERVICE(type, call) {service_enum_t<typename type::t_interface_entrypoint> e; service_ptr_t<type> ptr; while(e.next(ptr)) {ptr->call;} }
+
+
+
+class comparator_service_guid {
+public:
+ template<typename what> static int compare(const what & v1, const what & v2) { return pfc::compare_t(v1->get_guid(), v2->get_guid()); }
+};
+
+
+#endif //_foobar2000_sdk_service_h_included_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service_impl.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service_impl.h index 9e07fa7..1c31536 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service_impl.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/service_impl.h @@ -6,8 +6,11 @@ class service_impl_t : public T public:
int FB2KAPI service_release() throw() {
int ret = --m_counter;
- if (ret == 0) try { delete this; } catch(...) {PFC_ASSERT(0);}
- return ret;}
+ if (ret == 0) {
+ PFC_ASSERT_NO_EXCEPTION( delete this );
+ }
+ return ret;
+ }
int FB2KAPI service_add_ref() throw() {return ++m_counter;}
TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(service_impl_t,T)
@@ -26,3 +29,9 @@ public: TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(service_impl_single_t,T)
};
+
+
+namespace service_impl_helper {
+ void release_object_delayed(service_ptr obj);
+};
+
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/system_time_keeper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/system_time_keeper.h new file mode 100644 index 0000000..452049b --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/system_time_keeper.h @@ -0,0 +1,47 @@ +namespace system_time_periods {
+ static const t_filetimestamp second = filetimestamp_1second_increment;
+ static const t_filetimestamp minute = second * 60;
+ static const t_filetimestamp hour = minute * 60;
+ static const t_filetimestamp day = hour * 24;
+ static const t_filetimestamp week = day * 7;
+};
+class system_time_callback {
+public:
+ virtual void on_time_changed(t_filetimestamp newVal) = 0;
+};
+//! \since 0.9.6
+class system_time_keeper : public service_base {
+public:
+ //! The callback object receives an on_changed() call with the current time inside the register_callback() call.
+ virtual void register_callback(system_time_callback * callback, t_filetimestamp resolution) = 0;
+
+ virtual void unregister_callback(system_time_callback * callback) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(system_time_keeper)
+};
+
+class system_time_callback_impl : public system_time_callback {
+public:
+ system_time_callback_impl() : m_registered() {}
+ ~system_time_callback_impl() {stop_timer();}
+
+ void stop_timer() {
+ if (m_registered) {
+ static_api_ptr_t<system_time_keeper>()->unregister_callback(this);
+ m_registered = false;
+ }
+ }
+ //! You get a on_changed() call inside the initialize_timer() call.
+ void initialize_timer(t_filetimestamp period) {
+ stop_timer();
+ static_api_ptr_t<system_time_keeper>()->register_callback(this, period);
+ m_registered = true;
+ }
+
+ void on_time_changed(t_filetimestamp newVal) {}
+
+ PFC_CLASS_NOT_COPYABLE_EX(system_time_callback_impl)
+private:
+ bool m_registered;
+};
+
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor.cpp index 784f6ad..6b6361a 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor.cpp @@ -108,9 +108,10 @@ void tag_processor::remove_trailing(const service_ptr_t<file> & p_file,abort_cal return static_api_ptr_t<tag_processor_trailing>()->remove(p_file,p_abort);
}
-void tag_processor::remove_id3v2(const service_ptr_t<file> & p_file,abort_callback & p_abort) {
- t_uint64 dummy;
+bool tag_processor::remove_id3v2(const service_ptr_t<file> & p_file,abort_callback & p_abort) {
+ t_uint64 dummy = 0;
tag_processor_id3v2::g_remove(p_file,dummy,p_abort);
+ return dummy > 0;
}
void tag_processor::remove_id3v2_trailing(const service_ptr_t<file> & p_file,abort_callback & p_abort) {
@@ -132,7 +133,7 @@ void tag_processor::read_id3v2(const service_ptr_t<file> & p_file,file_info & p_ void tag_processor::read_id3v2_trailing(const service_ptr_t<file> & p_file,file_info & p_info,abort_callback & p_abort)
{
- file_info_i temp_infos[2];
+ file_info_impl temp_infos[2];
bool have_id3v2 = true, have_trailing = true;
try {
read_id3v2(p_file,temp_infos[0],p_abort);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor.h index 8c5187a..92cd506 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor.h @@ -1,7 +1,3 @@ -#ifndef _TAG_PROCESSOR_H_
-#define _TAG_PROCESSOR_H_
-
-
PFC_DECLARE_EXCEPTION(exception_tag_not_found,exception_io_data,"Tag not found");
//! Callback interface for write-tags-to-temp-file-and-swap scheme, used for ID3v2 tag updates and such where entire file needs to be rewritten.
@@ -25,6 +21,7 @@ public: bool open_temp_file(service_ptr_t<file> & p_out,abort_callback & p_abort) {return false;}
};
+//! For internal use - call tag_processor namespace methods instead.
class NOVTABLE tag_processor_id3v2 : public service_base
{
public:
@@ -34,12 +31,15 @@ public: static bool g_get(service_ptr_t<tag_processor_id3v2> & p_out);
static void g_skip(const service_ptr_t<file> & p_file,t_filesize & p_size_skipped,abort_callback & p_abort);
+ static void g_skip_at(const service_ptr_t<file> & p_file,t_filesize p_base, t_filesize & p_size_skipped,abort_callback & p_abort);
+ static t_size g_multiskip(const service_ptr_t<file> & p_file,t_filesize & p_size_skipped,abort_callback & p_abort);
static void g_remove(const service_ptr_t<file> & p_file,t_filesize & p_size_removed,abort_callback & p_abort);
static void g_remove_ex(tag_write_callback & p_callback,const service_ptr_t<file> & p_file,t_filesize & p_size_removed,abort_callback & p_abort);
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(tag_processor_id3v2);
};
+//! For internal use - call tag_processor namespace methods instead.
class NOVTABLE tag_processor_trailing : public service_base
{
public:
@@ -80,8 +80,8 @@ namespace tag_processor { void write_multi_ex(tag_write_callback & p_callback,const service_ptr_t<file> & p_file,const file_info & p_info,abort_callback & p_abort,bool p_write_id3v1,bool p_write_id3v2,bool p_write_apev2);
//! Removes trailing tags from the file.
void remove_trailing(const service_ptr_t<file> & p_file,abort_callback & p_abort);
- //! Removes ID3v2 tags from the file.
- void remove_id3v2(const service_ptr_t<file> & p_file,abort_callback & p_abort);
+ //! Removes ID3v2 tags from the file. Returns true when a tag was removed, false when the file was not altered.
+ bool remove_id3v2(const service_ptr_t<file> & p_file,abort_callback & p_abort);
//! Removes ID3v2 and trailing tags from specified file (not to be confused with trailing ID3v2 which are not yet supported).
void remove_id3v2_trailing(const service_ptr_t<file> & p_file,abort_callback & p_abort);
//! Reads trailing tags from the file.
@@ -99,5 +99,3 @@ namespace tag_processor { void truncate_to_id3v1(file_info & p_info);
};
-
-#endif //_TAG_PROCESSOR_H_
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor_id3v2.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor_id3v2.cpp index accff2e..516bf37 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor_id3v2.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/tag_processor_id3v2.cpp @@ -17,12 +17,12 @@ void tag_processor_id3v2::g_remove_ex(tag_write_callback & p_callback,const serv len = p_file->get_size(p_abort);
- if (len == filesize_invalid) throw exception_io_no_length();;
+ if (len == filesize_invalid) throw exception_io_no_length();
p_file->seek(0,p_abort);
t_uint64 offset;
- g_skip(p_file,offset,p_abort);
+ g_multiskip(p_file,offset,p_abort);
if (offset>0 && offset<len)
{
@@ -43,45 +43,47 @@ void tag_processor_id3v2::g_remove_ex(tag_write_callback & p_callback,const serv p_size_removed = offset;
}
-void tag_processor_id3v2::g_skip(const service_ptr_t<file> & p_file,t_uint64 & p_size_skipped,abort_callback & p_abort)
-{
+t_size tag_processor_id3v2::g_multiskip(const service_ptr_t<file> & p_file,t_filesize & p_size_skipped,abort_callback & p_abort) {
+ t_filesize offset = 0;
+ t_size count = 0;
+ for(;;) {
+ t_filesize delta;
+ g_skip_at(p_file, offset, delta, p_abort);
+ if (delta == 0) break;
+ offset += delta;
+ ++count;
+ }
+ p_size_skipped = offset;
+ return count;
+}
+void tag_processor_id3v2::g_skip(const service_ptr_t<file> & p_file,t_uint64 & p_size_skipped,abort_callback & p_abort) {
+ g_skip_at(p_file, 0, p_size_skipped, p_abort);
+}
- unsigned char tmp[10];
+void tag_processor_id3v2::g_skip_at(const service_ptr_t<file> & p_file,t_filesize p_base, t_filesize & p_size_skipped,abort_callback & p_abort) {
- t_size io_bytes_done;
+ unsigned char tmp[10];
- p_file->seek ( 0, p_abort );
+ p_file->seek ( p_base, p_abort );
- io_bytes_done = p_file->read( tmp, sizeof(tmp), p_abort);
- if (io_bytes_done != sizeof(tmp)) {
- p_file->seek ( 0, p_abort );
+ if (p_file->read( tmp, sizeof(tmp), p_abort) != sizeof(tmp)) {
+ p_file->seek ( p_base, p_abort );
p_size_skipped = 0;
return;
}
- if ( 0 != memcmp ( tmp, "ID3", 3) ) {
- p_file->seek ( 0, p_abort );
+ if (
+ 0 != memcmp ( tmp, "ID3", 3) ||
+ ( tmp[5] & 0x0F ) != 0 ||
+ ((tmp[6] | tmp[7] | tmp[8] | tmp[9]) & 0x80) != 0
+ ) {
+ p_file->seek ( p_base, p_abort );
p_size_skipped = 0;
return;
}
- int Unsynchronisation = tmp[5] & 0x80;
- int ExtHeaderPresent = tmp[5] & 0x40;
- int ExperimentalFlag = tmp[5] & 0x20;
int FooterPresent = tmp[5] & 0x10;
- if ( tmp[5] & 0x0F ) {
- p_file->seek ( 0, p_abort );
- p_size_skipped = 0;
- return;
- }
-
- if ( (tmp[6] | tmp[7] | tmp[8] | tmp[9]) & 0x80 ) {
- p_file->seek ( 0, p_abort );
- p_size_skipped = 0;
- return;
- }
-
t_uint32 ret;
ret = tmp[6] << 21;
ret += tmp[7] << 14;
@@ -90,7 +92,13 @@ void tag_processor_id3v2::g_skip(const service_ptr_t<file> & p_file,t_uint64 & p ret += 10;
if ( FooterPresent ) ret += 10;
- p_file->seek ( ret, p_abort );
+ try {
+ p_file->seek ( p_base + ret, p_abort );
+ } catch(exception_io_seek_out_of_range) {
+ p_file->seek( p_base, p_abort );
+ p_size_skipped = 0;
+ return;
+ }
p_size_skipped = ret;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/threaded_process.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/threaded_process.h index 6a071bf..60a10cb 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/threaded_process.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/threaded_process.h @@ -1,62 +1,119 @@ -#ifndef _foobar2000_sdk_threaded_process_h_
-#define _foobar2000_sdk_threaded_process_h_
-
-class NOVTABLE threaded_process_status
-{
+//! Callback class passed to your threaded_process client code; allows you to give various visual feedback to the user.
+class NOVTABLE threaded_process_status {
public:
enum {progress_min = 0, progress_max = 5000};
+ //! Sets the primary progress bar state; scale from progress_min to progress_max.
virtual void set_progress(t_size p_state) = 0;
+ //! Sets the secondary progress bar state; scale from progress_min to progress_max.
virtual void set_progress_secondary(t_size p_state) = 0;
+ //! Sets the currently progressed item label. When working with files, you should use set_file_path() instead.
virtual void set_item(const char * p_item,t_size p_item_len = ~0) = 0;
+ //! Sets the currently progressed item label; treats the label as a file path.
virtual void set_item_path(const char * p_item,t_size p_item_len = ~0) = 0;
+ //! Sets the title of the dialog. You normally don't need this function unless you want to override the title you set when initializing the threaded_process.
virtual void set_title(const char * p_title,t_size p_title_len = ~0) = 0;
+ //! Should not be used.
virtual void force_update() = 0;
+ //! Returns whether the process is paused.
virtual bool is_paused() = 0;
- virtual bool process_pause() = 0;//checks if process is paused and sleeps if needed; returns false when process should be aborted, true on success
+
+ //! Checks if process is paused and sleeps if needed; returns false when process should be aborted, true on success. \n
+ //! You should use poll_pause() instead of calling this directly.
+ virtual bool process_pause() = 0;
+
+ //! Automatically sleeps if the process is paused.
+ void poll_pause() {if (!process_pause()) throw exception_aborted();}
+ //! Helper; sets primary progress with a custom scale.
void set_progress(t_size p_state,t_size p_max);
+ //! Helper; sets secondary progress with a custom scale.
void set_progress_secondary(t_size p_state,t_size p_max);
+ //! Helper; sets primary progress with a float 0..1 scale.
void set_progress_float(double p_state);
+ //! Helper; sets secondary progress with a float 0..1 scale.
void set_progress_secondary_float(double p_state);
protected:
threaded_process_status() {}
~threaded_process_status() {}
};
-
-class NOVTABLE threaded_process_callback : public service_base
-{
+//! Callback class for the threaded_process API. You must implement this to create your own threaded_process client.
+class NOVTABLE threaded_process_callback : public service_base {
public:
+ //! Called from the main thread before spawning the worker thread. \n
+ //! Note that you should not access the window handle passed to on_init() in the worker thread later on.
virtual void on_init(HWND p_wnd) {}
+ //! Called from the worker thread. Do all the hard work here.
virtual void run(threaded_process_status & p_status,abort_callback & p_abort) = 0;
+ //! Called after the worker thread has finished executing.
virtual void on_done(HWND p_wnd,bool p_was_aborted) {}
FB2K_MAKE_SERVICE_INTERFACE(threaded_process_callback,service_base);
};
+
+//! The threaded_process API allows you to easily put timeconsuming tasks in worker threads, with progress dialog giving nice feedback to the user. \n
+//! Thanks to this API you can perform such tasks with no user interface related programming at all.
class NOVTABLE threaded_process : public service_base {
public:
enum {
+ //! Shows the "abort" button.
flag_show_abort = 1,
+ //! Obsolete, do not use.
flag_show_minimize = 1 << 1,
+ //! Shows a progress bar.
flag_show_progress = 1 << 2,
- flag_show_progress_dual = 1 << 3,//implies flag_show_progress
+ //! Shows dual progress bars; implies flag_show_progress.
+ flag_show_progress_dual = 1 << 3,
+ //! Shows the item being currently processed.
flag_show_item = 1 << 4,
+ //! Shows the "pause" button.
flag_show_pause = 1 << 5,
+ //! Obsolete, do not use.
flag_high_priority = 1 << 6,
- flag_show_delayed = 1 << 7,//modeless-only
- flag_no_focus = 1 << 8,//new (0.9.3)
+ //! Make the dialog hidden by default and show it only if the operation could not be completed after 500ms. Implies flag_no_focus. Relevant only to modeless dialogs.
+ flag_show_delayed = 1 << 7,
+ //! Do not focus the dialog by default.
+ flag_no_focus = 1 << 8,
};
- virtual bool run_modal(service_ptr_t<threaded_process_callback> p_callback,unsigned p_flags,HWND p_parent,const char * p_title,t_size p_title_len) = 0;
- virtual bool run_modeless(service_ptr_t<threaded_process_callback> p_callback,unsigned p_flags,HWND p_parent,const char * p_title,t_size p_title_len) = 0;
+ //! Runs a synchronous threaded_process operation - the function does not return until the operation has completed, though the app UI is not frozen and the operation is abortable. \n
+ //! This API is obsolete and should not be used. Please use run_modeless() instead if possible.
+ //! @param p_callback Interface to your threaded_process client.
+ //! @param p_flags Flags describing requested dialog functionality. See threaded_process::flag_* constants.
+ //! @param p_parent Parent window for the progress dialog - typically core_api::get_main_window().
+ //! @param p_title Initial title of the dialog.
+ //! @returns True if the operation has completed normally, false if the user has aborted the operation. In case of a catastrophic failure such as dialog creation failure, exceptions will be thrown.
+ virtual bool run_modal(service_ptr_t<threaded_process_callback> p_callback,unsigned p_flags,HWND p_parent,const char * p_title,t_size p_title_len = ~0) = 0;
+ //! Runs an asynchronous threaded_process operation.
+ //! @param p_callback Interface to your threaded_process client.
+ //! @param p_flags Flags describing requested dialog functionality. See threaded_process::flag_* constants.
+ //! @param p_parent Parent window for the progress dialog - typically core_api::get_main_window().
+ //! @param p_title Initial title of the dialog.
+ //! @returns True, always; the return value should be ignored. In case of a catastrophic failure such as dialog creation failure, exceptions will be thrown.
+ virtual bool run_modeless(service_ptr_t<threaded_process_callback> p_callback,unsigned p_flags,HWND p_parent,const char * p_title,t_size p_title_len = ~0) = 0;
+
+
+ //! Helper invoking run_modal().
+ static bool g_run_modal(service_ptr_t<threaded_process_callback> p_callback,unsigned p_flags,HWND p_parent,const char * p_title,t_size p_title_len = ~0);
+ //! Helper invoking run_modeless().
+ static bool g_run_modeless(service_ptr_t<threaded_process_callback> p_callback,unsigned p_flags,HWND p_parent,const char * p_title,t_size p_title_len = ~0);
- static bool g_run_modal(service_ptr_t<threaded_process_callback> p_callback,unsigned p_flags,HWND p_parent,const char * p_title,t_size p_title_len = infinite);
- static bool g_run_modeless(service_ptr_t<threaded_process_callback> p_callback,unsigned p_flags,HWND p_parent,const char * p_title,t_size p_title_len = infinite);
FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(threaded_process);
};
-#endif //_foobar2000_sdk_threaded_process_h_
\ No newline at end of file +
+
+//! Helper - forward threaded_process_callback calls to a service object that for whatever reason cannot publish threaded_process_callback API by itself.
+template<typename TTarget> class threaded_process_callback_redir : public threaded_process_callback {
+public:
+ threaded_process_callback_redir(TTarget * target) : m_target(target) {}
+ void on_init(HWND p_wnd) {m_target->tpc_on_init(p_wnd);}
+ void run(threaded_process_status & p_status,abort_callback & p_abort) {m_target->tpc_run(p_status, p_abort);}
+ void on_done(HWND p_wnd,bool p_was_aborted) {m_target->tpc_on_done(p_wnd, p_was_aborted); }
+private:
+ const service_ptr_t<TTarget> m_target;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/titleformat.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/titleformat.cpp index ba9d503..251e15a 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/titleformat.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/titleformat.cpp @@ -1,5 +1,8 @@ #include "foobar2000.h"
+
+#define tf_profiler(x) // profiler(x)
+
void titleformat_compiler::remove_color_marks(const char * src,pfc::string_base & out)//helper
{
out.reset();
@@ -61,588 +64,11 @@ void titleformat_compiler::remove_forbidden_chars_string(pfc::string_base & p_ou remove_forbidden_chars_string_append(p_out,p_source,p_source_len,p_reserved_chars);
}
-void titleformat_hook_impl_file_info::process_codec(titleformat_text_out * p_out)
-{
- pfc::string8 temp;
- const char * val = m_info->info_get("codec");
- if (val)
- {
- p_out->write(titleformat_inputtypes::meta,val);
- }
- else
- {
- val = m_info->info_get("referenced_file");
- if (val) uAddStringUpper(temp,pfc::string_extension(val));
- else uAddStringUpper(temp,pfc::string_extension(m_location.get_path()));
- p_out->write(titleformat_inputtypes::meta,temp);
- }
-}
-
-bool titleformat_hook_impl_file_info::remap_meta(t_size & p_meta_index, const char * p_name, t_size p_name_length)
-{
- p_meta_index = infinite;
- if (!stricmp_utf8_ex(p_name, p_name_length, "album", infinite))
- {
- p_meta_index = m_info->meta_find("album");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("venue");
- if (p_meta_index != infinite) return true;
- return false;
- }
- else if (!stricmp_utf8_ex(p_name, p_name_length, "artist", infinite))
- {
- p_meta_index = m_info->meta_find("artist");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("album artist");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("composer");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("performer");
- if (p_meta_index != infinite) return true;
- return false;
- }
- else if (!stricmp_utf8_ex(p_name, p_name_length, "album artist", infinite))
- {
- p_meta_index = m_info->meta_find("album artist");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("artist");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("composer");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("performer");
- if (p_meta_index != infinite) return true;
- return false;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"track artist",infinite))
- {
- t_size index_artist, index_album_artist;
-
- index_artist = m_info->meta_find("artist");
- if (index_artist == infinite) return false;
- index_album_artist = m_info->meta_find("album artist");
- if (index_album_artist == infinite) return false;
- if (m_info->are_meta_fields_identical(index_artist, index_album_artist)) return false;
-
- p_meta_index = index_artist;
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"track",infinite) || !stricmp_utf8_ex(p_name,p_name_length,"tracknumber",infinite))
- {
- p_meta_index = m_info->meta_find("tracknumber");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("track");
- if (p_meta_index != infinite) return true;
- return false;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"disc",infinite) || !stricmp_utf8_ex(p_name,p_name_length,"discnumber",infinite))
- {
- p_meta_index = m_info->meta_find("discnumber");
- if (p_meta_index != infinite) return true;
- p_meta_index = m_info->meta_find("disc");
- if (p_meta_index != infinite) return true;
- return false;
- }
- else
- {
- p_meta_index = m_info->meta_find_ex(p_name,p_name_length);
- return p_meta_index != infinite;
- }
-}
-
-bool titleformat_hook_impl_file_info::process_field(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,bool & p_found_flag)
-{
- p_found_flag = false;
-
- //todo make this bsearch someday
- if (stricmp_utf8_ex(p_name,p_name_length,"filename",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_filename",infinite) == 0) {
- pfc::string8 temp;
- filesystem::g_get_display_path(m_location.get_path(),temp);
- p_out->write(titleformat_inputtypes::unknown,pfc::string_filename(temp),infinite);
- p_found_flag = true;
- return true;
- } else if (stricmp_utf8_ex(p_name,p_name_length,"filename_ext",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_filename_ext",infinite) == 0) {
- pfc::string8 temp;
- filesystem::g_get_display_path(m_location.get_path(),temp);
- p_out->write(titleformat_inputtypes::unknown,pfc::string_filename_ext(temp),infinite);
- p_found_flag = true;
- return true;
- } else if (!stricmp_utf8_ex(p_name,p_name_length,"filename_sort",infinite)) {
- pfc::string8 temp;
- filesystem::g_get_display_path(m_location.get_path(),temp);
- p_out->write(titleformat_inputtypes::unknown,pfc::string_filename(temp),infinite);
- p_out->write(titleformat_inputtypes::unknown,"|",infinite);
- p_out->write(titleformat_inputtypes::unknown,pfc::format_uint(m_location.get_subsong(),10),infinite);
- p_found_flag = true;
- return true;
- } else if (stricmp_utf8_ex(p_name,p_name_length,"path",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_path",infinite) == 0) {
- pfc::string8 temp;
- filesystem::g_get_display_path(m_location.get_path(),temp);
- p_out->write(titleformat_inputtypes::unknown,temp.is_empty() ? "n/a" : temp.get_ptr(),infinite);
- p_found_flag = true;
- return true;
- } else if (!stricmp_utf8_ex(p_name,p_name_length,"path_sort",infinite)) {
- pfc::string8_fastalloc temp;
- filesystem::g_get_display_path(m_location.get_path(),temp);
- p_out->write(titleformat_inputtypes::unknown,temp,infinite);
- p_out->write(titleformat_inputtypes::unknown,"|",infinite);
- p_out->write(titleformat_inputtypes::unknown,pfc::format_uint(m_location.get_subsong(),10),infinite);
- p_found_flag = true;
- return true;
- } else if (stricmp_utf8_ex(p_name,p_name_length,"directoryname",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_directoryname",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"directory",infinite) == 0) {
- int count = 1;
- if (count > 0)
- {
- pfc::string8_fastalloc temp;
- filesystem::g_get_display_path(m_location.get_path(),temp);
-
- for(;count;count--)
- {
- t_size ptr = temp.scan_filename();
- if (ptr==0) {temp.reset();break;}
- ptr--;
- temp.truncate(ptr);
- }
-
- if (temp.is_empty())
- {
- p_found_flag = false;
- }
- else
- {
- p_out->write(titleformat_inputtypes::meta,temp + temp.scan_filename(),infinite);
- p_found_flag = true;
- }
- }
- return true;
- }
- else if (stricmp_utf8_ex(p_name,p_name_length,"subsong",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_subsong",infinite) == 0)
- {
- p_out->write_int(titleformat_inputtypes::unknown,m_location.get_subsong());
- p_found_flag = true;
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"channels",infinite))
- {
- unsigned val = (unsigned)m_info->info_get_int("channels");
- switch(val)
- {
- case 0: p_out->write(titleformat_inputtypes::meta,"N/A",infinite); break;
- case 1: p_out->write(titleformat_inputtypes::meta,"mono",infinite); p_found_flag = true; break;
- case 2: p_out->write(titleformat_inputtypes::meta,"stereo",infinite); p_found_flag = true; break;
- default: p_out->write_int(titleformat_inputtypes::meta,val); p_out->write(titleformat_inputtypes::meta,"ch",infinite); p_found_flag = true; break;
- }
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"bitrate",infinite))
- {
- const char * value = m_info->info_get("bitrate_dynamic");
- if (value == 0 || *value == 0) value = m_info->info_get("bitrate");
- if (value == 0 || *value == 0) return false;
- p_out->write(titleformat_inputtypes::meta,value);
- p_found_flag = true;
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"samplerate",infinite))
- {
- const char * value = m_info->info_get("samplerate");
- if (value == 0 || *value == 0) return false;
- p_out->write(titleformat_inputtypes::meta,value);
- p_found_flag = true;
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"title",infinite))
- {
- if (process_meta(p_out,p_name,p_name_length,", ",2,", ",2))
- {
- p_found_flag = true;
- return true;
- }
- else
- {
- pfc::string8 temp;
- filesystem::g_get_display_path(m_location.get_path(),temp);
- pfc::string_filename fn(temp);
- if (fn.is_empty()) p_out->write(titleformat_inputtypes::meta,temp);
- else p_out->write(titleformat_inputtypes::meta,fn);
- p_found_flag = true;
- return true;
- }
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"codec",infinite))
- {
- process_codec(p_out);
- p_found_flag = true;
- return true;
- } else if (!stricmp_utf8_ex(p_name,p_name_length,"codec_profile",infinite)) {
- const char * profile = m_info->info_get("codec_profile");
- if (profile == NULL) return false;
- p_out->write(titleformat_inputtypes::meta,profile,infinite);
- p_found_flag = true;
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"track",infinite) || !stricmp_utf8_ex(p_name,p_name_length,"tracknumber",infinite))
- {
- const t_size pad = 2;
- const char * val = m_info->meta_get_ex("tracknumber",infinite,0);
- if (val == 0) m_info->meta_get_ex("track",infinite,0);
- if (val != 0)
- {
- p_found_flag = true;
- t_size val_len = strlen(val);
- if (val_len < pad)
- {
- t_size n = pad - val_len;
- do {
- p_out->write(titleformat_inputtypes::meta,"0",1);
- n--;
- } while(n > 0);
- }
- p_out->write(titleformat_inputtypes::meta,val);
- }
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"disc",infinite) || !stricmp_utf8_ex(p_name,p_name_length,"discnumber",infinite))
- {
- const t_size pad = 1;
- const char * val = m_info->meta_get_ex("discnumber",infinite,0);
- if (val == 0) val = m_info->meta_get_ex("disc",infinite,0);
- if (val != 0)
- {
- p_found_flag = true;
- t_size val_len = strlen(val);
- if (val_len < pad)
- {
- t_size n = pad - val_len;
- do {
- p_out->write(titleformat_inputtypes::meta,"0");
- n--;
- } while(n > 0);
- }
- p_out->write(titleformat_inputtypes::meta,val);
- }
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"totaltracks",infinite)) {
- const t_size pad = 2;
- const char * val = m_info->meta_get_ex("totaltracks",infinite,0);
- if (val != NULL)
- {
- p_found_flag = true;
- t_size val_len = strlen(val);
- if (val_len < pad)
- {
- t_size n = pad - val_len;
- do {
- p_out->write(titleformat_inputtypes::meta,"0",1);
- n--;
- } while(n > 0);
- }
- p_out->write(titleformat_inputtypes::meta,val);
- }
- return true;
- } else if (stricmp_utf8_ex(p_name,p_name_length,"length",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_length",infinite) == 0) {
- double len = m_info->get_length();
- if (len>0)
- {
- p_out->write(titleformat_inputtypes::unknown,pfc::format_time(pfc::rint64(len)));
- p_found_flag = true;
- return true;
- }
- else return false;
- } else if (stricmp_utf8_ex(p_name,p_name_length,"length_ex",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_length_ex",infinite) == 0) {
- double len = m_info->get_length();
- if (len>0)
- {
- p_out->write(titleformat_inputtypes::unknown,pfc::format_time_ex(len),infinite);
- p_found_flag = true;
- return true;
- }
- else return false;
- } else if (stricmp_utf8_ex(p_name,p_name_length,"length_seconds",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_length_seconds",infinite) == 0) {
- double len = m_info->get_length();
- if (len>0) {
- p_out->write_int(titleformat_inputtypes::unknown,(t_uint64)len);
- p_found_flag = true;
- return true;
- } else return false;
- } else if (stricmp_utf8_ex(p_name,p_name_length,"length_seconds_fp",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_length_seconds_fp",infinite) == 0) {
- double len = m_info->get_length();
- if (len>0) {
- p_out->write(titleformat_inputtypes::unknown,pfc::string_fixed_t<64>()<<len);
- p_found_flag = true;
- return true;
- } else return false;
- } else if (stricmp_utf8_ex(p_name,p_name_length,"length_samples",infinite) == 0 || stricmp_utf8_ex(p_name,p_name_length,"_length_samples",infinite) == 0) {
- t_int64 val = m_info->info_get_length_samples();
- if (val>0) {
- p_out->write_int(titleformat_inputtypes::unknown,val);
- p_found_flag = true;
- return true;
- } else return false;
- }
- else if (p_name_length > 2 && p_name[0] == '_' && p_name[1] == '_')
- {//info
- if (!stricmp_utf8_ex(p_name,p_name_length,"__replaygain_album_gain",infinite))
- {
- char rgtemp[replaygain_info::text_buffer_size];
- m_info->get_replaygain().format_album_gain(rgtemp);
- if (rgtemp[0] == 0) return false;
- p_out->write(titleformat_inputtypes::meta,rgtemp);
- p_found_flag = true;
- return true;
- }
- if (!stricmp_utf8_ex(p_name,p_name_length,"__replaygain_album_peak",infinite))
- {
- char rgtemp[replaygain_info::text_buffer_size];
- m_info->get_replaygain().format_album_peak(rgtemp);
- if (rgtemp[0] == 0) return false;
- p_out->write(titleformat_inputtypes::meta,rgtemp);
- p_found_flag = true;
- return true;
- }
- if (!stricmp_utf8_ex(p_name,p_name_length,"__replaygain_track_gain",infinite))
- {
- char rgtemp[replaygain_info::text_buffer_size];
- m_info->get_replaygain().format_track_gain(rgtemp);
- if (rgtemp[0] == 0) return false;
- p_out->write(titleformat_inputtypes::meta,rgtemp);
- p_found_flag = true;
- return true;
- }
- if (!stricmp_utf8_ex(p_name,p_name_length,"__replaygain_track_peak",infinite))
- {
- char rgtemp[replaygain_info::text_buffer_size];
- m_info->get_replaygain().format_track_peak(rgtemp);
- if (rgtemp[0] == 0) return false;
- p_out->write(titleformat_inputtypes::meta,rgtemp);
- p_found_flag = true;
- return true;
- }
- const char * value = m_info->info_get_ex(p_name+2,p_name_length-2);
- if (value == 0 || *value == 0) return false;
- p_out->write(titleformat_inputtypes::meta,value);
- p_found_flag = true;
- return true;
- }
- else if (p_name_length > 1 && p_name[0] == '_')
- {//special field
- bool found = process_extra(p_out,p_name+1,p_name_length-1);
- p_found_flag = found;
- return found;
- }
- else
- {//meta
- t_size index;
- if (remap_meta(index, p_name, p_name_length))
- {
- bool status = process_meta(p_out,index,", ",2,", ",2);
- p_found_flag = status;
- return status;
- }
- return false;
- }
-}
-
-bool titleformat_hook_impl_file_info::process_function(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,titleformat_hook_function_params * p_params,bool & p_found_flag)
-{
- p_found_flag = false;
- if (!stricmp_utf8_ex(p_name,p_name_length,"meta",infinite))
- {
- switch(p_params->get_param_count())
- {
- case 1:
- {
- const char * name;
- t_size name_length;
- p_params->get_param(0,name,name_length);
- bool status = process_meta(p_out,name,name_length,", ",2,", ",2);
- p_found_flag = status;
- return true;
- }
- case 2:
- {
- const char * name;
- t_size name_length;
- p_params->get_param(0,name,name_length);
- t_size index_val = p_params->get_param_uint(1);
- const char * value = m_info->meta_get_ex(name,name_length,index_val);
- if (value != 0)
- {
- p_found_flag = true;
- p_out->write(titleformat_inputtypes::meta,value,infinite);
- }
- return true;
- }
- default:
- return false;
- }
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"meta_sep",infinite))
- {
- switch(p_params->get_param_count())
- {
- case 2:
- {
- const char * name, * sep1;
- t_size name_length, sep1_length;
- p_params->get_param(0,name,name_length);
- p_params->get_param(1,sep1,sep1_length);
- bool status = process_meta(p_out,name,name_length,sep1,sep1_length,sep1,sep1_length);
- p_found_flag = status;
- return true;
- }
- case 3:
- {
- const char * name, * sep1, * sep2;
- t_size name_length, sep1_length, sep2_length;
- p_params->get_param(0,name,name_length);
- p_params->get_param(1,sep1,sep1_length);
- p_params->get_param(2,sep2,sep2_length);
- bool status = process_meta(p_out,name,name_length,sep1,sep1_length,sep2,sep2_length);
- p_found_flag = status;
- return true;
- }
- default:
- return false;
- }
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"meta_test",infinite))
- {
- t_size n, count = p_params->get_param_count();
- if (count == 0) return false;
- bool found_all = true;
- for(n=0;n<count;n++)
- {
- const char * name;
- t_size name_length;
- p_params->get_param(n,name,name_length);
- if (!m_info->meta_exists_ex(name,name_length))
- {
- found_all = false;
- break;
- }
- }
- if (found_all)
- {
- p_found_flag = true;
- p_out->write_int(titleformat_inputtypes::meta,1);
- }
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"meta_num",infinite))
- {
- if (p_params->get_param_count() != 1) return false;
- const char * name;
- t_size name_length;
- p_params->get_param(0,name,name_length);
- t_size count = m_info->meta_get_count_by_name_ex(name,name_length);
- p_out->write_int(titleformat_inputtypes::meta,count);
- if (count > 0) p_found_flag = true;
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"info",infinite))
- {
- if (p_params->get_param_count() != 1) return false;
- const char * name;
- t_size name_length;
- p_params->get_param(0,name,name_length);
- const char * value = m_info->info_get_ex(name,name_length);
- if (value != 0)
- {
- p_found_flag = true;
- p_out->write(titleformat_inputtypes::meta,value);
- }
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"extra",infinite))
- {
- if (p_params->get_param_count() != 1) return false;
- const char * name;
- t_size name_length;
- p_params->get_param(0,name,name_length);
- if (process_extra(p_out,name,name_length)) p_found_flag = true;
- return true;
- } else if (!stricmp_utf8_ex(p_name,p_name_length,"codec",infinite))
- {
- if (p_params->get_param_count() != 0) return false;
- process_codec(p_out);
- p_found_flag = true;
- return true;
- } else if (!stricmp_utf8_ex(p_name,p_name_length,"channels",infinite))
- {
- if (p_params->get_param_count() != 0) return false;
- unsigned val = (unsigned)m_info->info_get_int("channels");
- switch(val)
- {
- case 0: p_out->write(titleformat_inputtypes::meta,"N/A",infinite); break;
- case 1: p_out->write(titleformat_inputtypes::meta,"mono",infinite); p_found_flag = true; break;
- case 2: p_out->write(titleformat_inputtypes::meta,"stereo",infinite); p_found_flag = true; break;
- default: p_out->write_int(titleformat_inputtypes::meta,val); p_out->write(titleformat_inputtypes::meta,"ch",infinite); p_found_flag = true; break;
- }
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"tracknumber",infinite))
- {
- t_size pad = 2;
- t_size param_count = p_params->get_param_count();
- if (param_count > 1) return false;
- if (param_count == 1) pad = (t_size)p_params->get_param_uint(0);
- const char * val = m_info->meta_get_ex("tracknumber",infinite,0);
- if (val != 0)
- {
- p_found_flag = true;
- t_size val_len = strlen(val);
- if (val_len < pad)
- {
- t_size n = pad - val_len;
- do {
- p_out->write(titleformat_inputtypes::meta,"0",1);
- n--;
- } while(n > 0);
- }
- p_out->write(titleformat_inputtypes::meta,val,infinite);
- }
- return true;
- }
- else return false;
+bool titleformat_hook_impl_file_info::process_field(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,bool & p_found_flag) {
+ return m_api->process_field(*m_info,m_location,p_out,p_name,p_name_length,p_found_flag);
}
-
-bool titleformat_hook_impl_file_info::process_meta(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,const char * p_sep1,t_size p_sep1_length,const char * p_sep2,t_size p_sep2_length)
-{
- t_size index = m_info->meta_find_ex(p_name,p_name_length);
- return process_meta(p_out, index, p_sep1, p_sep1_length, p_sep2, p_sep2_length);
-}
-
-bool titleformat_hook_impl_file_info::process_meta(titleformat_text_out * p_out,t_size p_index,const char * p_sep1,t_size p_sep1_length,const char * p_sep2,t_size p_sep2_length)
-{
- if (p_index == infinite) return false;
-
- t_size n, m = m_info->meta_enum_value_count(p_index);
- for(n=0;n<m;n++)
- {
- if (n>0)
- {
- if (n+1 == m) p_out->write(titleformat_inputtypes::meta,p_sep2,p_sep2_length);
- else p_out->write(titleformat_inputtypes::meta,p_sep1,p_sep1_length);
- }
- p_out->write(titleformat_inputtypes::meta,m_info->meta_enum_value(p_index,n),infinite);
- }
- return true;
-}
-
-bool titleformat_hook_impl_file_info::process_extra(titleformat_text_out * p_out,const char * p_name,t_size p_name_length)
-{
- if (!stricmp_utf8_ex(p_name,p_name_length,"PATH_RAW",infinite))
- {
- p_out->write(titleformat_inputtypes::unknown,m_location.get_path(),infinite);
- return true;
- }
- else if (!stricmp_utf8_ex(p_name,p_name_length,"FOOBAR2000_VERSION",infinite))
- {
- p_out->write(titleformat_inputtypes::unknown,core_version_info::g_get_version_string(),infinite);
- return true;
- }
- else return false;
+bool titleformat_hook_impl_file_info::process_function(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,titleformat_hook_function_params * p_params,bool & p_found_flag) {
+ return m_api->process_function(*m_info,m_location,p_out,p_name,p_name_length,p_params,p_found_flag);
}
void titleformat_object::run_hook(const playable_location & p_location,const file_info * p_source,titleformat_hook * p_hook,pfc::string_base & p_out,titleformat_text_filter * p_filter)
@@ -651,8 +77,9 @@ void titleformat_object::run_hook(const playable_location & p_location,const fil {
run(
&titleformat_hook_impl_splitter(
- &titleformat_hook_impl_file_info(p_location,p_source),
- p_hook),
+ p_hook,
+ &titleformat_hook_impl_file_info(p_location,p_source)
+ ),
p_out,p_filter);
}
else
@@ -704,16 +131,9 @@ bool titleformat_hook_impl_splitter::process_function(titleformat_text_out * p_o void titleformat_text_out::write_int_padded(const GUID & p_inputtype,t_int64 val,t_int64 maxval)
{
- const t_size bufsize = 64;
- char temp[bufsize+1];
- t_size len = 0;
- while(maxval) {maxval/=10;len++;}
- if (len == 0) len = 1;
- t_size n;
- for(n=0;n<bufsize;n++) temp[n] = '0';
- temp[n] = 0;
- _i64toa(val,temp+bufsize/2,10);
- write(p_inputtype,temp + strlen(temp) - len,infinite);
+ unsigned width = 0;
+ while(maxval > 0) {maxval/=10;width++;}
+ write(p_inputtype,pfc::format_int(val,width));
}
void titleformat_text_out::write_int(const GUID & p_inputtype,t_int64 val)
@@ -737,7 +157,7 @@ void titleformat_compiler::compile_safe(service_ptr_t<titleformat_object> & p_ou {
if (!compile(p_out,p_spec)) {
if (!compile(p_out,"%filename%"))
- throw pfc::exception_bug_check();
+ throw pfc::exception_bug_check_v2();
}
}
@@ -746,3 +166,25 @@ namespace titleformat_inputtypes { const GUID meta = { 0xcd839c8e, 0x5c66, 0x4ae1, { 0x8d, 0xad, 0x71, 0x1f, 0x86, 0x0, 0xa, 0xe3 } };
const GUID unknown = { 0x673aa1cd, 0xa7a8, 0x40c8, { 0xbf, 0x9b, 0x34, 0x37, 0x99, 0x29, 0x16, 0x3b } };
};
+
+void titleformat_text_filter_impl_filename_chars::write(const GUID & p_inputType,pfc::string_receiver & p_out,const char * p_data,t_size p_dataLength) {
+ if (p_inputType == titleformat_inputtypes::meta) {
+ //slightly inefficient...
+ p_out.add_string( pfc::io::path::replaceIllegalNameChars(pfc::string(p_data,p_dataLength)).ptr());
+ } else p_out.add_string(p_data,p_dataLength);
+}
+
+void titleformat_compiler::compile_safe_ex(titleformat_object::ptr & p_out,const char * p_spec,const char * p_fallback) {
+ if (!compile(p_out,p_spec)) compile_force(p_out,p_fallback);
+}
+
+
+void titleformat_text_filter_nontext_chars::write(const GUID & p_inputtype,pfc::string_receiver & p_out,const char * p_data,t_size p_data_length) {
+ for(t_size walk = 0;;) {
+ t_size base = walk;
+ while(walk < p_data_length && !isReserved(p_data[walk]) && p_data[walk] != 0) walk++;
+ p_out.add_string(p_data+base,walk-base);
+ if (walk >= p_data_length || p_data[walk] == 0) break;
+ p_out.add_byte('_'); walk++;
+ }
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/titleformat.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/titleformat.h index eccf69a..570f41e 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/titleformat.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/titleformat.h @@ -1,13 +1,10 @@ -#ifndef _FOOBAR2000_TITLEFORMAT_H_
-#define _FOOBAR2000_TITLEFORMAT_H_
-
namespace titleformat_inputtypes {
extern const GUID meta, unknown;
};
class NOVTABLE titleformat_text_out {
public:
- virtual void write(const GUID & p_inputtype,const char * p_data,t_size p_data_length = infinite) = 0;
+ virtual void write(const GUID & p_inputtype,const char * p_data,t_size p_data_length = ~0) = 0;
void write_int(const GUID & p_inputtype,t_int64 val);
void write_int_padded(const GUID & p_inputtype,t_int64 val,t_int64 maxval);
protected:
@@ -58,14 +55,17 @@ class NOVTABLE titleformat_compiler : public service_base {
public:
//! Returns false in case of a compilation error.
- virtual bool compile(service_ptr_t<titleformat_object> & p_out,const char * p_spec) = 0;
+ virtual bool compile(titleformat_object::ptr & p_out,const char * p_spec) = 0;
//! Helper;
void run(titleformat_hook * p_source,pfc::string_base & p_out,const char * p_spec);
//! Should never fail, falls back to %filename% in case of failure.
- void compile_safe(service_ptr_t<titleformat_object> & p_out,const char * p_spec);
+ void compile_safe(titleformat_object::ptr & p_out,const char * p_spec);
+
+ //! Falls back to p_fallback in case of failure.
+ void compile_safe_ex(titleformat_object::ptr & p_out,const char * p_spec,const char * p_fallback = "<ERROR>");
- //! Throws bug check when script can't be compiled. For use with hardcoded scripts only.
- void compile_force(service_ptr_t<titleformat_object> & p_out,const char * p_spec) {if (!compile(p_out,p_spec)) throw pfc::exception_bug_check();}
+ //! Throws a bug check exception when script can't be compiled. For use with hardcoded scripts only.
+ void compile_force(titleformat_object::ptr & p_out,const char * p_spec) {if (!compile(p_out,p_spec)) throw pfc::exception_bug_check_v2();}
static void remove_color_marks(const char * src,pfc::string_base & out);//helper
@@ -112,6 +112,15 @@ private: pfc::string_receiver & m_string;
};
+class titleformat_common_methods : public service_base {
+public:
+ virtual bool process_field(const file_info & p_info,const playable_location & p_location,titleformat_text_out * p_out,const char * p_name,t_size p_name_length,bool & p_found_flag) = 0;
+ virtual bool process_function(const file_info & p_info,const playable_location & p_location,titleformat_text_out * p_out,const char * p_name,t_size p_name_length,titleformat_hook_function_params * p_params,bool & p_found_flag) = 0;
+ virtual bool remap_meta(const file_info & p_info,t_size & p_index, const char * p_name, t_size p_name_length) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(titleformat_common_methods);
+};
+
class titleformat_hook_impl_file_info : public titleformat_hook
{
public:
@@ -119,14 +128,11 @@ public: bool process_field(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,bool & p_found_flag);
bool process_function(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,titleformat_hook_function_params * p_params,bool & p_found_flag);
protected:
- bool process_meta(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,const char * p_sep1,t_size p_sep1_length,const char * p_sep2,t_size p_sep2_length);
- bool process_meta(titleformat_text_out * p_out,t_size p_index,const char * p_sep1,t_size p_sep1_length,const char * p_sep2,t_size p_sep2_length);
- bool process_extra(titleformat_text_out * p_out,const char * p_name,t_size p_name_length);
- bool remap_meta(t_size & p_index, const char * p_name, t_size p_name_length);
+ bool remap_meta(t_size & p_index, const char * p_name, t_size p_name_length) {return m_api->remap_meta(*m_info,p_index,p_name,p_name_length);}
const file_info * m_info;
private:
- void process_codec(titleformat_text_out * p_out);
const playable_location & m_location;
+ static_api_ptr_t<titleformat_common_methods> m_api;
};
class titleformat_hook_impl_splitter : public titleformat_hook {
@@ -146,4 +152,76 @@ private: const char * m_reserved_chars;
};
-#endif //_FOOBAR2000_TITLEFORMAT_H_
\ No newline at end of file +class titleformat_text_filter_impl_filename_chars : public titleformat_text_filter {
+public:
+ void write(const GUID & p_inputType,pfc::string_receiver & p_out,const char * p_data,t_size p_dataLength);
+};
+
+class titleformat_text_filter_nontext_chars : public titleformat_text_filter {
+public:
+ inline static bool isReserved(char c) { return c >= 0 && c < 0x20; }
+ void write(const GUID & p_inputtype,pfc::string_receiver & p_out,const char * p_data,t_size p_data_length);
+};
+
+
+
+
+
+
+
+class titleformat_hook_impl_list : public titleformat_hook {
+public:
+ titleformat_hook_impl_list(t_size p_index /* zero-based! */,t_size p_total) : m_index(p_index), m_total(p_total) {}
+
+ bool process_field(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,bool & p_found_flag) {
+ if (
+ stricmp_utf8_ex(p_name,p_name_length,"list_index",~0) == 0
+ ) {
+ p_out->write_int_padded(titleformat_inputtypes::unknown,m_index+1, m_total);
+ p_found_flag = true; return true;
+ } else if (
+ stricmp_utf8_ex(p_name,p_name_length,"list_total",~0) == 0
+ ) {
+ p_out->write_int(titleformat_inputtypes::unknown,m_total);
+ p_found_flag = true; return true;
+ } else {
+ p_found_flag = false; return false;
+ }
+ }
+
+ bool process_function(titleformat_text_out * p_out,const char * p_name,t_size p_name_length,titleformat_hook_function_params * p_params,bool & p_found_flag) {return false;}
+
+private:
+ t_size m_index, m_total;
+};
+
+class string_formatter_tf : public pfc::string_base {
+public:
+ string_formatter_tf(titleformat_text_out * out, const GUID & inputType = titleformat_inputtypes::meta) : m_out(out), m_inputType(inputType) {}
+
+ const char * get_ptr() const {
+ throw pfc::exception_not_implemented();
+ }
+ void add_string(const char * p_string,t_size p_length) {
+ m_out->write(m_inputType,p_string,p_length);
+ }
+ void set_string(const char * p_string,t_size p_length) {
+ throw pfc::exception_not_implemented();
+ }
+ void truncate(t_size len) {
+ throw pfc::exception_not_implemented();
+ }
+ t_size get_length() const {
+ throw pfc::exception_not_implemented();
+ }
+ char * lock_buffer(t_size p_requested_length) {
+ throw pfc::exception_not_implemented();
+ }
+ void unlock_buffer() {
+ throw pfc::exception_not_implemented();
+ }
+
+private:
+ titleformat_text_out * const m_out;
+ const GUID m_inputType;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/track_property.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/track_property.h index 8b11d61..3f8aa60 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/track_property.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/track_property.h @@ -8,16 +8,24 @@ public: //! @param p_value Value of the property.
virtual void set_property(const char * p_group,double p_sortpriority,const char * p_name,const char * p_value) = 0;
protected:
+ track_property_callback const & operator=(track_property_callback const &) {return *this;}
~track_property_callback() {}
};
-//! Service for adding custom entries in "General Properties" section of the properties dialog.
+class NOVTABLE track_property_callback_v2 : public track_property_callback {
+public:
+ virtual bool is_group_wanted(const char * p_group) = 0;
+protected:
+ ~track_property_callback_v2() {}
+};
+
+//! Service for adding custom entries in "Properties" tab of the properties dialog.
class NOVTABLE track_property_provider : public service_base {
public:
//! Enumerates properties of specified track list.
//! @param p_tracks List of tracks to enumerate properties on.
//! @param p_out Callback interface receiving enumerated properties.
- virtual void enumerate_properties(pfc::list_base_const_t<metadb_handle_ptr> const & p_tracks, track_property_callback & p_out) = 0;
+ virtual void enumerate_properties(metadb_handle_list_cref p_tracks, track_property_callback & p_out) = 0;
//! Returns whether specified tech info filed is processed by our service and should not be displayed among unknown fields.
//! @param p_name Name of tech info field being queried.
//! @returns True if the field is among fields processed by this track_property_provider implementation and should not be displayed among unknown fields, false otherwise.
@@ -26,5 +34,12 @@ public: FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(track_property_provider);
};
+class NOVTABLE track_property_provider_v2 : public track_property_provider {
+public:
+ virtual void enumerate_properties_v2(metadb_handle_list_cref p_tracks, track_property_callback_v2 & p_out) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(track_property_provider_v2,track_property_provider)
+};
+
template<typename T>
class track_property_provider_factory_t : public service_factory_single_t<T> {};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui.h index d960190..7618db7 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui.h @@ -1,8 +1,3 @@ -#ifndef _FOOBAR2000_UI_H_
-#define _FOOBAR2000_UI_H_
-
-#include "service.h"
-
#ifndef _WINDOWS
#error PORTME
#endif
@@ -107,4 +102,127 @@ public: template<class T>
class ui_drop_item_callback_factory_t : public service_factory_single_t<T> {};
-#endif
\ No newline at end of file +
+class ui_selection_callback;
+
+//! Write interface and reference counter for the shared selection.
+//! The ui_selection_manager stores the selected items as a list.
+//! The ui_selection_holder service allows components to modify this list.
+//! It also serves as a reference count: the ui_selection_manager clears the stored
+//! selection when no component holds a reference to a ui_selection_holder.
+//!
+//! When a window that uses the shared selection gets the focus, it should acquire
+//! a ui_selection_holder from the ui_selection_manager. If it contains selectable items,
+//! it should use the appropriate method to store its selected items as the shared selection.
+//! If it just wants to preserve the selection - for example so it can display it - it should
+//! merely store the acquired ui_selection_holder.
+//!
+//! When the window loses the focus, it should release its ui_selection_holder.
+//! It should not use a set method to clear the selection
+class NOVTABLE ui_selection_holder : public service_base {
+public:
+ //! Sets selected items.
+ virtual void set_selection(metadb_handle_list_cref data) = 0;
+ //! Sets selected items to playlist selection and enables tracking.
+ //! When the playlist selection changes, the stored selection is automatically updated.
+ //! Tracking ends when a set method is called on any ui_selection_holder or when
+ //! the last reference to this ui_selection_holder is released.
+ virtual void set_playlist_selection_tracking() = 0;
+ //! Sets selected items to the contents of the active playlist and enables tracking.
+ //! When the active playlist or its contents changes, the stored selection is automatically updated.
+ //! Tracking ends when a set method is called on any ui_selection_holder or when
+ //! the last reference to this ui_selection_holder is released.
+ virtual void set_playlist_tracking() = 0;
+
+ //! Sets selected items and type of selection holder.
+ //! @param type Specifies type of selection. Values same as contextmenu_item caller IDs.
+ virtual void set_selection_ex(metadb_handle_list_cref data, const GUID & type) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(ui_selection_holder,service_base);
+};
+
+class NOVTABLE ui_selection_manager : public service_base {
+public:
+ //! Retrieves the current selection.
+ virtual void get_selection(metadb_handle_list_ref p_selection) = 0;
+ //! Registers a callback. It is recommended to use ui_selection_callback_impl_base class instead of calling this directly.
+ virtual void register_callback(ui_selection_callback * p_callback) = 0;
+ //! Unregisters a callback. It is recommended to use ui_selection_callback_impl_base class instead of calling this directly.
+ virtual void unregister_callback(ui_selection_callback * p_callback) = 0;
+
+ virtual ui_selection_holder::ptr acquire() = 0;
+
+ //! Retrieves type of the active selection holder. Values same as contextmenu_item caller IDs.
+ virtual GUID get_selection_type() = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(ui_selection_manager);
+};
+
+//! \since 1.0
+class NOVTABLE ui_selection_manager_v2 : public ui_selection_manager {
+ FB2K_MAKE_SERVICE_INTERFACE(ui_selection_manager_v2, ui_selection_manager)
+public:
+ enum { flag_no_now_playing = 1 };
+ virtual void get_selection(metadb_handle_list_ref out, t_uint32 flags) = 0;
+ virtual GUID get_selection_type(t_uint32 flags) = 0;
+ virtual void register_callback(ui_selection_callback * callback, t_uint32 flags) = 0;
+};
+
+class ui_selection_callback {
+public:
+ virtual void on_selection_changed(metadb_handle_list_cref p_selection) = 0;
+protected:
+ ui_selection_callback() {}
+ ~ui_selection_callback() {}
+};
+
+//! ui_selection_callback implementation helper with autoregistration - do not instantiate statically
+class ui_selection_callback_impl_base : public ui_selection_callback {
+protected:
+ ui_selection_callback_impl_base(bool activate = true) : m_active() {ui_selection_callback_activate(activate);}
+ ~ui_selection_callback_impl_base() {ui_selection_callback_activate(false);}
+
+ void ui_selection_callback_activate(bool state = true) {
+ if (state != m_active) {
+ m_active = state;
+ static_api_ptr_t<ui_selection_manager> api;
+ if (state) api->register_callback(this);
+ else api->unregister_callback(this);
+ }
+ }
+
+ //avoid pure virtual function calls in rare cases - provide a dummy implementation
+ void on_selection_changed(metadb_handle_list_cref p_selection) {}
+
+ PFC_CLASS_NOT_COPYABLE_EX(ui_selection_callback_impl_base);
+private:
+ bool m_active;
+};
+
+//! \since 1.0
+//! ui_selection_callback implementation helper with autoregistration - do not instantiate statically
+template<unsigned flags>
+class ui_selection_callback_impl_base_ex : public ui_selection_callback {
+protected:
+ enum {
+ ui_selection_flags = flags
+ };
+ ui_selection_callback_impl_base_ex(bool activate = true) : m_active() {ui_selection_callback_activate(activate);}
+ ~ui_selection_callback_impl_base_ex() {ui_selection_callback_activate(false);}
+
+ void ui_selection_callback_activate(bool state = true) {
+ if (state != m_active) {
+ m_active = state;
+ static_api_ptr_t<ui_selection_manager_v2> api;
+ if (state) api->register_callback(this, flags);
+ else api->unregister_callback(this);
+ }
+ }
+
+ //avoid pure virtual function calls in rare cases - provide a dummy implementation
+ void on_selection_changed(metadb_handle_list_cref p_selection) {}
+
+ PFC_CLASS_NOT_COPYABLE(ui_selection_callback_impl_base_ex, ui_selection_callback_impl_base_ex<flags>);
+private:
+ bool m_active;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_edit_context.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_edit_context.h new file mode 100644 index 0000000..41747fc --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_edit_context.h @@ -0,0 +1,132 @@ +
+class NOVTABLE ui_edit_context : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(ui_edit_context, service_base)
+public:
+ //! Called by core only.
+ virtual void initialize() = 0;
+ //! Called by core only. \n
+ //! WARNING: you may get other methods called after shutdown() in case someone using ui_edit_context_manager has kept a reference to your service - for an example during an async operation. You should behave sanely in such case - either execute the operation if still possible or fail cleanly.
+ virtual void shutdown() = 0;
+
+ enum {
+ flag_removable = 1,
+ flag_reorderable = 2,
+ flag_undoable = 4,
+ flag_redoable = 8,
+ flag_linearlist = 16,
+ flag_searchable = 32,
+ flag_insertable = 64,
+ };
+
+ virtual t_uint32 get_flags() = 0;
+
+ bool can_remove() {return (get_flags() & flag_removable) != 0;}
+ bool test_flags(t_uint32 flags) {return (get_flags() & flags) == flags;}
+ bool can_remove_mask() {return test_flags(flag_removable | flag_linearlist);}
+ bool can_reorder() {return test_flags(flag_reorderable);}
+ bool can_search() {return test_flags(flag_searchable);}
+
+ virtual void select_all() {update_selection(bit_array_true(), bit_array_true());}
+ virtual void select_none() {update_selection(bit_array_true(), bit_array_false());}
+ virtual void get_selected_items(metadb_handle_list_ref out) {bit_array_bittable mask(get_item_count()); get_selection_mask(mask); get_items(out, mask);}
+ virtual void remove_selection() {bit_array_bittable mask(get_item_count()); get_selection_mask(mask); remove_items(mask);}
+ virtual void crop_selection() {bit_array_bittable mask(get_item_count()); get_selection_mask(mask); remove_items(bit_array_not(mask));}
+ virtual void clear() {remove_items(bit_array_true());}
+ virtual void get_all_items(metadb_handle_list_ref out) {get_items(out, bit_array_true());}
+ virtual GUID get_selection_type() = 0;
+
+ // available if flag_linearlist is set
+ virtual void get_selection_mask(pfc::bit_array_var & out) {
+ const t_size count = get_item_count(); for(t_size walk = 0; walk < count; ++walk) out.set(walk, is_item_selected(walk));
+ }
+ virtual void update_selection(const pfc::bit_array & mask, const pfc::bit_array & newVals) = 0;
+ virtual t_size get_item_count(t_size max = ~0) = 0;
+ virtual metadb_handle_ptr get_item(t_size index) = 0;
+ virtual void get_items(metadb_handle_list_ref out, pfc::bit_array const & mask) = 0;
+ virtual bool is_item_selected(t_size item) = 0;
+ virtual void remove_items(pfc::bit_array const & mask) = 0;
+ virtual void reorder_items(const t_size * order, t_size count) = 0;
+ virtual t_size get_selection_count(t_size max = ~0) {
+ t_size count = 0;
+ const t_size total = get_item_count();
+ for(t_size walk = 0; walk < total && count < max; ++walk) if (is_item_selected(walk)) ++count;
+ return count;
+ }
+
+ virtual void search() = 0;
+
+ virtual void undo_backup() = 0;
+ virtual void undo_restore() = 0;
+ virtual void redo_restore() = 0;
+
+ virtual void insert_items(t_size at, metadb_handle_list_cref items, pfc::bit_array const & selection) = 0;
+
+ virtual t_size query_insert_mark() = 0;
+
+ void sort_by_format(const char * spec, bool onlySelection) {
+ const t_size count = get_item_count();
+ pfc::array_t<t_size> order; order.set_size(count);
+ pfc::array_t<t_size> sel_map;
+ if (onlySelection) {
+ sel_map.set_size(count);
+ t_size sel_count = 0;
+ for(t_size n=0;n<count;n++) if (is_item_selected(n)) sel_map[sel_count++]=n;
+ sel_map.set_size(sel_count);
+ }
+
+ {
+ metadb_handle_list temp;
+ pfc::array_t<t_size> order_temp;
+ if (onlySelection) {
+ get_selected_items(temp);
+ order_temp.set_size(count);
+ } else {
+ get_all_items(temp);
+ }
+
+
+ if (spec != NULL) {
+ temp.sort_by_format_get_order(onlySelection ? order_temp.get_ptr() : order.get_ptr(),spec,0);
+ } else {
+ static_api_ptr_t<genrand_service> api; api->seed((unsigned)__rdtsc());
+ api->generate_random_order(onlySelection ? order_temp.get_ptr() : order.get_ptr(),temp.get_count());
+ }
+
+ if (onlySelection) {
+ t_size n,ptr;
+ for(n=0,ptr=0;n<count;n++) {
+ if (!is_item_selected(n)) {
+ order[n] = n;
+ } else {
+ t_size v = order_temp[ptr++];
+ order[n] = sel_map[v];
+ }
+ }
+ }
+ }
+
+ reorder_items(order.get_ptr(), count);
+ }
+
+};
+
+class ui_edit_context_playlist : public ui_edit_context {
+ FB2K_MAKE_SERVICE_INTERFACE(ui_edit_context_playlist, ui_edit_context)
+public:
+ virtual t_size get_playlist_number() = 0;
+};
+
+class NOVTABLE ui_edit_context_manager : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(ui_edit_context_manager)
+public:
+ virtual t_uint32 set_context(ui_edit_context::ptr context) = 0;
+ virtual void unset_context(t_uint32 id) = 0;
+ virtual ui_edit_context::ptr get_context() = 0;
+ virtual ui_edit_context::ptr create_playlist_context(t_size playlist_number) = 0;
+ virtual void disable_autofallback() = 0;
+ virtual t_uint32 set_context_active_playlist() = 0;
+};
+
+FOOGUIDDECL const GUID ui_edit_context::class_guid = { 0xf9ba651b, 0x52dd, 0x466f, { 0xaa, 0x77, 0xa9, 0x7a, 0x74, 0x98, 0x80, 0x7e } };
+FOOGUIDDECL const GUID ui_edit_context_manager::class_guid = { 0x3807f161, 0xaa17, 0x47df, { 0x80, 0xf1, 0xe, 0xfc, 0xd2, 0x19, 0xb7, 0xa1 } };
+FOOGUIDDECL const GUID ui_edit_context_playlist::class_guid = { 0x6dec364d, 0x29f2, 0x47c8, { 0xaf, 0x93, 0xbd, 0x35, 0x56, 0x3f, 0xa2, 0x25 } };
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_element.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_element.cpp new file mode 100644 index 0000000..6ef8afb --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_element.cpp @@ -0,0 +1,124 @@ +#include "foobar2000.h"
+
+
+namespace {
+ class ui_element_config_impl : public ui_element_config {
+ public:
+ ui_element_config_impl(const GUID & guid) : m_guid(guid) {}
+ ui_element_config_impl(const GUID & guid, const void * buffer, t_size size) : m_guid(guid) {
+ m_content.set_data_fromptr(reinterpret_cast<const t_uint8*>(buffer),size);
+ }
+
+ void * get_data_var() {return m_content.get_ptr();}
+ void set_data_size(t_size size) {m_content.set_size(size);}
+
+ GUID get_guid() const {return m_guid;}
+ const void * get_data() const {return m_content.get_ptr();}
+ t_size get_data_size() const {return m_content.get_size();}
+ private:
+ const GUID m_guid;
+ pfc::array_t<t_uint8> m_content;
+ };
+
+}
+
+service_ptr_t<ui_element_config> ui_element_config::g_create(const GUID& id, const void * data, t_size size) {
+ return new service_impl_t<ui_element_config_impl>(id,data,size);
+}
+
+service_ptr_t<ui_element_config> ui_element_config::g_create(const GUID & id, stream_reader * in, t_size bytes, abort_callback & abort) {
+ service_ptr_t<ui_element_config_impl> data = new service_impl_t<ui_element_config_impl>(id);
+ data->set_data_size(bytes);
+ in->read_object(data->get_data_var(),bytes,abort);
+ return data;
+}
+
+service_ptr_t<ui_element_config> ui_element_config::g_create(stream_reader * in, t_size bytes, abort_callback & abort) {
+ if (bytes < sizeof(GUID)) throw exception_io_data_truncation();
+ GUID id; stream_reader_formatter<>(*in,abort) >> id;
+ return g_create(id,in,bytes - sizeof(GUID),abort);
+}
+
+ui_element_config::ptr ui_element_config_parser::subelement(t_size size) {
+ return ui_element_config::g_create(&m_stream, size, m_abort);
+}
+ui_element_config::ptr ui_element_config_parser::subelement(const GUID & id, t_size dataSize) {
+ return ui_element_config::g_create(id, &m_stream, dataSize, m_abort);
+}
+
+service_ptr_t<ui_element_config> ui_element_config::g_create(const void * data, t_size size) {
+ stream_reader_memblock_ref stream(data,size);
+ return g_create(&stream,size,abort_callback_dummy());
+}
+
+bool ui_element_subclass_description(const GUID & id, pfc::string_base & p_out) {
+ if (id == ui_element_subclass_playlist_renderers) {
+ p_out = "Playlist Renderers"; return true;
+ } else if (id == ui_element_subclass_media_library_viewers) {
+ p_out = "Media Library Viewers"; return true;
+ } else if (id == ui_element_subclass_selection_information) {
+ p_out = "Selection Information"; return true;
+ } else if (id == ui_element_subclass_playback_visualisation) {
+ p_out = "Playback Visualization"; return true;
+ } else if (id == ui_element_subclass_playback_information) {
+ p_out = "Playback Information"; return true;
+ } else if (id == ui_element_subclass_utility) {
+ p_out = "Utility"; return true;
+ } else if (id == ui_element_subclass_containers) {
+ p_out = "Containers"; return true;
+ } else {
+ return false;
+ }
+}
+
+bool ui_element::get_element_group(pfc::string_base & p_out) {
+ return ui_element_subclass_description(get_subclass(),p_out);
+}
+
+t_ui_color ui_element_instance_callback::query_std_color(const GUID & p_what) {
+#ifdef _WIN32
+ t_ui_color ret;
+ if (query_color(p_what,ret)) return ret;
+ int idx = ui_color_to_sys_color_index(p_what);
+ if (idx < 0) return 0;//should not be triggerable
+ return GetSysColor(idx);
+#else
+#error portme
+#endif
+}
+
+bool ui_element::g_find(service_ptr_t<ui_element> & out, const GUID & id) {
+ return service_by_guid(out, id);
+}
+
+bool ui_element::g_get_name(pfc::string_base & p_out,const GUID & p_guid) {
+ ui_element::ptr ptr; if (!g_find(ptr,p_guid)) return false;
+ ptr->get_name(p_out); return true;
+}
+
+bool ui_element_instance_callback::is_elem_visible_(service_ptr_t<class ui_element_instance> elem) {
+ ui_element_instance_callback_v2::ptr v2;
+ if (!this->service_query_t(v2)) {
+ PFC_ASSERT(!"Should not get here - somebody implemented ui_element_instance_callback but not ui_element_instance_callback_v2.");
+ return true;
+ }
+ return v2->is_elem_visible(elem);
+}
+
+bool ui_element_instance_callback::set_elem_label(ui_element_instance * source, const char * label) {
+ return notify_(source, ui_element_host_notify_set_elem_label, 0, label, strlen(label)) != 0;
+}
+
+t_uint32 ui_element_instance_callback::get_dialog_texture(ui_element_instance * source) {
+ return (t_uint32) notify_(source, ui_element_host_notify_get_dialog_texture, 0, NULL, 0);
+}
+
+bool ui_element_instance_callback::is_border_needed(ui_element_instance * source) {
+ return notify_(source, ui_element_host_notify_is_border_needed, 0, NULL, 0) != 0;
+}
+
+t_size ui_element_instance_callback::notify_(ui_element_instance * source, const GUID & what, t_size param1, const void * param2, t_size param2size) {
+ ui_element_instance_callback_v3::ptr v3;
+ if (!this->service_query_t(v3)) { PFC_ASSERT(!"Outdated UI Element host implementation"); return 0; }
+ return v3->notify(source, what, param1, param2, param2size);
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_element.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_element.h new file mode 100644 index 0000000..6d749d1 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/ui_element.h @@ -0,0 +1,634 @@ +//! Configuration of a UI element.
+class NOVTABLE ui_element_config : public service_base {
+public:
+ //! Returns GUID of the UI element this configuration data belongs to.
+ virtual GUID get_guid() const = 0;
+ //! Returns raw configuration data pointer.
+ virtual const void * get_data() const = 0;
+ //! Returns raw configuration data size, in bytes.
+ virtual t_size get_data_size() const = 0;
+
+
+ //! Helper.
+ static service_ptr_t<ui_element_config> g_create(const GUID& id, const void * data, t_size size);
+
+ template<typename t_source> static service_ptr_t<ui_element_config> g_create(const GUID& id, t_source const & data) {
+ pfc::assert_byte_type<typename t_source::t_item>();
+ return g_create(id, data.get_ptr(), data.get_size());
+ }
+
+ static service_ptr_t<ui_element_config> g_create_empty(const GUID & id = pfc::guid_null) {return g_create(id,NULL,0);}
+
+ static service_ptr_t<ui_element_config> g_create(const GUID & id, stream_reader * in, t_size bytes, abort_callback & abort);
+ static service_ptr_t<ui_element_config> g_create(stream_reader * in, t_size bytes, abort_callback & abort);
+ static service_ptr_t<ui_element_config> g_create(const void * data, t_size size);
+ service_ptr_t<ui_element_config> clone() const {
+ return g_create(get_guid(), get_data(), get_data_size());
+ }
+
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_config,service_base);
+};
+
+//! Helper.
+class ui_element_config_parser : public stream_reader_formatter<> {
+public:
+ ui_element_config_parser(ui_element_config::ptr in) : m_data(in), _m_stream(in->get_data(),in->get_data_size()), stream_reader_formatter(_m_stream,_m_abort) {}
+
+ void reset() {_m_stream.reset();}
+ t_size get_remaining() const {return _m_stream.get_remaining();}
+
+ ui_element_config::ptr subelement(t_size size);
+ ui_element_config::ptr subelement(const GUID & id, t_size dataSize);
+private:
+ const ui_element_config::ptr m_data;
+ abort_callback_dummy _m_abort;
+ stream_reader_memblock_ref _m_stream;
+};
+
+//! Helper.
+class ui_element_config_builder : public stream_writer_formatter<> {
+public:
+ ui_element_config_builder() : stream_writer_formatter(_m_stream,_m_abort) {}
+ ui_element_config::ptr finish(const GUID & id) {
+ return ui_element_config::g_create(id,_m_stream.m_buffer);
+ }
+ void reset() {
+ _m_stream.m_buffer.set_size(0);
+ }
+private:
+ abort_callback_dummy _m_abort;
+ stream_writer_buffer_simple _m_stream;
+};
+
+
+FB2K_STREAM_WRITER_OVERLOAD(ui_element_config::ptr) {
+ stream << value->get_guid();
+ t_size size = value->get_data_size();
+ stream << pfc::downcast_guarded<t_uint32>(size);
+ stream.write_raw(value->get_data(),size);
+ return stream;
+}
+FB2K_STREAM_READER_OVERLOAD(ui_element_config::ptr) {
+ GUID guid;
+ t_uint32 size;
+ stream >> guid >> size;
+ value = ui_element_config::g_create(guid,&stream.m_stream,size,stream.m_abort);
+ return stream;
+}
+
+
+
+
+typedef COLORREF t_ui_color;
+typedef HFONT t_ui_font;
+typedef HICON t_ui_icon;
+
+static const GUID ui_color_text = { 0x5dd38be7, 0xff8a, 0x416f, { 0x88, 0x2d, 0xa4, 0x8e, 0x31, 0x87, 0x85, 0xb2 } };
+static const GUID ui_color_background = { 0x16fc40c1, 0x1cba, 0x4385, { 0x93, 0x3b, 0xe9, 0x32, 0x7f, 0x6e, 0x35, 0x1f } };
+static const GUID ui_color_highlight = { 0xd2f98042, 0x3e6a, 0x423a, { 0xb8, 0x66, 0x65, 0x1, 0xfe, 0xa9, 0x75, 0x93 } };
+static const GUID ui_color_selection = { 0xebe1a36b, 0x7e0a, 0x469a, { 0x8e, 0xc5, 0xcf, 0x3, 0x12, 0x90, 0x40, 0xb5 } };
+
+static const GUID ui_font_default = { 0x9ef02cef, 0xe58a, 0x4f99, { 0x9f, 0xe3, 0x85, 0x39, 0xb, 0xed, 0xc5, 0xe0 } };
+static const GUID ui_font_tabs = { 0x65ffd7ac, 0x71ce, 0x495c, { 0xa5, 0x99, 0x48, 0x5b, 0xbf, 0x7a, 0x4, 0x7b } };
+static const GUID ui_font_lists = { 0xa86198b3, 0xb5d8, 0x40cf, { 0xac, 0x19, 0xf9, 0xda, 0xc, 0xb5, 0xd4, 0x24 } };
+static const GUID ui_font_playlists = { 0xd85b7b7e, 0xbf83, 0x41ed, { 0x88, 0xce, 0x1, 0x99, 0x31, 0x94, 0x3e, 0x2f } };
+static const GUID ui_font_statusbar = { 0xc7fd555b, 0xbd15, 0x4f74, { 0x93, 0xe, 0xba, 0x55, 0x52, 0x9d, 0xd9, 0x71 } };
+static const GUID ui_font_console = { 0xb08c619d, 0xd3d1, 0x4089, { 0x93, 0xb2, 0xd5, 0xb, 0x87, 0x2d, 0x1a, 0x25 } };
+
+
+
+
+//! @returns -1 when the GUID is unknown / unmappable, index that can be passed over to GetSysColor() otherwise.
+static int ui_color_to_sys_color_index(const GUID & p_guid) {
+ if (p_guid == ui_color_text) {
+ return COLOR_WINDOWTEXT;
+ } else if (p_guid == ui_color_background) {
+ return COLOR_WINDOW;
+ } else if (p_guid == ui_color_highlight) {
+ return COLOR_HOTLIGHT;
+ } else if (p_guid == ui_color_selection) {
+ return COLOR_HIGHLIGHT;
+ } else {
+ return -1;
+ }
+}
+
+
+struct ui_element_min_max_info {
+ ui_element_min_max_info() : m_min_width(0), m_max_width(~0), m_min_height(0), m_max_height(~0) {}
+ t_uint32 m_min_width, m_max_width, m_min_height, m_max_height;
+
+ const ui_element_min_max_info & operator|=(const ui_element_min_max_info & p_other) {
+ m_min_width = pfc::max_t(m_min_width,p_other.m_min_width);
+ m_min_height = pfc::max_t(m_min_height,p_other.m_min_height);
+ m_max_width = pfc::min_t(m_max_width,p_other.m_max_width);
+ m_max_height = pfc::min_t(m_max_height,p_other.m_max_height);
+ return *this;
+ }
+ ui_element_min_max_info operator|(const ui_element_min_max_info & p_other) const {
+ ui_element_min_max_info ret(*this);
+ ret |= p_other;
+ return ret;
+ }
+
+};
+
+//! Callback class passed by a UI element host to a UI element instance, allowing each UI element instance to communicate with its host. \n
+//! Each ui_element_instance_callback implementation must also implement ui_element_instance_callback_v2.
+class NOVTABLE ui_element_instance_callback : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_instance_callback,service_base);
+public:
+ virtual void on_min_max_info_change() = 0;
+ //! Deprecated, does nothing.
+ virtual void on_alt_pressed(bool p_state) = 0;
+ //! Returns true on success, false when the color is undefined and defaults such as global windows settings should be used.
+ virtual bool query_color(const GUID & p_what,t_ui_color & p_out) = 0;
+ //! Tells the host that specified element wants to activate itself as a result of some kind of external user command (eg. menu command). Host should ensure that requesting child element's window is visible.\n
+ //! @returns True when relevant child element window has been properly made visible and requesting code should proceed to SetFocus their window etc, false when denied.
+ virtual bool request_activation(service_ptr_t<class ui_element_instance> p_item) = 0;
+
+ //! Queries whether "edit mode" is enabled. Most of UI element editing functionality should be locked when it's not.
+ virtual bool is_edit_mode_enabled() = 0;
+
+ //! Tells the host that the user has requested the element to be replaced with another one.
+ //! Note: this is generally used only when "edit mode" is enabled, but legal to call when it's not (eg. dummy element calls it regardless of settings when clicked).
+ virtual void request_replace(service_ptr_t<class ui_element_instance> p_item) = 0;
+
+ //! Deprecated - use query_font_ex. Equivalent to query_font_ex(ui_font_default).
+ t_ui_font query_font() {return query_font_ex(ui_font_default);}
+
+ //! Retrieves an user-configurable font to use for specified kind of display. See ui_font_* constant for possible parameters.
+ virtual t_ui_font query_font_ex(const GUID & p_what) = 0;
+
+ //! Helper - a wrapper around query_color(), if the color is not user-overridden, returns relevant system color.
+ t_ui_color query_std_color(const GUID & p_what);
+
+ bool is_elem_visible_(service_ptr_t<class ui_element_instance> elem);
+
+ t_size notify_(ui_element_instance * source, const GUID & what, t_size param1, const void * param2, t_size param2size);
+ bool set_elem_label(ui_element_instance * source, const char * label);
+ t_uint32 get_dialog_texture(ui_element_instance * source);
+ bool is_border_needed(ui_element_instance * source);
+};
+
+
+class NOVTABLE ui_element_instance_callback_v2 : public ui_element_instance_callback {
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_instance_callback_v2, ui_element_instance_callback);
+public:
+ virtual bool is_elem_visible(service_ptr_t<class ui_element_instance> elem) = 0;
+};
+
+class NOVTABLE ui_element_instance_callback_v3 : public ui_element_instance_callback_v2 {
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_instance_callback_v3, ui_element_instance_callback_v2)
+public:
+ //! Returns zero when the notification was not handled, return value depends on the notification otherwise.
+ virtual t_size notify(ui_element_instance * source, const GUID & what, t_size param1, const void * param2, t_size param2size) = 0;
+};
+
+typedef service_ptr_t<ui_element_instance_callback> ui_element_instance_callback_ptr;
+
+//! ui_element_instance_callback implementation helper.
+template<typename t_receiver> class ui_element_instance_callback_impl : public ui_element_instance_callback_v3 {
+public:
+ ui_element_instance_callback_impl(t_receiver * p_receiver) : m_receiver(p_receiver) {}
+ void on_min_max_info_change() {
+ if (m_receiver != NULL) m_receiver->on_min_max_info_change();
+ }
+ void on_alt_pressed(bool p_state) {}
+
+ bool query_color(const GUID & p_what,t_ui_color & p_out) {
+ if (m_receiver != NULL) return m_receiver->query_color(p_what,p_out);
+ else return false;
+ }
+
+ bool request_activation(service_ptr_t<class ui_element_instance> p_item) {
+ if (m_receiver) return m_receiver->request_activation(p_item);
+ else return false;
+ }
+
+ bool is_edit_mode_enabled() {
+ if (m_receiver) return m_receiver->is_edit_mode_enabled();
+ else return false;
+ }
+ void request_replace(service_ptr_t<class ui_element_instance> p_item) {
+ if (m_receiver) m_receiver->request_replace(p_item);
+ }
+
+ t_ui_font query_font_ex(const GUID & p_what) {
+ if (m_receiver) return m_receiver->query_font_ex(p_what);
+ else return NULL;
+ }
+
+ void orphan() {m_receiver = NULL;}
+
+ bool is_elem_visible(service_ptr_t<class ui_element_instance> elem) {
+ if (m_receiver) return m_receiver->is_elem_visible(elem);
+ else return false;
+ }
+ t_size notify(ui_element_instance * source, const GUID & what, t_size param1, const void * param2, t_size param2size) {
+ if (m_receiver) return m_receiver->host_notify(source, what, param1, param2, param2size);
+ else return 0;
+ }
+private:
+ t_receiver * m_receiver;
+};
+
+//! ui_element_instance_callback implementation helper.
+class ui_element_instance_callback_receiver {
+public:
+ virtual void on_min_max_info_change() {}
+ virtual bool query_color(const GUID & p_what,t_ui_color & p_out) {return false;}
+ virtual bool request_activation(service_ptr_t<class ui_element_instance> p_item) {return false;}
+ virtual bool is_edit_mode_enabled() {return false;}
+ virtual void request_replace(service_ptr_t<class ui_element_instance> p_item) {}
+ virtual t_ui_font query_font_ex(const GUID&) {return NULL;}
+ virtual bool is_elem_visible(service_ptr_t<ui_element_instance> elem) {return true;}
+ virtual t_size host_notify(ui_element_instance * source, const GUID & what, t_size param1, const void * param2, t_size param2size) {return 0;}
+ ui_element_instance_callback_ptr ui_element_instance_callback_get_ptr() {
+ if (m_callback.is_empty()) m_callback = new service_impl_t<t_callback>(this);
+ return m_callback;
+ }
+ void ui_element_instance_callback_release() {
+ if (m_callback.is_valid()) {
+ m_callback->orphan();
+ m_callback.release();
+ }
+ }
+protected:
+ ~ui_element_instance_callback_receiver() {
+ ui_element_instance_callback_release();
+ }
+ ui_element_instance_callback_receiver() {}
+
+private:
+ typedef ui_element_instance_callback_receiver t_self;
+ typedef ui_element_instance_callback_impl<t_self> t_callback;
+ service_ptr_t<t_callback> m_callback;
+};
+
+//! Instance of a UI element.
+class NOVTABLE ui_element_instance : public service_base {
+public:
+ //! Returns ui_element_instance's window handle.\n
+ //! UI Element's window must be created when the ui_element_instance object is created. The window may or may not be destroyed by caller before the ui_element_instance itself is destroyed. If caller doesn't destroy the window before ui_element_instance destruction, ui_element_instance destructor should do it.
+ virtual HWND get_wnd() = 0;
+
+ //! Alters element's current configuration. Specified ui_element_config's GUID must be the same as this element's GUID.
+ virtual void set_configuration(ui_element_config::ptr data) = 0;
+ //! Retrieves element's current configuration. Returned object's GUID must be set to your element's GUID so your element can be re-instantiated with stored settings.
+ virtual ui_element_config::ptr get_configuration() = 0;
+
+ //! Returns GUID of the element. The return value must be the same as your ui_element::get_guid().
+ virtual GUID get_guid() = 0;
+ //! Returns subclass GUID of the element. The return value must be the same as your ui_element::get_guid().
+ virtual GUID get_subclass() = 0;
+
+ //! Returns element's focus priority.
+ virtual double get_focus_priority() {return 0;}
+ //! Elements that host other elements should pass the call to the child with the highest priority. Override for container elements.
+ virtual void set_default_focus() {set_default_focus_fallback();}
+
+ //! Overridden by containers only.
+ virtual bool get_focus_priority_subclass(double & p_out,const GUID & p_subclass) {
+ if (p_subclass == get_subclass()) {p_out = get_focus_priority(); return true;}
+ else {return false;}
+ }
+ //! Overridden by containers only.
+ virtual bool set_default_focus_subclass(const GUID & p_subclass) {
+ if (p_subclass == get_subclass()) {set_default_focus(); return true;}
+ else {return false;}
+ }
+
+ //! Retrieves element's minimum/maximum window size. Default implementation will fall back to WM_GETMINMAXINFO.
+ virtual ui_element_min_max_info get_min_max_info() {
+ ui_element_min_max_info ret;
+ MINMAXINFO temp = {};
+ temp.ptMaxTrackSize.x = 1024*1024;//arbitrary huge number
+ temp.ptMaxTrackSize.y = 1024*1024;
+ SendMessage(get_wnd(),WM_GETMINMAXINFO,0,(LPARAM)&temp);
+ if (temp.ptMinTrackSize.x >= 0) ret.m_min_width = temp.ptMinTrackSize.x;
+ if (temp.ptMaxTrackSize.x > 0) ret.m_max_width = temp.ptMaxTrackSize.x;
+ if (temp.ptMinTrackSize.y >= 0) ret.m_min_height = temp.ptMinTrackSize.y;
+ if (temp.ptMaxTrackSize.y > 0) ret.m_max_height = temp.ptMaxTrackSize.y;
+ return ret;
+ }
+
+ //! Used by host to notify the element about various events. See ui_element_notify_* GUIDs for possible p_what parameter; meaning of other parameters depends on p_what value. Container classes should dispatch all notifications to their children.
+ virtual void notify(const GUID & p_what, t_size p_param1, const void * p_param2, t_size p_param2size) {}
+
+ //! @param p_point Context menu point in screen coordinates. Always within out window's rect.
+ //! @return True to request edit_mode_context_menu_build() call to add our own items to the menu, false if we can't supply a context menu for this point.
+ virtual bool edit_mode_context_menu_test(const POINT & p_point,bool p_fromkeyboard) {return false;}
+ virtual void edit_mode_context_menu_build(const POINT & p_point,bool p_fromkeyboard,HMENU p_menu,unsigned p_id_base) {}
+ virtual void edit_mode_context_menu_command(const POINT & p_point,bool p_fromkeyboard,unsigned p_id,unsigned p_id_base) {}
+ //! @param p_point Receives the point to spawn context menu over when user has pressed the context menu key; in screen coordinates.
+ virtual bool edit_mode_context_menu_get_focus_point(POINT & p_point) {return false;}
+
+ virtual bool edit_mode_context_menu_get_description(unsigned p_id,unsigned p_id_base,pfc::string_base & p_out) {return false;}
+
+
+ //! Helper.
+ void set_default_focus_fallback() {
+ const HWND thisWnd = this->get_wnd();
+ if (thisWnd != NULL) ::SetFocus(thisWnd);
+ }
+
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_instance,service_base);
+};
+
+typedef service_ptr_t<ui_element_instance> ui_element_instance_ptr;
+
+
+//! Interface to enumerate and possibly alter children of a container element. Obtained from ui_element::enumerate_children().
+class NOVTABLE ui_element_children_enumerator : public service_base {
+public:
+ //! Retrieves the container's children count.
+ virtual t_size get_count() = 0;
+ //! Retrieves the configuration of the child at specified index, 0 <= index < get_count().
+ virtual ui_element_config::ptr get_item(t_size p_index) = 0;
+
+ //! Returns whether children count can be altered. For certain containers, children count is fixed and this method returns false.
+ virtual bool can_set_count() = 0;
+ //! Alters container's children count (behavior is undefined when can_set_count() returns false). Newly allocated children get default empty element configuration.
+ virtual void set_count(t_size count) = 0;
+ //! Alters the selected item.
+ virtual void set_item(t_size p_index,ui_element_config::ptr cfg) = 0;
+ //! Creates a new ui_element_config for this container, with our changes (set_count(), set_item()) applied.
+ virtual ui_element_config::ptr commit() = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_children_enumerator,service_base);
+};
+
+
+typedef service_ptr_t<ui_element_children_enumerator> ui_element_children_enumerator_ptr;
+
+
+//! Entrypoint interface for each UI element implementation.
+class NOVTABLE ui_element : public service_base {
+public:
+ //! Retrieves GUID of the element.
+ virtual GUID get_guid() = 0;
+
+ //! Retrieves subclass GUID of the element. Typically one of ui_element_subclass_* values, but you can create your own custom subclasses. Subclass GUIDs are used for various purposes such as focusing an UI element that provides specific functionality.
+ virtual GUID get_subclass() = 0;
+
+ //! Retrieves a simple human-readable name of the element.
+ virtual void get_name(pfc::string_base & p_out) = 0;
+
+ //! Instantiates the element using specified settings.
+ virtual ui_element_instance_ptr instantiate(HWND p_parent,ui_element_config::ptr cfg,ui_element_instance_callback_ptr p_callback) = 0;
+
+ //! Retrieves default configuration of the element.
+ virtual ui_element_config::ptr get_default_configuration() = 0;
+
+ //! Implemented by container elements only. Returns NULL for non-container elements. \n
+ //! Allows caller to parse and edit child element structure of container elements.
+ virtual ui_element_children_enumerator_ptr enumerate_children(ui_element_config::ptr cfg) = 0;
+
+
+ //! In certain cases, an UI element can import settings of another UI element (eg. vertical<=>horizontal splitter, tabs<=>splitters) when user directly replaces one of such elements with another. Overriding this function allows special handling of such cases. \n
+ //! Implementation hint: when implementing a multi-child container, you probably want to takeover child elements replacing another container element; use enumerate_children() on the element the configuration belongs to to grab those.
+ //! @returns A new ui_element_config on success, a null pointer when the input data could not be parsed / is in an unknown format.
+ virtual ui_element_config::ptr import(ui_element_config::ptr cfg) {return NULL;}
+
+ //! Override this to return false when your element is for internal use only and should not be user-addable.
+ virtual bool is_user_addable() {return true;}
+
+ //! Returns an icon to show in available UI element lists, etc. Returns NULL when there is no icon to display.
+ virtual t_ui_icon get_icon() {return NULL;}
+
+ //! Retrieves a human-readable description of the element.
+ virtual bool get_description(pfc::string_base & p_out) {return false;}
+
+ //! Retrieves a human-readable description of the element's function to use for grouping in the element list. The default implementation relies on get_subclass() return value.
+ virtual bool get_element_group(pfc::string_base & p_out);
+
+ static bool g_find(service_ptr_t<ui_element> & out, const GUID & id);
+ static bool g_get_name(pfc::string_base & p_out,const GUID & p_guid);
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(ui_element);
+};
+
+//! Extended interface for a UI element implementation.
+class NOVTABLE ui_element_v2 : public ui_element {
+public:
+ enum {
+ //! Indicates that bump() method is supported.
+ KFlagSupportsBump = 1 << 0,
+ //! Tells UI backend to auto-generate a menu command activating your element - bumping an existing instance if possible, spawning a popup otherwise.
+ //! Currently menu commands are generated for ui_element_subclass_playback_visualisation, ui_element_subclass_media_library_viewers and ui_element_subclass_utility subclasses, in relevant menus.
+ KFlagHavePopupCommand = 1 << 1,
+ //! Tells backend that your element supports fullscreen mode (typically set only for visualisations).
+ KFlagHaveFullscreen = 1 << 2,
+
+ KFlagPopupCommandHidden = 1 << 3,
+
+ KFlagsVisualisation = KFlagHavePopupCommand | KFlagHaveFullscreen,
+ };
+ virtual t_uint32 get_flags() = 0;
+ //! Called only when get_flags() return value has KFlagSupportsBump bit set.
+ //! Returns true when an existing instance of this element has been "bumped" - brought to user's attention in some way, false when there's no instance to bump or none of existing instances could be bumped for whatever reason.
+ virtual bool bump() = 0;
+
+ //! Override to use another GUID for our menu command. Relevant only when KFlagHavePopupCommand is set.
+ virtual GUID get_menu_command_id() {return get_guid();}
+
+ //! Override to use another description for our menu command. Relevant only when KFlagHavePopupCommand is set.
+ virtual bool get_menu_command_description(pfc::string_base & out) {
+ pfc::string8 name; get_name(name);
+ out = pfc::string_formatter() << "Activates " << name << " window.";
+ return true;
+ }
+
+ //! Override to use another name for our menu command. Relevant only when KFlagHavePopupCommand is set.
+ virtual void get_menu_command_name(pfc::string_base & out) {get_name(out);}
+ //! Relevant only when KFlagHavePopupCommand is set.
+ //! @param defSize Default window size @ 96DPI. If screen DPI is different, it will be rescaled appropriately.
+ //! @param title Window title to use.
+ //! @returns True when implemented, false when not - caller will automatically determine default size and window title then.
+ virtual bool get_popup_specs(SIZE & defSize, pfc::string_base & title) {return false;}
+
+
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_v2, ui_element)
+};
+
+class NOVTABLE ui_element_popup_host_callback : public service_base {
+public:
+ virtual void on_resize(t_uint32 width, t_uint32 height) = 0;
+ virtual void on_close() = 0;
+ virtual void on_destroy() = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_popup_host_callback,service_base);
+};
+
+class NOVTABLE ui_element_popup_host : public service_base {
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_popup_host,service_base);
+public:
+ virtual ui_element_instance::ptr get_root_elem() = 0;
+ virtual HWND get_wnd() = 0;
+ virtual ui_element_config::ptr get_config() = 0;
+ virtual void set_config(ui_element_config::ptr cfg) = 0;
+ //! Sets edit mode on/off. Default: off.
+ virtual void set_edit_mode(bool state) = 0;
+};
+
+class NOVTABLE ui_element_popup_host_v2 : public ui_element_popup_host {
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_popup_host_v2, ui_element_popup_host);
+public:
+ virtual void set_window_title(const char * title) = 0;
+ virtual void allow_element_specified_title(bool allow) = 0;
+};
+
+//! For use with static_api_ptr_t<>
+class NOVTABLE ui_element_common_methods : public service_base {
+public:
+ virtual void copy(ui_element_config::ptr cfg) = 0;
+ virtual void cut(ui_element_instance_ptr & p_instance,HWND p_parent,ui_element_instance_callback_ptr p_callback) = 0;
+ virtual bool paste(ui_element_instance_ptr & p_instance,HWND p_parent,ui_element_instance_callback_ptr p_callback) = 0;
+ virtual bool is_paste_available() = 0;
+ virtual bool paste(ui_element_config::ptr & out) = 0;
+
+ virtual bool parse_dataobject_check(pfc::com_ptr_t<IDataObject> in, DWORD & dropEffect) = 0;
+ virtual bool parse_dataobject(pfc::com_ptr_t<IDataObject> in,ui_element_config::ptr & out, DWORD & dropEffect) = 0;
+
+ virtual pfc::com_ptr_t<IDataObject> create_dataobject(ui_element_config::ptr in) = 0;
+
+ virtual HWND spawn_scratchbox(HWND parent,ui_element_config::ptr cfg) = 0;
+
+ virtual ui_element_popup_host::ptr spawn_host(HWND parent, ui_element_config::ptr cfg, ui_element_popup_host_callback::ptr callback, ui_element::ptr elem = NULL, DWORD style = WS_POPUPWINDOW|WS_CAPTION|WS_THICKFRAME, DWORD styleEx = WS_EX_CONTROLPARENT) = 0;
+
+ void copy(ui_element_instance_ptr p_instance) {copy(p_instance->get_configuration());}
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(ui_element_common_methods);
+};
+
+//! For use with static_api_ptr_t<>
+class NOVTABLE ui_element_common_methods_v2 : public ui_element_common_methods {
+public:
+ virtual void spawn_host_simple(HWND parent, ui_element::ptr elem, bool fullScreenMode) = 0;
+
+ void spawn_host_simple(HWND parent, const GUID & elem, bool fullScreenMode) {
+ spawn_host_simple(parent, service_by_guid<ui_element>(elem), fullScreenMode);
+ }
+
+ virtual void toggle_fullscreen(ui_element::ptr elem, HWND parent) = 0;
+
+ void toggle_fullscreen(const GUID & elem, HWND parent) {
+ toggle_fullscreen(service_by_guid<ui_element>(elem), parent);
+ }
+
+ FB2K_MAKE_SERVICE_INTERFACE(ui_element_common_methods_v2, ui_element_common_methods);
+};
+
+class NOVTABLE ui_element_typable_window_manager : public service_base {
+public:
+ virtual void add(HWND wnd) = 0;
+ virtual void remove(HWND wnd) = 0;
+ virtual bool is_registered(HWND wnd) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(ui_element_typable_window_manager)
+};
+
+FOOGUIDDECL const GUID ui_element_instance::class_guid = { 0xb55d4525, 0xddc8, 0x40d7, { 0xb9, 0x19, 0x6d, 0x7c, 0x48, 0x38, 0xf2, 0xdb } };
+FOOGUIDDECL const GUID ui_element::class_guid = { 0xb52c703, 0x1586, 0x42f7, { 0xa8, 0x4c, 0x70, 0x54, 0xcd, 0xc8, 0x22, 0x55 } };
+FOOGUIDDECL const GUID ui_element_v2::class_guid = { 0x2e1fe21e, 0x8e0f, 0x43be, { 0x9f, 0xdb, 0xd5, 0xdd, 0xf4, 0xc9, 0xba, 0xba } };
+FOOGUIDDECL const GUID ui_element_instance_callback::class_guid = { 0xcd3647c6, 0x12d9, 0x4122, { 0xa5, 0x28, 0x4a, 0xba, 0x34, 0x90, 0x89, 0x5c } };
+FOOGUIDDECL const GUID ui_element_instance_callback_v2::class_guid = { 0x5b11faa3, 0x48ee, 0x41a1, { 0xb7, 0xf9, 0x16, 0x7a, 0xba, 0x6c, 0x60, 0x41 } };
+FOOGUIDDECL const GUID ui_element_children_enumerator::class_guid = { 0x6c7a3a46, 0xdc54, 0x4499, { 0x98, 0x66, 0xae, 0x3, 0x55, 0xe, 0xf3, 0x1c } };
+FOOGUIDDECL const GUID ui_element_common_methods::class_guid = { 0xedee8cd9, 0x3072, 0x410e, { 0xb2, 0x66, 0x37, 0x5d, 0x9f, 0x6f, 0xb0, 0x36 } };
+FOOGUIDDECL const GUID ui_element_common_methods_v2::class_guid = { 0x2dc90e34, 0x38fc, 0x4ad1, { 0x92, 0x80, 0xff, 0x1f, 0xac, 0x14, 0x52, 0xd0 } };
+FOOGUIDDECL const GUID ui_element_popup_host::class_guid = { 0xfcc381e9, 0xe527, 0x4887, { 0xae, 0x63, 0x27, 0xc0, 0x3f, 0x4, 0xd, 0x1 } };
+FOOGUIDDECL const GUID ui_element_popup_host_callback::class_guid = { 0x2993a043, 0x2e70, 0x4d8f, { 0x81, 0xb, 0x41, 0x3, 0x37, 0x73, 0x97, 0xcd } };
+FOOGUIDDECL const GUID ui_element_config::class_guid = { 0xd34bba46, 0x1bad, 0x4547, { 0xba, 0xb4, 0x17, 0xe2, 0x44, 0xd5, 0xeb, 0x94 } };
+FOOGUIDDECL const GUID ui_element_typable_window_manager::class_guid = { 0xbaa99ee2, 0xf770, 0x4981, { 0x9e, 0x50, 0xf3, 0x4c, 0x5c, 0x6d, 0x98, 0x81 } };
+FOOGUIDDECL const GUID ui_element_instance_callback_v3::class_guid = { 0x6d15c0c6, 0x90b6, 0x4c7e, { 0xbf, 0x39, 0xe9, 0x39, 0xf2, 0xdf, 0x9b, 0x91 } };
+FOOGUIDDECL const GUID ui_element_popup_host_v2::class_guid = { 0x8caac11e, 0x52b6, 0x47f7, { 0x97, 0xc9, 0x2c, 0x87, 0xdb, 0xdb, 0x2e, 0x5b } };
+
+
+//! Dispatched through ui_element_instance::notify() when host changes color settings. Other parameters are not used and should be set to zero.
+static const GUID ui_element_notify_colors_changed = { 0xeedda994, 0xe3d2, 0x441a, { 0xbe, 0x47, 0xa1, 0x63, 0x5b, 0x71, 0xab, 0x60 } };
+static const GUID ui_element_notify_font_changed = { 0x7a6964a8, 0xc797, 0x4737, { 0x90, 0x55, 0x7d, 0x84, 0xe7, 0x3d, 0x63, 0x6e } };
+static const GUID ui_element_notify_edit_mode_changed = { 0xf72f00af, 0xec76, 0x4251, { 0xb2, 0x67, 0x89, 0x4c, 0x52, 0x5f, 0x18, 0xc6 } };
+
+//! Sent when a portion of the GUI is shown/hidden. First parameter is a bool flag indicating whether your UI Element is now visible.
+static const GUID ui_element_notify_visibility_changed = { 0x313c22b9, 0x287a, 0x4804, { 0x8e, 0x6c, 0xff, 0xef, 0x4, 0x10, 0xcd, 0xea } };
+
+//! Sent to retrieve areas occupied by elements to show overlay labels. Param1 is ignored, param2 is a pointer to ui_element_notify_get_element_labels_callback, param2size is ignored.
+static const GUID ui_element_notify_get_element_labels = { 0x4850a2cb, 0x6cfc, 0x4d74, { 0x9a, 0x6d, 0xc, 0x7b, 0x29, 0x16, 0x5e, 0x69 } };
+
+
+//! Set to ui_element_instance_callback_v3 to set our element's label. Param1 is ignored, param2 is a pointer to a UTF-8 string containing the new label. Return value is 1 if the label is user-visible, 0 if the host does not support displaying overridden labels.
+static const GUID ui_element_host_notify_set_elem_label = { 0x24598cb7, 0x9c5c, 0x488e, { 0xba, 0xff, 0xd, 0x2f, 0x11, 0x93, 0xe4, 0xf2 } };
+static const GUID ui_element_host_notify_get_dialog_texture = { 0xbb98eb99, 0x7b07, 0x42f3, { 0x8c, 0xd1, 0x12, 0xa2, 0xc2, 0x23, 0xb5, 0xbc } };
+static const GUID ui_element_host_notify_is_border_needed = { 0x2974f554, 0x2f31, 0x49c5, { 0xab, 0x4, 0x76, 0x4a, 0xf7, 0x94, 0x7c, 0x4f } };
+
+
+
+class ui_element_notify_get_element_labels_callback {
+public:
+ virtual void set_area_label(const RECT & rc, const char * name) = 0;
+ virtual void set_visible_element(ui_element_instance::ptr item) = 0;
+protected:
+ ui_element_notify_get_element_labels_callback() {}
+ ~ui_element_notify_get_element_labels_callback() {}
+
+ PFC_CLASS_NOT_COPYABLE_EX(ui_element_notify_get_element_labels_callback);
+};
+
+
+static const GUID ui_element_subclass_playlist_renderers = { 0x3c4c68a0, 0xfc5, 0x400a, { 0xa3, 0x4a, 0x2e, 0x3a, 0xae, 0x6e, 0x90, 0x76 } };
+static const GUID ui_element_subclass_media_library_viewers = { 0x58455355, 0x289d, 0x459c, { 0x8f, 0x8a, 0xe1, 0x49, 0x6, 0xfc, 0x14, 0x56 } };
+static const GUID ui_element_subclass_containers = { 0x72dc5954, 0x1f26, 0x41be, { 0xae, 0xf2, 0x92, 0x9d, 0x25, 0xb5, 0x8d, 0xcf } };
+static const GUID ui_element_subclass_selection_information = { 0x68084e43, 0x7359, 0x46a5, { 0xb6, 0x84, 0x3c, 0xd7, 0x57, 0xf6, 0xde, 0xfd } };
+static const GUID ui_element_subclass_playback_visualisation = { 0x1f3c62f2, 0x8bb5, 0x4700, { 0x9e, 0x82, 0x8c, 0x48, 0x22, 0xf0, 0x18, 0x35 } };
+static const GUID ui_element_subclass_playback_information = { 0x84859f2d, 0xbb9c, 0x4e70, { 0x9d, 0x4, 0x14, 0x71, 0xb5, 0x63, 0x1f, 0x7f } };
+static const GUID ui_element_subclass_utility = { 0xffa4f4fc, 0xc169, 0x4766, { 0x9c, 0x94, 0xfa, 0xef, 0xae, 0xb2, 0x7e, 0xf } };
+
+bool ui_element_subclass_description(const GUID & id, pfc::string_base & out);
+
+
+#define ReplaceUIElementCommand "Replace UI Element..."
+#define ReplaceUIElementDescription "Replaces this UI Element with another one."
+
+#define CopyUIElementCommand "Copy UI Element"
+#define CopyUIElementDescription "Copies this UI Element to Windows Clipboard."
+
+#define PasteUIElementCommand "Paste UI Element"
+#define PasteUIElementDescription "Replaces this UI Element with Windows Clipboard content."
+
+#define CutUIElementCommand "Cut UI Element"
+#define CutUIElementDescription "Copies this UI Element to Windows Clipboard and replaces it with an empty UI Element."
+
+#define AddNewUIElementCommand "Add New UI Element..."
+#define AddNewUIElementDescription "Replaces the selected empty space with a new UI Element."
+
+
+
+
+template<typename TImpl, typename TInterface = ui_element> class ui_element_impl : public TInterface {
+public:
+ GUID get_guid() { return TImpl::g_get_guid();}
+ GUID get_subclass() { return TImpl::g_get_subclass();}
+ void get_name(pfc::string_base & out) { TImpl::g_get_name(out); }
+ ui_element_instance::ptr instantiate(HWND parent,ui_element_config::ptr cfg,ui_element_instance_callback::ptr callback) {
+ PFC_ASSERT( cfg->get_guid() == get_guid() );
+ service_nnptr_t<ui_element_instance_impl_helper> item = new window_service_impl_t<ui_element_instance_impl_helper>(cfg,callback);
+ item->initialize_window(parent);
+ return item;
+ }
+ ui_element_config::ptr get_default_configuration() { return TImpl::g_get_default_configuration(); }
+ ui_element_children_enumerator_ptr enumerate_children(ui_element_config::ptr cfg) {return NULL;}
+ bool get_description(pfc::string_base & out) {out = TImpl::g_get_description(); return true;}
+private:
+ class ui_element_instance_impl_helper : public TImpl {
+ public:
+ ui_element_instance_impl_helper(ui_element_config::ptr cfg, ui_element_instance_callback::ptr callback) : TImpl(cfg,callback) {}
+
+ GUID get_guid() {return TImpl::g_get_guid();}
+ GUID get_subclass() {return TImpl::g_get_subclass();}
+ HWND get_wnd() {return *this;}
+ };
+public:
+ typedef ui_element_instance_impl_helper TInstance;
+ static TInstance const & instanceGlobals() {return *reinterpret_cast<const TInstance*>(NULL);}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/unpack.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/unpack.h index 2671fed..7e2be58 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/unpack.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/unpack.h @@ -1,6 +1,3 @@ -#ifndef _UNPACK_H_
-#define _UNPACK_H_
-
//! Service providing "unpacker" functionality - processes "packed" file (such as a zip file containing a single media file inside) to allow its contents to be accessed transparently.\n
//! To access existing unpacker implementations, use unpacker::g_open helper function.\n
//! To register your own implementation, use unpacker_factory_t template.
@@ -23,5 +20,3 @@ public: template<typename t_myclass>
class unpacker_factory_t : public service_factory_single_t<t_myclass> {};
-
-#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/vis.h b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/vis.h index e91f257..8033113 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/vis.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/SDK/vis.h @@ -1,7 +1,4 @@ -#ifndef _FOOBAR2000_VIS_H_
-#define _FOOBAR2000_VIS_H_
-
-//! This class provides abstraction for receiving visualisation data. Instances of visualisation_stream being created/released serve as an indication for visualisation backend to process currently played audio data or shut down when there are no visualisation clients active.\n
+//! This class provides abstraction for retrieving visualisation data. Instances of visualisation_stream being created/released serve as an indication for visualisation backend to process currently played audio data or shut down when there are no visualisation clients active.\n
//! Use visualisation_manager::create_stream to instantiate.
class NOVTABLE visualisation_stream : public service_base {
public:
@@ -25,10 +22,33 @@ public: //! Throws std::exception derivatives on failure.
virtual void make_fake_spectrum_absolute(audio_chunk & p_chunk,double p_offset,unsigned p_fft_size) = 0;
-
FB2K_MAKE_SERVICE_INTERFACE(visualisation_stream,service_base);
};
+//! New in 0.9.5.
+class NOVTABLE visualisation_stream_v2 : public visualisation_stream {
+public:
+ virtual void request_backlog(double p_time) = 0;
+ virtual void set_channel_mode(t_uint32 p_mode) = 0;
+
+ enum {
+ channel_mode_default = 0,
+ channel_mode_mono,
+ channel_mode_frontonly,
+ channel_mode_backonly,
+ };
+
+ FB2K_MAKE_SERVICE_INTERFACE(visualisation_stream_v2,visualisation_stream);
+};
+
+//! New in 0.9.5.2.
+class NOVTABLE visualisation_stream_v3 : public visualisation_stream_v2 {
+public:
+ virtual void chunk_to_spectrum(audio_chunk const & chunk, audio_chunk & spectrum, double centerOffset) = 0;
+
+ FB2K_MAKE_SERVICE_INTERFACE(visualisation_stream_v3,visualisation_stream_v2);
+};
+
//! Entrypoint service for visualisation processing; use this to create visualisation_stream objects that can be used to retrieve properties of currently played audio. \n
//! Implemented by core; do not reimplement.\n
//! Use static_api_ptr_t to access it, e.g. static_api_ptr_t<visualisation_manager>()->create_stream(mystream,0);
@@ -36,11 +56,23 @@ class NOVTABLE visualisation_manager : public service_base { public:
//! Creates a visualisation_stream object. See visualisation_stream for more info.
//! @param p_out Receives newly created visualisation_stream instance.
- //! @param p_flags Reserved for future use. Must be set to zero.
+ //! @param p_flags Combination of one or more KStreamFlag* values. Currently only KStreamFlagNewFFT is defined.
+ //! It's recommended that you set p_flags to KStreamFlagNewFFT to get the new FFT behavior (better quality and result normalization), the old behavior for null flags is preserved for compatibility with old components that rely on it.
virtual void create_stream(service_ptr_t<visualisation_stream> & p_out,unsigned p_flags) = 0;
- FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(visualisation_manager);
-};
+ enum {
+ //! New FFT behavior for spectrum-generating methods, available in 0.9.5.2 and newer: output normalized to 0..1, Gauss window used instead of rectangluar (better quality / less aliasing).
+ //! It's recommended to always set this flag. The old behavior is preserved for backwards compatibility.
+ KStreamFlagNewFFT = 1 << 0,
+ };
+
+ //! Wrapper around non-template create_stream(); retrieves one of newer visualisation_stream_* interfaces rather than base visualisation_stream interface. Throws exception_service_extension_not_found() when running too old foobar2000 version for the requested interface.
+ template<typename t_streamptr>
+ void create_stream(t_streamptr & out, unsigned flags) {
+ visualisation_stream::ptr temp; create_stream(temp, flags);
+ if (!temp->service_query_t(out)) throw exception_service_extension_not_found();
+ }
-#endif //_FOOBAR2000_VIS_H_
\ No newline at end of file + FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(visualisation_manager);
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/component_client.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/component_client.cpp index 1b1c919..0d688bb 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/component_client.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/component_client.cpp @@ -19,14 +19,15 @@ namespace core_api HWND get_main_window()
{
- return g_api->get_main_window();
+ PFC_ASSERT( g_foobar2000_api != NULL );
+ return g_foobar2000_api->get_main_window();
}
- pcchar get_my_file_name()
+ const char* get_my_file_name()
{
return g_name;
}
- pcchar get_my_full_path()
+ const char* get_my_full_path()
{
return g_full_path;
}
@@ -37,34 +38,44 @@ namespace core_api }
bool assert_main_thread()
{
- return (g_services_available && g_api) ? g_api->assert_main_thread() : true;
+ return (g_services_available && g_foobar2000_api) ? g_foobar2000_api->assert_main_thread() : true;
}
void ensure_main_thread() {
- if (!assert_main_thread()) throw exception_wrong_thread();
+ if (!is_main_thread()) uBugCheck();
}
bool is_main_thread()
{
- return (g_services_available && g_api) ? g_api->is_main_thread() : true;
+ return (g_services_available && g_foobar2000_api) ? g_foobar2000_api->is_main_thread() : true;
}
- pcchar get_profile_path()
+ const char* get_profile_path()
{
- return (g_services_available && g_api) ? g_api->get_profile_path() : 0;
+ PFC_ASSERT( g_foobar2000_api != NULL );
+ return g_foobar2000_api->get_profile_path();
}
bool is_shutting_down()
{
- return (g_services_available && g_api) ? g_api->is_shutting_down() : g_initialized;
+ return (g_services_available && g_foobar2000_api) ? g_foobar2000_api->is_shutting_down() : g_initialized;
}
bool is_initializing()
{
- return (g_services_available && g_api) ? g_api->is_initializing() : !g_initialized;
+ return (g_services_available && g_foobar2000_api) ? g_foobar2000_api->is_initializing() : !g_initialized;
+ }
+ bool is_portable_mode_enabled() {
+ PFC_ASSERT( g_foobar2000_api != NULL );
+ return g_foobar2000_api->is_portable_mode_enabled();
+ }
+
+ bool is_quiet_mode_enabled() {
+ PFC_ASSERT( g_foobar2000_api != NULL );
+ return g_foobar2000_api->is_quiet_mode_enabled();
}
}
namespace {
- class foobar2000_client_impl : public foobar2000_client
+ class foobar2000_client_impl : public foobar2000_client, private foobar2000_component_globals
{
public:
t_uint32 get_version() {return FOOBAR2000_CLIENT_VERSION;}
@@ -105,28 +116,8 @@ extern "C" __declspec(dllexport) foobar2000_client * _cdecl foobar2000_get_interface(foobar2000_api * p_api,HINSTANCE hIns)
{
g_hIns = hIns;
- g_api = p_api;
+ g_foobar2000_api = p_api;
return &g_client;
}
}
-
-#if 0
-BOOLEAN WINAPI DllMain(IN HINSTANCE hDllHandle, IN DWORD nReason, IN LPVOID Reserved )
-{
- BOOLEAN bSuccess = TRUE;
-
- switch ( nReason ) {
- case DLL_PROCESS_ATTACH:
-
- DisableThreadLibraryCalls( hDllHandle );
-
- break;
-
- case DLL_PROCESS_DETACH:
-
- break;
- }
- return TRUE;
-}
-#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client.vcproj b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client.vcproj index 15a2af8..c485fb1 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client.vcproj +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client.vcproj @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8.00"
+ Version="9.00"
Name="foobar2000_component_client"
ProjectGUID="{71AD2674-065B-48F5-B8B0-E1F9D3892081}"
RootNamespace="foobar2000_component_client"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -178,13 +179,15 @@ />
<Tool
Name="VCCLCompilerTool"
- EnableFiberSafeOptimizations="false"
+ Optimization="1"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
StringPooling="true"
+ BufferSecurityCheck="false"
FloatingPointModel="2"
RuntimeTypeInfo="false"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client.vcxproj b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client.vcxproj new file mode 100644 index 0000000..58f9037 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client.vcxproj @@ -0,0 +1,173 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{71AD2674-065B-48F5-B8B0-E1F9D3892081}</ProjectGuid>
+ <RootNamespace>foobar2000_component_client</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="component_client.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcproj b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcproj new file mode 100644 index 0000000..684571e --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcproj @@ -0,0 +1,339 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="listeningto_foo2kSDK_component_client"
+ ProjectGUID="{71AD2674-065B-48F5-B8B0-E1F9D3892081}"
+ RootNamespace="foobar2000_component_client"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ StringPooling="true"
+ BufferSecurityCheck="false"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ EnableFiberSafeOptimizations="false"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ StringPooling="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath="component_client.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcxproj b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcxproj new file mode 100644 index 0000000..f53de40 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcxproj @@ -0,0 +1,177 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>listeningto_foo2kSDK_component_client</ProjectName>
+ <ProjectGuid>{71AD2674-065B-48F5-B8B0-E1F9D3892081}</ProjectGuid>
+ <RootNamespace>foobar2000_component_client</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/listeningto/$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="component_client.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcxproj.user b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/foobar2000_component_client/foobar2000_component_client_9.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/COM_utils.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/COM_utils.h new file mode 100644 index 0000000..fd33a8f --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/COM_utils.h @@ -0,0 +1,10 @@ +#define FB2K_COM_CATCH catch(exception_com const & e) {return e.get_code();} catch(std::bad_alloc) {return E_OUTOFMEMORY;} catch(pfc::exception_invalid_params) {return E_INVALIDARG;} catch(...) {return E_UNEXPECTED;}
+
+#define COM_QI_BEGIN() HRESULT STDMETHODCALLTYPE QueryInterface(REFIID iid,void ** ppvObject) { if (ppvObject == NULL) return E_INVALIDARG;
+#define COM_QI_ENTRY(IWhat) { if (iid == __uuidof(IWhat)) {IWhat * temp = this; temp->AddRef(); * ppvObject = temp; return S_OK;} }
+#define COM_QI_ENTRY_(IWhat, IID) { if (iid == IID) {IWhat * temp = this; temp->AddRef(); * ppvObject = temp; return S_OK;} }
+#define COM_QI_END() * ppvObject = NULL; return E_NOINTERFACE; }
+
+#define COM_QI_CHAIN(Parent) { HRESULT status = Parent::QueryInterface(iid, ppvObject); if (SUCCEEDED(status)) return status; }
+
+#define COM_QI_SIMPLE(IWhat) COM_QI_BEGIN() COM_QI_ENTRY(IUnknown) COM_QI_ENTRY(IWhat) COM_QI_END()
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/CallForwarder.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/CallForwarder.h new file mode 100644 index 0000000..53608d6 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/CallForwarder.h @@ -0,0 +1,32 @@ +namespace CF {
+ template<typename TWhat> class CallForwarder {
+ public:
+ CallForwarder(TWhat * ptr) { m_ptr.new_t(ptr); }
+
+ void Orphan() {*m_ptr = NULL;}
+ bool IsValid() const { return *m_ptr != NULL; }
+ bool IsEmpty() const { return !IsValid(); }
+
+ TWhat * operator->() const {
+ PFC_ASSERT( IsValid() );
+ return *m_ptr;
+ }
+
+ TWhat & operator*() const {
+ PFC_ASSERT( IsValid() );
+ return **m_ptr;
+ }
+
+ private:
+ pfc::rcptr_t<TWhat*> m_ptr;
+ };
+
+ template<typename TWhat> class CallForwarderMaster : public CallForwarder<TWhat> {
+ public:
+ CallForwarderMaster(TWhat * ptr) : CallForwarder<TWhat>(ptr) {}
+ ~CallForwarderMaster() { Orphan(); }
+
+ PFC_CLASS_NOT_COPYABLE(CallForwarderMaster, CallForwarderMaster<TWhat>);
+ };
+
+}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/IDataObjectUtils.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/IDataObjectUtils.cpp new file mode 100644 index 0000000..65c36e5 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/IDataObjectUtils.cpp @@ -0,0 +1,186 @@ +#include "stdafx.h"
+
+
+HRESULT IDataObjectUtils::DataBlockToSTGMEDIUM(const void * blockPtr, t_size blockSize, STGMEDIUM * medium, DWORD tymed, bool bHere) throw() {
+ try {
+ if (bHere) {
+ switch(tymed) {
+ case TYMED_ISTREAM:
+ {
+ if (medium->pstm == NULL) return E_INVALIDARG;
+ ULONG written = 0;
+ HRESULT state;
+ state = medium->pstm->Write(blockPtr, pfc::downcast_guarded<ULONG>(blockSize),&written);
+ if (FAILED(state)) return state;
+ if (written != blockSize) return STG_E_MEDIUMFULL;
+ return S_OK;
+ }
+ default:
+ return DV_E_TYMED;
+ }
+ } else {
+ if (tymed & TYMED_HGLOBAL) {
+ HGLOBAL hMem = HGlobalFromMemblock(blockPtr, blockSize);
+ if (hMem == NULL) return E_OUTOFMEMORY;
+ medium->tymed = TYMED_HGLOBAL;
+ medium->hGlobal = hMem;
+ medium->pUnkForRelease = NULL;
+ return S_OK;
+ }
+ if (tymed & TYMED_ISTREAM) {
+ HRESULT state;
+ HGLOBAL hMem = HGlobalFromMemblock(blockPtr, blockSize);
+ if (hMem == NULL) return E_OUTOFMEMORY;
+ medium->tymed = TYMED_ISTREAM;
+ pfc::com_ptr_t<IStream> stream;
+ if (FAILED( state = CreateStreamOnHGlobal(hMem,TRUE,stream.receive_ptr()) ) ) {
+ GlobalFree(hMem);
+ return state;
+ }
+ {
+ LARGE_INTEGER wtf = {};
+ if (FAILED( state = stream->Seek(wtf,STREAM_SEEK_END,NULL) ) ) {
+ return state;
+ }
+ }
+ medium->pstm = stream.detach();
+ medium->pUnkForRelease = NULL;
+ return S_OK;
+ }
+ return DV_E_TYMED;
+ }
+ } catch(pfc::exception_not_implemented) {
+ return E_NOTIMPL;
+ } catch(std::bad_alloc) {
+ return E_OUTOFMEMORY;
+ } catch(...) {
+ return E_UNEXPECTED;
+ }
+}
+
+
+HGLOBAL IDataObjectUtils::HGlobalFromMemblock(const void * ptr,t_size size) {
+ HGLOBAL handle = GlobalAlloc(GMEM_MOVEABLE,size);
+ if (handle != NULL) {
+ void * destptr = GlobalLock(handle);
+ if (destptr == NULL) {
+ GlobalFree(handle);
+ handle = NULL;
+ } else {
+ memcpy(destptr,ptr,size);
+ GlobalUnlock(handle);
+ }
+ }
+ return handle;
+}
+
+HRESULT IDataObjectUtils::ExtractDataObjectContent(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD aspect, LONG index, pfc::array_t<t_uint8> & out) {
+ FORMATETC fmt = {};
+ fmt.cfFormat = format; fmt.dwAspect = aspect; fmt.lindex = index;
+ fmt.tymed = TYMED_HGLOBAL | TYMED_ISTREAM;
+
+ STGMEDIUM med = {};
+ HRESULT state;
+ if (FAILED( state = obj->GetData(&fmt,&med) ) ) return state;
+ ReleaseStgMediumScope relScope(&med);
+ return STGMEDIUMToDataBlock(med, out);
+}
+
+HRESULT IDataObjectUtils::STGMEDIUMToDataBlock(const STGMEDIUM & med, pfc::array_t<t_uint8> & out) {
+ switch(med.tymed) {
+ case TYMED_HGLOBAL:
+ {
+ CGlobalLockScope lock(med.hGlobal);
+ out.set_data_fromptr( (const t_uint8*) lock.GetPtr(), lock.GetSize() );
+ }
+ return S_OK;
+ case TYMED_ISTREAM:
+ {
+ HRESULT state;
+ IStream * stream = med.pstm;
+ LARGE_INTEGER offset = {};
+ STATSTG stats = {};
+ if (FAILED( state = stream->Stat(&stats,STATFLAG_NONAME ) ) ) return state;
+ t_size toRead = pfc::downcast_guarded<t_size>(stats.cbSize.QuadPart);
+ out.set_size(toRead);
+ if (FAILED( state = stream->Seek(offset,STREAM_SEEK_SET,NULL) ) ) return state;
+ ULONG cbRead = 0;
+ if (FAILED( state = stream->Read(out.get_ptr(), pfc::downcast_guarded<ULONG>(toRead), &cbRead) ) ) return state;
+ if (cbRead != toRead) return E_UNEXPECTED;
+ }
+ return S_OK;
+ default:
+ return DV_E_TYMED;
+ }
+}
+
+HRESULT IDataObjectUtils::ExtractDataObjectContent(pfc::com_ptr_t<IDataObject> obj, UINT format, pfc::array_t<t_uint8> & out) {
+ return ExtractDataObjectContent(obj, format, DVASPECT_CONTENT, -1, out);
+}
+
+HRESULT IDataObjectUtils::ExtractDataObjectContentTest(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD aspect, LONG index) {
+ FORMATETC fmt = {};
+ fmt.cfFormat = format; fmt.dwAspect = aspect; fmt.lindex = index;
+ for(t_uint32 walk = 0; walk < 32; ++walk) {
+ const DWORD tymed = 1 << walk;
+ if ((ExtractDataObjectContent_SupportedTymeds & tymed) != 0) {
+ fmt.tymed = tymed;
+ HRESULT state = obj->QueryGetData(&fmt);
+ if (SUCCEEDED(state)) {
+ if (state == S_OK) return S_OK;
+ } else {
+ if (state != DV_E_TYMED) return state;
+ }
+ }
+ }
+ return E_FAIL;
+}
+
+HRESULT IDataObjectUtils::ExtractDataObjectContentTest(pfc::com_ptr_t<IDataObject> obj, UINT format) {
+ return ExtractDataObjectContentTest(obj,format,DVASPECT_CONTENT,-1);
+}
+
+HRESULT IDataObjectUtils::ExtractDataObjectString(pfc::com_ptr_t<IDataObject> obj, pfc::string_base & out) {
+ pfc::array_t<t_uint8> data;
+ HRESULT state;
+ state = ExtractDataObjectContent(obj,CF_UNICODETEXT,data);
+ if (SUCCEEDED(state)) {
+ out = pfc::stringcvt::string_utf8_from_os_ex( (const wchar_t*) data.get_ptr(), data.get_size() / sizeof(wchar_t) );
+ return S_OK;
+ }
+ state = ExtractDataObjectContent(obj,CF_TEXT,data);
+ if (SUCCEEDED(state)) {
+ out = pfc::stringcvt::string_utf8_from_os_ex( (const char*) data.get_ptr(), data.get_size() / sizeof(char) );
+ return S_OK;
+ }
+ return E_FAIL;
+}
+
+HRESULT IDataObjectUtils::SetDataObjectContent(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD aspect, LONG index, const void * data, t_size dataSize) {
+ STGMEDIUM med = {};
+ FORMATETC fmt = {};
+ fmt.cfFormat = format; fmt.dwAspect = aspect; fmt.lindex = index; fmt.tymed = TYMED_HGLOBAL;
+ HRESULT state;
+ if (FAILED(state = DataBlockToSTGMEDIUM(data,dataSize,&med,TYMED_HGLOBAL,false))) return state;
+ return obj->SetData(&fmt,&med,TRUE);
+}
+
+HRESULT IDataObjectUtils::SetDataObjectString(pfc::com_ptr_t<IDataObject> obj, const char * str) {
+ pfc::stringcvt::string_wide_from_utf8 s(str);
+ return SetDataObjectContent(obj,CF_UNICODETEXT,DVASPECT_CONTENT,-1,s.get_ptr(), (s.length()+1) * sizeof(s[0]));
+}
+
+HRESULT IDataObjectUtils::ExtractDataObjectDWORD(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD & val) {
+ HRESULT state;
+ pfc::array_t<t_uint8> buffer;
+ if (FAILED( state = ExtractDataObjectContent(obj, format, DVASPECT_CONTENT, -1, buffer) ) ) return state;
+ if (buffer.get_size() < sizeof(val)) return E_UNEXPECTED;
+ val = *(DWORD*) buffer.get_ptr();
+ return S_OK;
+}
+HRESULT IDataObjectUtils::SetDataObjectDWORD(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD val) {
+ return SetDataObjectContent(obj,format,DVASPECT_CONTENT,-1,&val,sizeof(val));
+}
+HRESULT IDataObjectUtils::PasteSucceeded(pfc::com_ptr_t<IDataObject> obj, DWORD effect) {
+ return SetDataObjectDWORD(obj, RegisterClipboardFormat(CFSTR_PASTESUCCEEDED), effect);
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/IDataObjectUtils.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/IDataObjectUtils.h new file mode 100644 index 0000000..5eca9a3 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/IDataObjectUtils.h @@ -0,0 +1,180 @@ +#include <shlobj.h>
+
+namespace IDataObjectUtils {
+
+ class ReleaseStgMediumScope {
+ public:
+ ReleaseStgMediumScope(STGMEDIUM * medium) : m_medium(medium) {}
+ ~ReleaseStgMediumScope() {if (m_medium != NULL) ReleaseStgMedium(m_medium);}
+ private:
+ STGMEDIUM * m_medium;
+
+ PFC_CLASS_NOT_COPYABLE_EX(ReleaseStgMediumScope)
+ };
+
+ static const DWORD DataBlockToSTGMEDIUM_SupportedTymeds = TYMED_ISTREAM | TYMED_HGLOBAL;
+ static const DWORD ExtractDataObjectContent_SupportedTymeds = TYMED_ISTREAM | TYMED_HGLOBAL;
+
+ HRESULT DataBlockToSTGMEDIUM(const void * blockPtr, t_size blockSize, STGMEDIUM * medium, DWORD tymed, bool bHere) throw();
+
+ HGLOBAL HGlobalFromMemblock(const void * ptr,t_size size);
+
+ HRESULT ExtractDataObjectContent(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD aspect, LONG index, pfc::array_t<t_uint8> & out);
+ HRESULT ExtractDataObjectContent(pfc::com_ptr_t<IDataObject> obj, UINT format, pfc::array_t<t_uint8> & out);
+
+ HRESULT ExtractDataObjectContentTest(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD aspect, LONG index);
+ HRESULT ExtractDataObjectContentTest(pfc::com_ptr_t<IDataObject> obj, UINT format);
+
+ HRESULT ExtractDataObjectString(pfc::com_ptr_t<IDataObject> obj, pfc::string_base & out);
+ HRESULT SetDataObjectString(pfc::com_ptr_t<IDataObject> obj, const char * str);
+
+ HRESULT SetDataObjectContent(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD aspect, LONG index, const void * data, t_size dataSize);
+
+ HRESULT STGMEDIUMToDataBlock(const STGMEDIUM & med, pfc::array_t<t_uint8> & out);
+
+ HRESULT ExtractDataObjectDWORD(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD & val);
+ HRESULT SetDataObjectDWORD(pfc::com_ptr_t<IDataObject> obj, UINT format, DWORD val);
+
+ HRESULT PasteSucceeded(pfc::com_ptr_t<IDataObject> obj, DWORD effect);
+
+ class comparator_FORMATETC {
+ public:
+ static int compare(const FORMATETC & v1, const FORMATETC & v2) {
+ int val;
+ val = pfc::compare_t(v1.cfFormat,v2.cfFormat); if (val != 0) return val;
+ val = pfc::compare_t(v1.dwAspect,v2.dwAspect); if (val != 0) return val;
+ val = pfc::compare_t(v1.lindex, v2.lindex ); if (val != 0) return val;
+ return 0;
+ }
+ };
+
+ class CDataObjectBase : public IDataObject {
+ public:
+ COM_QI_SIMPLE(IDataObject)
+
+ HRESULT STDMETHODCALLTYPE GetData(FORMATETC * formatetc, STGMEDIUM * medium) {
+ return GetData_internal(formatetc,medium,false);
+ }
+
+ HRESULT STDMETHODCALLTYPE GetDataHere(FORMATETC * formatetc, STGMEDIUM * medium) {
+ return GetData_internal(formatetc,medium,true);
+ }
+
+ HRESULT STDMETHODCALLTYPE QueryGetData(FORMATETC * formatetc) {
+ if (formatetc == NULL) return E_INVALIDARG;
+
+ if ((DataBlockToSTGMEDIUM_SupportedTymeds & formatetc->tymed) == 0) return DV_E_TYMED;
+
+ try {
+ return RenderDataTest(formatetc->cfFormat,formatetc->dwAspect,formatetc->lindex);
+ } FB2K_COM_CATCH;
+ }
+
+
+ HRESULT STDMETHODCALLTYPE GetCanonicalFormatEtc(FORMATETC * in, FORMATETC * out) {
+ //check this again
+ if (in == NULL || out == NULL)
+ return E_INVALIDARG;
+ *out = *in;
+ return DATA_S_SAMEFORMATETC;
+ }
+
+ HRESULT STDMETHODCALLTYPE EnumFormatEtc(DWORD dwDirection,IEnumFORMATETC ** ppenumFormatetc) {
+ if (dwDirection == DATADIR_GET) {
+ if (ppenumFormatetc == NULL) return E_INVALIDARG;
+ return CreateIEnumFORMATETC(ppenumFormatetc);
+ } else if (dwDirection == DATADIR_SET) {
+ return E_NOTIMPL;
+ } else {
+ return E_INVALIDARG;
+ }
+ }
+
+ HRESULT STDMETHODCALLTYPE SetData(FORMATETC * pFormatetc, STGMEDIUM * pmedium, BOOL fRelease) {
+ try {
+ ReleaseStgMediumScope relScope(fRelease ? pmedium : NULL);
+ if (pFormatetc == NULL || pmedium == NULL) return E_INVALIDARG;
+
+ /*TCHAR buf[256];
+ if (GetClipboardFormatName(pFormatetc->cfFormat,buf,PFC_TABSIZE(buf)) > 0) {
+ buf[PFC_TABSIZE(buf)-1] = 0;
+ OutputDebugString(TEXT("SetData: ")); OutputDebugString(buf); OutputDebugString(TEXT("\n"));
+ } else {
+ OutputDebugString(TEXT("SetData: unknown clipboard format.\n"));
+ }*/
+
+ pfc::array_t<t_uint8> temp;
+ HRESULT state = STGMEDIUMToDataBlock(*pmedium,temp);
+ if (FAILED(state)) return state;
+ m_entries.set(*pFormatetc,temp);
+ return S_OK;
+ } FB2K_COM_CATCH;
+ }
+ HRESULT STDMETHODCALLTYPE DAdvise(FORMATETC * pFormatetc, DWORD advf, IAdviseSink * pAdvSink, DWORD * pdwConnection) {return OLE_E_ADVISENOTSUPPORTED;}
+ HRESULT STDMETHODCALLTYPE DUnadvise(DWORD dwConnection) {return OLE_E_ADVISENOTSUPPORTED;}
+ HRESULT STDMETHODCALLTYPE EnumDAdvise(IEnumSTATDATA ** ppenumAdvise) {return OLE_E_ADVISENOTSUPPORTED;}
+ protected:
+ virtual HRESULT RenderData(UINT format,DWORD aspect,LONG dataIndex,stream_writer_formatter<> & out) const {
+ FORMATETC fmt = {};
+ fmt.cfFormat = format; fmt.dwAspect = aspect; fmt.lindex = dataIndex;
+ const pfc::array_t<t_uint8> * entry = m_entries.query_ptr(fmt);
+ if (entry != NULL) {
+ out.write_raw(entry->get_ptr(), entry->get_size());
+ return S_OK;
+ }
+ return DV_E_FORMATETC;
+ }
+ virtual HRESULT RenderDataTest(UINT format,DWORD aspect, LONG dataIndex) const {
+ FORMATETC fmt = {};
+ fmt.cfFormat = format; fmt.dwAspect = aspect; fmt.lindex = dataIndex;
+ if (m_entries.have_item(fmt)) return S_OK;
+ return DV_E_FORMATETC;
+ }
+ typedef pfc::list_base_t<FORMATETC> TFormatList;
+
+ static void AddFormat(TFormatList & out,UINT code) {
+ FORMATETC fmt = {};
+ fmt.dwAspect = DVASPECT_CONTENT;
+ fmt.lindex = -1;
+ fmt.cfFormat = code;
+ for(t_size medWalk = 0; medWalk < 32; ++medWalk) {
+ const DWORD med = 1 << medWalk;
+ if ((DataBlockToSTGMEDIUM_SupportedTymeds & med) != 0) {
+ fmt.tymed = med;
+ out.add_item(fmt);
+ }
+ }
+ }
+
+ virtual void EnumFormats(TFormatList & out) const {
+ pfc::avltree_t<UINT> formats;
+ for(t_entries::const_iterator walk = m_entries.first(); walk.is_valid(); ++walk) {
+ formats.add_item( walk->m_key.cfFormat );
+ }
+ for(pfc::const_iterator<UINT> walk = formats.first(); walk.is_valid(); ++walk) {
+ AddFormat(out, *walk);
+ }
+ }
+ HRESULT CreateIEnumFORMATETC(IEnumFORMATETC ** outptr) const throw() {
+ try {
+ pfc::list_t<FORMATETC> out;
+ EnumFormats(out);
+ return SHCreateStdEnumFmtEtc((UINT)out.get_count(), out.get_ptr(), outptr);
+ } FB2K_COM_CATCH;
+ }
+ private:
+ HRESULT GetData_internal(FORMATETC * formatetc, STGMEDIUM * medium,bool bHere) {
+ if (formatetc == NULL || medium == NULL) return E_INVALIDARG;
+
+ try {
+ stream_writer_formatter_simple<> out;
+ HRESULT hr = RenderData(formatetc->cfFormat,formatetc->dwAspect,formatetc->lindex,out);
+ if (FAILED(hr)) return hr;
+ return DataBlockToSTGMEDIUM(out.m_buffer.get_ptr(),out.m_buffer.get_size(),medium,formatetc->tymed,bHere);
+ } FB2K_COM_CATCH;
+ }
+
+ typedef pfc::map_t<FORMATETC, pfc::array_t<t_uint8>, comparator_FORMATETC> t_entries;
+ t_entries m_entries;
+ };
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/ProfileCache.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/ProfileCache.h new file mode 100644 index 0000000..4425097 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/ProfileCache.h @@ -0,0 +1,44 @@ +namespace ProfileCache {
+ static file::ptr FetchFile(const char * context, const char * name, const char * webURL, t_filetimestamp acceptableAge, abort_callback & abort) {
+ const double timeoutVal = 5;
+
+ pfc::string_formatter path ( core_api::get_profile_path() );
+ path.fix_dir_separator('\\');
+ path << context;
+ try {
+ filesystem::g_create_directory(path, abort);
+ } catch(exception_io_already_exists) {}
+ path << "\\" << name;
+
+ bool fetch = false;
+ file::ptr fLocal;
+
+ try {
+ filesystem::g_open_timeout(fLocal, path, filesystem::open_mode_write_existing, timeoutVal, abort);
+ fetch = fLocal->get_timestamp(abort) < filetimestamp_from_system_timer() - acceptableAge;
+ } catch(exception_io_not_found) {
+ filesystem::g_open_timeout(fLocal, path, filesystem::open_mode_write_new, timeoutVal, abort);
+ fetch = true;
+ }
+ if (fetch) {
+ fLocal->resize(0, abort);
+ file::ptr fRemote;
+ try {
+ filesystem::g_open(fRemote, webURL, filesystem::open_mode_read, abort);
+ } catch(exception_io_not_found) {
+ fLocal.release();
+ try { filesystem::g_remove_timeout(path, timeoutVal, abort); } catch(...) {}
+ throw;
+ }
+ pfc::array_t<t_uint8> buffer; buffer.set_size(64*1024);
+ for(;;) {
+ t_size delta = buffer.get_size();
+ delta = fRemote->read(buffer.get_ptr(), delta, abort);
+ fLocal->write(buffer.get_ptr(), delta, abort);
+ if (delta < buffer.get_size()) break;
+ }
+ fLocal->seek(0, abort);
+ }
+ return fLocal;
+ }
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/ThreadUtils.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/ThreadUtils.h new file mode 100644 index 0000000..2b42213 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/ThreadUtils.h @@ -0,0 +1,262 @@ +namespace ThreadUtils {
+ static bool WaitAbortable(HANDLE ev, abort_callback & abort, DWORD timeout = INFINITE) {
+ const HANDLE handles[2] = {ev, abort.get_abort_event()};
+ SetLastError(0);
+ const DWORD status = WaitForMultipleObjects(2, handles, FALSE, timeout);
+ switch(status) {
+ case WAIT_TIMEOUT:
+ PFC_ASSERT( timeout != INFINITE );
+ return false;
+ case WAIT_OBJECT_0:
+ return true;
+ case WAIT_OBJECT_0 + 1:
+ throw exception_aborted();
+ case WAIT_FAILED:
+ WIN32_OP_FAIL();
+ default:
+ uBugCheck();
+ }
+ }
+
+ static void ProcessPendingMessages() {
+ MSG msg = {};
+ while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
+ DispatchMessage(&msg);
+ }
+ }
+
+
+ static void WaitAbortable_MsgLoop(HANDLE ev, abort_callback & abort) {
+ const HANDLE handles[2] = {ev, abort.get_abort_event()};
+ for(;;) {
+ SetLastError(0);
+ const DWORD status = MsgWaitForMultipleObjects(2, handles, FALSE, INFINITE, QS_ALLEVENTS);
+ switch(status) {
+ case WAIT_TIMEOUT:
+ PFC_ASSERT(!"How did we get here?");
+ uBugCheck();
+ case WAIT_OBJECT_0:
+ return;
+ case WAIT_OBJECT_0 + 1:
+ throw exception_aborted();
+ case WAIT_OBJECT_0 + 2:
+ ProcessPendingMessages();
+ break;
+ case WAIT_FAILED:
+ WIN32_OP_FAIL();
+ default:
+ uBugCheck();
+ }
+ }
+ }
+
+ static t_size MultiWaitAbortable_MsgLoop(const HANDLE * ev, t_size evCount, abort_callback & abort) {
+ pfc::array_t<HANDLE> handles; handles.set_size(evCount + 1);
+ handles[0] = abort.get_abort_event();
+ pfc::memcpy_t(handles.get_ptr() + 1, ev, evCount);
+ for(;;) {
+ SetLastError(0);
+ const DWORD status = MsgWaitForMultipleObjects(handles.get_count(), handles.get_ptr(), FALSE, INFINITE, QS_ALLEVENTS);
+ switch(status) {
+ case WAIT_TIMEOUT:
+ PFC_ASSERT(!"How did we get here?");
+ uBugCheck();
+ case WAIT_OBJECT_0:
+ throw exception_aborted();
+ case WAIT_FAILED:
+ WIN32_OP_FAIL();
+ default:
+ {
+ t_size index = (t_size)(status - (WAIT_OBJECT_0 + 1));
+ if (index == evCount) {
+ ProcessPendingMessages();
+ } else if (index < evCount) {
+ return index;
+ } else {
+ uBugCheck();
+ }
+ }
+ }
+ }
+ }
+
+ static void SleepAbortable_MsgLoop(abort_callback & abort, DWORD timeout /*must not be INFINITE*/) {
+ PFC_ASSERT( timeout != INFINITE );
+ const DWORD entry = GetTickCount();
+ const HANDLE handles[1] = {abort.get_abort_event()};
+ for(;;) {
+ const DWORD done = GetTickCount() - entry;
+ if (done >= timeout) return;
+ SetLastError(0);
+ const DWORD status = MsgWaitForMultipleObjects(1, handles, FALSE, timeout - done, QS_ALLEVENTS);
+ switch(status) {
+ case WAIT_TIMEOUT:
+ return;
+ case WAIT_OBJECT_0:
+ throw exception_aborted();
+ case WAIT_OBJECT_0 + 1:
+ ProcessPendingMessages();
+ default:
+ throw exception_win32(GetLastError());
+ }
+ }
+ }
+
+ static bool WaitAbortable_MsgLoop(HANDLE ev, abort_callback & abort, DWORD timeout /*must not be INFINITE*/) {
+ PFC_ASSERT( timeout != INFINITE );
+ const DWORD entry = GetTickCount();
+ const HANDLE handles[2] = {ev, abort.get_abort_event()};
+ for(;;) {
+ const DWORD done = GetTickCount() - entry;
+ if (done >= timeout) return false;
+ SetLastError(0);
+ const DWORD status = MsgWaitForMultipleObjects(2, handles, FALSE, timeout - done, QS_ALLEVENTS);
+ switch(status) {
+ case WAIT_TIMEOUT:
+ return false;
+ case WAIT_OBJECT_0:
+ return true;
+ case WAIT_OBJECT_0 + 1:
+ throw exception_aborted();
+ case WAIT_OBJECT_0 + 2:
+ ProcessPendingMessages();
+ break;
+ case WAIT_FAILED:
+ WIN32_OP_FAIL();
+ default:
+ uBugCheck();
+ }
+ }
+ }
+
+ template<typename TWhat>
+ class CObjectQueue {
+ public:
+ CObjectQueue() { m_event.create(true,false); }
+
+ template<typename TSource> void Add(const TSource & source) {
+ insync(m_sync);
+ m_content.add_item(source);
+ if (m_content.get_count() == 1) m_event.set_state(true);
+ }
+ template<typename TDestination> void Get(TDestination & out, abort_callback & abort) {
+ WaitAbortable(m_event.get(), abort);
+ _Get(out);
+ }
+
+ template<typename TDestination> void Get_MsgLoop(TDestination & out, abort_callback & abort) {
+ WaitAbortable_MsgLoop(m_event.get(), abort);
+ _Get(out);
+ }
+
+ private:
+ template<typename TDestination> void _Get(TDestination & out) {
+ insync(m_sync);
+ pfc::const_iterator<TWhat> iter = m_content.first();
+ pfc::dynamic_assert( iter.is_valid() );
+ out = *iter;
+ m_content.remove(iter);
+ if (m_content.get_count() == 0) m_event.set_state(false);
+ }
+ win32_event m_event;
+ critical_section m_sync;
+ pfc::chain_list_v2_t<TWhat> m_content;
+ };
+
+
+ template<typename TBase, bool processMsgs = false>
+ class CSingleThreadWrapper : protected pfc::thread {
+ private:
+ enum status {
+ success,
+ fail,
+ fail_io,
+ fail_io_data,
+ fail_abort,
+ };
+ protected:
+ class command {
+ protected:
+ command() : m_status(success), m_abort(), m_completionEvent() {}
+ virtual void executeImpl(TBase &) {}
+ virtual ~command() {}
+ public:
+ void execute(TBase & obj) {
+ try {
+ executeImpl(obj);
+ m_status = success;
+ } catch(exception_aborted const & e) {
+ m_status = fail_abort; m_statusMsg = e.what();
+ } catch(exception_io_data const & e) {
+ m_status = fail_io_data; m_statusMsg = e.what();
+ } catch(exception_io const & e) {
+ m_status = fail_io; m_statusMsg = e.what();
+ } catch(std::exception const & e) {
+ m_status = fail; m_statusMsg = e.what();
+ }
+ SetEvent(m_completionEvent);
+ }
+ void rethrow() const {
+ switch(m_status) {
+ case fail:
+ throw pfc::exception(m_statusMsg);
+ case fail_io:
+ throw exception_io(m_statusMsg);
+ case fail_io_data:
+ throw exception_io_data(m_statusMsg);
+ case fail_abort:
+ throw exception_aborted();
+ case success:
+ break;
+ default:
+ uBugCheck();
+ }
+ }
+ status m_status;
+ pfc::string8 m_statusMsg;
+ HANDLE m_completionEvent;
+ abort_callback * m_abort;
+ };
+
+ typedef pfc::rcptr_t<command> command_ptr;
+
+ CSingleThreadWrapper() {
+ m_completionEvent.create(true,false);
+ start();
+ }
+
+ ~CSingleThreadWrapper() {
+ m_threadAbort.abort();
+ waitTillDone();
+ }
+
+ void invokeCommand(command_ptr cmd, abort_callback & abort) {
+ abort.check();
+ m_completionEvent.set_state(false);
+ pfc::vartoggle_t<abort_callback*> abortToggle(cmd->m_abort, &abort);
+ pfc::vartoggle_t<HANDLE> eventToggle(cmd->m_completionEvent, m_completionEvent.get() );
+ m_commands.Add(cmd);
+ m_completionEvent.wait_for(-1);
+ //WaitAbortable(m_completionEvent.get(), abort);
+ cmd->rethrow();
+ }
+
+ private:
+ void threadProc() {
+ TRACK_CALL_TEXT("CSingleThreadWrapper entry");
+ try {
+ TBase instance;
+ for(;;) {
+ command_ptr cmd;
+ if (processMsgs) m_commands.Get_MsgLoop(cmd, m_threadAbort);
+ else m_commands.Get(cmd, m_threadAbort);
+ cmd->execute(instance);
+ }
+ } catch(...) {}
+ if (processMsgs) ProcessPendingMessages();
+ }
+ win32_event m_completionEvent;
+ CObjectQueue<command_ptr> m_commands;
+ abort_callback_impl m_threadAbort;
+ };
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/VisUtils.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/VisUtils.cpp new file mode 100644 index 0000000..069244d --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/VisUtils.cpp @@ -0,0 +1,36 @@ +#include "stdafx.h"
+
+namespace VisUtils {
+ void PrepareFFTChunk(audio_chunk const & source, audio_chunk & out, double centerOffset) {
+ const t_size channels = source.get_channel_count();
+ const t_uint32 sampleRate = source.get_sample_rate();
+ pfc::dynamic_assert( sampleRate > 0 );
+ out.set_channels(channels, source.get_channel_config());
+ out.set_sample_rate(sampleRate);
+ const t_size inSize = source.get_sample_count();
+ const t_size fftSize = MatchFFTSize(inSize);
+ out.set_sample_count(fftSize);
+ out.set_data_size(fftSize * channels);
+ if (fftSize >= inSize) { //rare case with *REALLY* small input
+ pfc::memcpy_t( out.get_data(), source.get_data(), inSize * channels );
+ pfc::memset_null_t( out.get_data() + inSize * channels, (fftSize - inSize) * channels );
+ } else { //inSize > fftSize, we're using a subset of source chunk for the job, pick a subset around centerOffset.
+ const double baseOffset = pfc::max_t<double>(0, centerOffset - 0.5 * (double)fftSize / (double)sampleRate);
+ const t_size baseSample = pfc::min_t<t_size>( (t_size) audio_math::time_to_samples(baseOffset, sampleRate), inSize - fftSize);
+ pfc::memcpy_t( out.get_data(), source.get_data() + baseSample * channels, fftSize * channels);
+ }
+ }
+
+ bool IsValidFFTSize(t_size p_size) {
+ return p_size >= 2 && (p_size & (p_size - 1)) == 0;
+ }
+
+ t_size MatchFFTSize(t_size samples) {
+ if (samples <= 2) return 2;
+ t_size mask = 1;
+ while(!IsValidFFTSize(samples)) {
+ samples &= ~mask; mask <<= 1;
+ }
+ return samples;
+ }
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/VisUtils.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/VisUtils.h new file mode 100644 index 0000000..973fb3f --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/VisUtils.h @@ -0,0 +1,8 @@ +namespace VisUtils {
+ //! Turns an arbitrary audio_chunk into a valid chunk to run FFT on, with proper sample count etc.
+ //! @param centerOffset Time offset (in seconds) inside the source chunk to center the output on, in case the FFT window is smaller than input data.
+ void PrepareFFTChunk(audio_chunk const & source, audio_chunk & out, double centerOffset);
+
+ bool IsValidFFTSize(t_size size);
+ t_size MatchFFTSize(t_size samples);
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/album_art_helpers.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/album_art_helpers.h new file mode 100644 index 0000000..e1e6693 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/album_art_helpers.h @@ -0,0 +1,109 @@ +//! Helper class to load album art from a separate thread (without lagging GUI). In most scenarios you will want to use CAlbumArtLoader instead of deriving from CAlbumArtLoaderBase, unless you want to additionally process the images as they are loaded.
+//! All methods meant to be called from the main thread.
+//! IMPORTANT: derived classes must call Abort() in their own destructor rather than relying on CAlbumArtLoaderBase destructor, since the thread calls virtual functions!
+class CAlbumArtLoaderBase : private CSimpleThread {
+public:
+ CAlbumArtLoaderBase() : m_api(static_api_ptr_t<album_art_manager>()->instantiate()) {}
+ ~CAlbumArtLoaderBase() {Abort();}
+
+ //! Requests the loader to process specific album art type. See album_art_ids namespace for defined types.
+ void AddType(const GUID & p_what) {
+ if (!HaveType(p_what)) {
+ Abort();
+ m_requestIds.add_item(p_what);
+ m_api->close();
+ }
+ }
+ bool HaveType(const GUID & p_what) const {
+ return m_requestIds.have_item(p_what);
+ }
+
+ void ResetTypes() {
+ Abort();
+ m_requestIds.remove_all();
+ m_api->close();
+ }
+
+ void Abort() {
+ AbortThread();
+ m_notify.release();
+ }
+
+ //! Completion notify code is 1 when content has changed, 0 when content is the same as before the request (like, advanced to another track with the same album art data).
+ void Request(const char * p_path,completion_notify_ptr p_notify = NULL) {
+ Abort();
+ m_requestPath = p_path;
+ m_notify = p_notify;
+ StartThread();
+ }
+
+ bool IsReady() const {return !IsWorking();}
+ bool IsWorking() const {return IsThreadActive();}
+
+protected:
+ virtual void OnContent(const GUID & p_what,album_art_data_ptr p_data,abort_callback & p_abort) {}
+ virtual void OnContentReset() {}
+
+private:
+ unsigned ThreadProc(abort_callback & p_abort) {
+ try {
+ return ProcessRequest(p_abort);
+ } catch(exception_aborted) {
+ return 0;
+ } catch(std::exception const & e) {
+ console::complain("Album Art loading failure", e);
+ return 0;
+ }
+ }
+
+ unsigned ProcessRequest(abort_callback & p_abort) {
+ if (m_api->open(m_requestPath,p_abort)) {
+ OnContentReset();
+ for(pfc::chain_list_v2_t<GUID>::const_iterator walk = m_requestIds.first(); walk.is_valid(); ++walk) {
+ album_art_data_ptr data;
+ try {
+ data = m_api->query(*walk,p_abort);
+ } catch(exception_io const & e) {
+ console::complain("Requested Album Art entry could not be retrieved", e);
+ continue;
+ }
+ pfc::dynamic_assert( data.is_valid() );
+ OnContent(*walk,data,p_abort);
+ }
+ return 1;
+ } else {
+ return 0;
+ }
+ }
+ void ThreadDone(unsigned p_code) {
+ //release our notify ptr before triggering callbacks, they might fire another query from inside that
+ completion_notify_ptr temp; temp << m_notify;
+ if (temp.is_valid()) temp->on_completion(p_code);
+ }
+
+ pfc::string8 m_requestPath;
+ pfc::chain_list_v2_t<GUID> m_requestIds;
+
+ completion_notify_ptr m_notify;
+
+ const album_art_manager_instance_ptr m_api;
+
+ PFC_CLASS_NOT_COPYABLE_EX(CAlbumArtLoaderBase);
+};
+
+class CAlbumArtLoader : public CAlbumArtLoaderBase {
+public:
+ ~CAlbumArtLoader() {Abort();}
+ bool Query(const GUID & p_what, album_art_data_ptr & p_data) const {
+ pfc::dynamic_assert( IsReady() );
+ return m_content.query(p_what,p_data);
+ }
+protected:
+ void OnContentReset() {
+ m_content.remove_all();
+ }
+ void OnContent(const GUID & p_what,album_art_data_ptr p_data,abort_callback & p_abort) {
+ m_content.set(p_what,p_data);
+ }
+ pfc::map_t<GUID,album_art_data_ptr> m_content;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/clipboard.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/clipboard.cpp new file mode 100644 index 0000000..928ce1e --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/clipboard.cpp @@ -0,0 +1,37 @@ +#include "stdafx.h"
+
+#ifdef UNICODE
+#define CF_TCHAR CF_UNICODETEXT
+#else
+#define CF_TCHAR CF_TEXT
+#endif
+
+namespace ClipboardHelper {
+ void SetRaw(UINT format,const void * data, t_size size) {
+ HANDLE buffer = GlobalAlloc(GMEM_DDESHARE,size);
+ if (buffer == NULL) throw std::bad_alloc();
+ try {
+ CGlobalLockScope lock(buffer);
+ PFC_ASSERT(lock.GetSize() == size);
+ memcpy(lock.GetPtr(),data,size);
+ } catch(...) {
+ GlobalFree(buffer); throw;
+ }
+
+ WIN32_OP(SetClipboardData(format,buffer) != NULL);
+ }
+ void SetString(const char * in) {
+ pfc::stringcvt::string_os_from_utf8 temp(in);
+ SetRaw(CF_TCHAR,temp.get_ptr(),(temp.length() + 1) * sizeof(TCHAR));
+ }
+
+ bool GetString(pfc::string_base & out) {
+ pfc::array_t<t_uint8> temp;
+ if (!GetRaw(CF_TCHAR,temp)) return false;
+ out = pfc::stringcvt::string_utf8_from_os(reinterpret_cast<const TCHAR*>(temp.get_ptr()),temp.get_size() / sizeof(TCHAR));
+ return true;
+ }
+ bool IsTextAvailable() {
+ return IsClipboardFormatAvailable(CF_TCHAR) == TRUE;
+ }
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/clipboard.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/clipboard.h new file mode 100644 index 0000000..f456ab1 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/clipboard.h @@ -0,0 +1,40 @@ +namespace ClipboardHelper {
+
+ class OpenScope {
+ public:
+ OpenScope() : m_open(false) {}
+ ~OpenScope() {Close();}
+ void Open(HWND p_owner) {
+ Close();
+ WIN32_OP(OpenClipboard(p_owner));
+ m_open = true;
+ }
+ void Close() {
+ if (m_open) {
+ m_open = false;
+ CloseClipboard();
+ }
+ }
+ private:
+ bool m_open;
+
+ PFC_CLASS_NOT_COPYABLE_EX(OpenScope)
+ };
+
+ void SetRaw(UINT format,const void * buffer, t_size size);
+ void SetString(const char * in);
+
+ bool GetString(pfc::string_base & out);
+
+ template<typename TArray>
+ bool GetRaw(UINT format,TArray & out) {
+ pfc::assert_byte_type<typename TArray::t_item>();
+ HANDLE data = GetClipboardData(format);
+ if (data == NULL) return false;
+ CGlobalLockScope lock(data);
+ out.set_size( lock.GetSize() );
+ memcpy(out.get_ptr(), lock.GetPtr(), lock.GetSize() );
+ return true;
+ }
+ bool IsTextAvailable();
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/create_directory_helper.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/create_directory_helper.cpp index e8734df..03cb01d 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/create_directory_helper.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/create_directory_helper.cpp @@ -1,5 +1,4 @@ #include "stdafx.h"
-#include "create_directory_helper.h"
namespace create_directory_helper
{
@@ -14,7 +13,7 @@ namespace create_directory_helper }
static bool is_valid_netpath_char(char p_char) {
- return pfc::char_is_ascii_alphanumeric(p_char) || p_char == '_' || p_char == '-';
+ return pfc::char_is_ascii_alphanumeric(p_char) || p_char == '_' || p_char == '-' || p_char == '.';
}
static bool test_localpath(const char * p_path) {
@@ -47,6 +46,8 @@ namespace create_directory_helper while(p_path[walk] == '\\') walk++;
while(p_path[walk] != 0 && p_path[walk] != '\\') walk++;
while(p_path[walk] == '\\') walk++;
+ while(p_path[walk] != 0 && p_path[walk] != '\\') walk++;
+ while(p_path[walk] == '\\') walk++;
create_path_internal(p_path,walk,p_abort);
} else {
throw exception_io("Could not create directory structure; unknown path format");
@@ -112,40 +113,53 @@ namespace create_directory_helper }
}
-namespace {
-
- class titleformat_text_filter_impl_createdir : public titleformat_text_filter
- {
- public:
- void on_new_field() {}
- void write(const GUID & p_inputtype,pfc::string_receiver & p_out,const char * p_data,t_size p_data_length)
- {//not "UTF-8 aware" but coded not to clash with UTF-8, since only filtered chars are lower ASCII
- if (p_inputtype == titleformat_inputtypes::meta) {
- t_size index = 0;
- t_size good_bytes = 0;
- while(index < p_data_length && p_data[index] != 0) {
- unsigned char c = (unsigned char)p_data[index];
- if (c < ' ' || c == '\\' || c=='/' || c=='|' || c==':')
- {
- if (good_bytes > 0) {p_out.add_string(p_data+index-good_bytes,good_bytes);good_bytes=0;}
- p_out.add_string("_",1);
- }
- else good_bytes++;
- index++;
- }
- if (good_bytes > 0) {p_out.add_string(p_data+index-good_bytes,good_bytes);good_bytes=0;}
- } else {
- p_out.add_string(p_data,p_data_length);
+pfc::string create_directory_helper::sanitize_formatted_path(pfc::stringp formatted, bool allowWC) {
+ pfc::string out;
+ t_size curSegBase = 0;
+ for(t_size walk = 0; ; ++walk) {
+ const char c = formatted[walk];
+ if (c == 0 || pfc::io::path::isSeparator(c)) {
+ if (curSegBase < walk) {
+ pfc::string seg( formatted + curSegBase, walk - curSegBase );
+ out = pfc::io::path::combine(out, pfc::io::path::validateFileName(seg, allowWC));
}
+ if (c == 0) break;
+ curSegBase = walk + 1;
}
- };
-}
+ }
+ return out;
+};
-void create_directory_helper::format_filename(const metadb_handle_ptr & handle,titleformat_hook * p_hook,const char * spec,pfc::string8 & out)
+void create_directory_helper::format_filename_ex(const metadb_handle_ptr & handle,titleformat_hook * p_hook,titleformat_object::ptr spec,const char * suffix, pfc::string_base & out) {
+ pfc::string_formatter formatted;
+ handle->format_title(p_hook,formatted,spec,&titleformat_text_filter_myimpl());
+ formatted << suffix;
+ out = sanitize_formatted_path(formatted).ptr();
+}
+void create_directory_helper::format_filename(const metadb_handle_ptr & handle,titleformat_hook * p_hook,titleformat_object::ptr spec,pfc::string_base & out) {
+ format_filename_ex(handle, p_hook, spec, "", out);
+}
+void create_directory_helper::format_filename(const metadb_handle_ptr & handle,titleformat_hook * p_hook,const char * spec,pfc::string_base & out)
{
- pfc::string8 temp;
- handle->format_title_legacy(p_hook,temp,spec,&titleformat_text_filter_impl_createdir());
- temp.replace_char('/','\\');
- temp.fix_filename_chars('_','\\');
- out = temp;
+ service_ptr_t<titleformat_object> script;
+ if (static_api_ptr_t<titleformat_compiler>()->compile(script,spec)) {
+ format_filename(handle, p_hook, script, out);
+ } else {
+ out.reset();
+ }
+}
+
+void create_directory_helper::titleformat_text_filter_myimpl::write(const GUID & p_inputType,pfc::string_receiver & p_out,const char * p_data,t_size p_dataLength) {
+ if (p_inputType == titleformat_inputtypes::meta) {
+ pfc::string_formatter temp;
+ for(t_size walk = 0; walk < p_dataLength; ++walk) {
+ char c = p_data[walk];
+ if (c == 0) break;
+ if (pfc::io::path::isSeparator(c)) {
+ c = '-';
+ }
+ temp.add_byte(c);
+ }
+ p_out.add_string(temp);
+ } else p_out.add_string(p_data,p_dataLength);
}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/create_directory_helper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/create_directory_helper.h index b156241..ba58111 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/create_directory_helper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/create_directory_helper.h @@ -4,7 +4,17 @@ namespace create_directory_helper {
void create_path(const char * p_path,abort_callback & p_abort);
void make_path(const char * parent,const char * filename,const char * extension,bool allow_new_dirs,pfc::string8 & out,bool b_really_create_dirs,abort_callback & p_dir_create_abort);
- void format_filename(const metadb_handle_ptr & handle,titleformat_hook * p_hook,const char * spec,pfc::string8 & out);
+ void format_filename(const metadb_handle_ptr & handle,titleformat_hook * p_hook,const char * spec,pfc::string_base & out);
+ void format_filename(const metadb_handle_ptr & handle,titleformat_hook * p_hook,titleformat_object::ptr spec,pfc::string_base & out);
+ void format_filename_ex(const metadb_handle_ptr & handle,titleformat_hook * p_hook,titleformat_object::ptr spec,const char * suffix, pfc::string_base & out);
+
+ pfc::string sanitize_formatted_path(pfc::stringp str, bool allowWC = false);
+
+ class titleformat_text_filter_myimpl : public titleformat_text_filter {
+ public:
+ void write(const GUID & p_inputType,pfc::string_receiver & p_out,const char * p_data,t_size p_dataLength);
+ };
+
};
#endif//_CREATE_DIRECTORY_HELPER_H_
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_creator.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_creator.cpp index 6b261ce..048700e 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_creator.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_creator.cpp @@ -10,7 +10,7 @@ namespace { {
p_source.meta_format(p_name,m_buffer);
m_buffer.replace_byte('\"','\'');
- uReplaceString(m_buffer,pfc::string8(m_buffer),infinite,"\x0d\x0a",2,"\\",1,false);
+ uReplaceString(m_buffer,pfc::string8(m_buffer),pfc_infinite,"\x0d\x0a",2,"\\",1,false);
if (!p_allow_space) m_buffer.replace_byte(' ','_');
m_buffer.replace_nontext_chars();
}
@@ -108,21 +108,21 @@ namespace cue_creator p_out << " TRACK " << pfc::format_int(iter->m_track_number,2) << " AUDIO" << g_eol;
- if (iter->m_infos.meta_find("title") != infinite)
+ if (iter->m_infos.meta_find("title") != pfc_infinite)
p_out << " TITLE \"" << format_meta(iter->m_infos,"title") << "\"" << g_eol;
- if (!artist_global && iter->m_infos.meta_find("artist") != infinite)
+ if (!artist_global && iter->m_infos.meta_find("artist") != pfc_infinite)
p_out << " PERFORMER \"" << format_meta(iter->m_infos,"artist") << "\"" << g_eol;
- if (!songwriter_global && iter->m_infos.meta_find("songwriter") != infinite) {
+ if (!songwriter_global && iter->m_infos.meta_find("songwriter") != pfc_infinite) {
p_out << " SONGWRITER \"" << format_meta(iter->m_infos,"songwriter") << "\"" << g_eol;
}
- if (iter->m_infos.meta_find("isrc") != infinite) {
+ if (iter->m_infos.meta_find("isrc") != pfc_infinite) {
p_out << " ISRC " << format_meta(iter->m_infos,"isrc") << g_eol;
}
- if (!date_global && iter->m_infos.meta_find("date") != infinite) {
+ if (!date_global && iter->m_infos.meta_find("date") != pfc_infinite) {
p_out << " REM DATE " << format_meta(iter->m_infos,"date") << g_eol;
}
@@ -166,6 +166,12 @@ namespace cue_creator m_index_list.reset();
m_index_list.m_positions[0] = m_index_list.m_positions[1] = p_time;
}
+ void t_entry::set_index01(double index0, double index1) {
+ PFC_ASSERT( index0 <= index1 );
+ m_index_list.reset();
+ m_index_list.m_positions[0] = index0;
+ m_index_list.m_positions[1] = index1;
+ }
}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_creator.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_creator.h index e05f415..235a530 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_creator.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_creator.h @@ -9,9 +9,10 @@ namespace cue_creator t_cuesheet_index_list m_index_list;
void set_simple_index(double p_time);
+ void set_index01(double index0, double index1);
};
- typedef pfc::chain_list_t<t_entry> t_entry_list;
+ typedef pfc::chain_list_v2_t<t_entry> t_entry_list;
- void create(pfc::string_formatter & p_out,const pfc::chain_list_t<t_entry> & p_list);
+ void create(pfc::string_formatter & p_out,const t_entry_list & p_list);
};
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser.cpp index 128df91..2630bbf 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser.cpp @@ -20,16 +20,16 @@ static bool is_linebreak(char c) static void validate_file_type(const char * p_type,t_size p_type_length) {
if (
//standard types
- stricmp_utf8_ex(p_type,p_type_length,"WAVE",infinite) != 0 &&
- stricmp_utf8_ex(p_type,p_type_length,"MP3",infinite) != 0 &&
- stricmp_utf8_ex(p_type,p_type_length,"AIFF",infinite) != 0 &&
+ stricmp_utf8_ex(p_type,p_type_length,"WAVE",pfc_infinite) != 0 &&
+ stricmp_utf8_ex(p_type,p_type_length,"MP3",pfc_infinite) != 0 &&
+ stricmp_utf8_ex(p_type,p_type_length,"AIFF",pfc_infinite) != 0 &&
//common user-entered types
- stricmp_utf8_ex(p_type,p_type_length,"APE",infinite) != 0 &&
- stricmp_utf8_ex(p_type,p_type_length,"FLAC",infinite) != 0 &&
- stricmp_utf8_ex(p_type,p_type_length,"WV",infinite) != 0 &&
- stricmp_utf8_ex(p_type,p_type_length,"WAVPACK",infinite) != 0
+ stricmp_utf8_ex(p_type,p_type_length,"APE",pfc_infinite) != 0 &&
+ stricmp_utf8_ex(p_type,p_type_length,"FLAC",pfc_infinite) != 0 &&
+ stricmp_utf8_ex(p_type,p_type_length,"WV",pfc_infinite) != 0 &&
+ stricmp_utf8_ex(p_type,p_type_length,"WAVPACK",pfc_infinite) != 0
)
- throw exception_cue(pfc::string_formatter() << "expected WAVE, MP3 or AIFF, got : \"" << pfc::string8(p_type,p_type_length) << "\"");
+ throw exception_cue(pfc::string_formatter() << "expected WAVE, MP3 or AIFF, got : \"" << pfc::string_part(p_type,p_type_length) << "\"");
}
namespace {
@@ -62,8 +62,8 @@ namespace { static bool is_known_meta(const char * p_name,t_size p_length)
{
static const char * metas[] = {"genre","date","discid","comment","replaygain_track_gain","replaygain_track_peak","replaygain_album_gain","replaygain_album_peak"};
- for(t_size n=0;n<tabsize(metas);n++) {
- if (!stricmp_utf8_ex(p_name,p_length,metas[n],infinite)) return true;
+ for(t_size n=0;n<PFC_TABSIZE(metas);n++) {
+ if (!stricmp_utf8_ex(p_name,p_length,metas[n],pfc_infinite)) return true;
}
return false;
}
@@ -97,23 +97,23 @@ namespace { }
void on_title(const char * p_title,t_size p_title_length)
{
- on_meta("title",infinite,p_title,p_title_length);
+ on_meta("title",pfc_infinite,p_title,p_title_length);
}
void on_songwriter(const char * p_songwriter,t_size p_songwriter_length) {
- on_meta("songwriter",infinite,p_songwriter,p_songwriter_length);
+ on_meta("songwriter",pfc_infinite,p_songwriter,p_songwriter_length);
}
void on_performer(const char * p_performer,t_size p_performer_length)
{
- on_meta("artist",infinite,p_performer,p_performer_length);
+ on_meta("artist",pfc_infinite,p_performer,p_performer_length);
}
void on_isrc(const char * p_isrc,t_size p_isrc_length)
{
- on_meta("isrc",infinite,p_isrc,p_isrc_length);
+ on_meta("isrc",pfc_infinite,p_isrc,p_isrc_length);
}
void on_catalog(const char * p_catalog,t_size p_catalog_length)
{
- on_meta("catalog",infinite,p_catalog,p_catalog_length);
+ on_meta("catalog",pfc_infinite,p_catalog,p_catalog_length);
}
void on_flags(const char * p_flags,t_size p_flags_length) {}
};
@@ -122,7 +122,7 @@ namespace { class cue_parser_callback_retrievelist : public cue_parser_callback
{
public:
- cue_parser_callback_retrievelist(pfc::chain_list_t<cue_parser::cue_entry> & p_out) : m_out(p_out), m_track(0), m_pregap(0), m_index0_set(false), m_index1_set(false)
+ cue_parser_callback_retrievelist(cue_parser::t_cue_entry_list & p_out) : m_out(p_out), m_track(0), m_pregap(0), m_index0_set(false), m_index1_set(false)
{
}
@@ -134,7 +134,7 @@ namespace { void on_track(unsigned p_index,const char * p_type,t_size p_type_length)
{
- if (stricmp_utf8_ex(p_type,p_type_length,"audio",infinite)) throw exception_cue("only tracks of type AUDIO supported",0);
+ if (stricmp_utf8_ex(p_type,p_type_length,"audio",pfc_infinite)) throw exception_cue("only tracks of type AUDIO supported",0);
//if (p_index != m_track + 1) throw exception_cue("cuesheet tracks out of order");
if (m_track != 0) finalize_track();
if (m_file.is_empty()) throw exception_cue("declaring a track with no file set",0);
@@ -181,7 +181,7 @@ namespace { if (!m_index0_set) m_index_list.m_positions[0] = m_index_list.m_positions[1] - m_pregap;
if (!m_index_list.is_valid()) throw exception_cue("invalid index list");
- pfc::chain_list_t<cue_parser::cue_entry>::iterator iter;
+ cue_parser::t_cue_entry_list::iterator iter;
iter = m_out.insert_last();
if (m_trackfile.is_empty()) throw exception_cue("track has no file assigned",0);
iter->m_file = m_trackfile;
@@ -199,7 +199,7 @@ namespace { double m_pregap;
unsigned m_track;
pfc::string8 m_file,m_trackfile;
- pfc::chain_list_t<cue_parser::cue_entry> & m_out;
+ cue_parser::t_cue_entry_list & m_out;
};
class cue_parser_callback_retrieveinfo : public cue_parser_callback_meta
@@ -214,7 +214,7 @@ namespace { if (p_index == 0) throw exception_cue("invalid TRACK index",0);
if (p_index == m_wanted_track)
{
- if (stricmp_utf8_ex(p_type,p_type_length,"audio",infinite)) throw exception_cue("only tracks of type AUDIO supported",0);
+ if (stricmp_utf8_ex(p_type,p_type_length,"audio",pfc_infinite)) throw exception_cue("only tracks of type AUDIO supported",0);
}
m_track = p_index;
m_totaltracks++;
@@ -242,12 +242,12 @@ namespace { if (m_track == 0) //globals
{
//convert global title to album
- if (!stricmp_utf8_ex(p_name,p_name_length,"title",infinite))
+ if (!stricmp_utf8_ex(p_name,p_name_length,"title",pfc_infinite))
{
p_name = "album";
p_name_length = 5;
}
- else if (!stricmp_utf8_ex(p_name,p_name_length,"artist",infinite))
+ else if (!stricmp_utf8_ex(p_name,p_name_length,"artist",pfc_infinite))
{
m_album_artist.set_string(p_value,p_value_length);
}
@@ -258,7 +258,7 @@ namespace { {
if (!m_is_va)
{
- if (!stricmp_utf8_ex(p_name,p_name_length,"artist",infinite))
+ if (!stricmp_utf8_ex(p_name,p_name_length,"artist",pfc_infinite))
{
if (!m_album_artist.is_empty())
{
@@ -333,7 +333,7 @@ namespace { struct t_meta_entry {
pfc::string8 m_name,m_value;
};
- typedef pfc::chain_list_t<t_meta_entry> t_meta_list;
+ typedef pfc::chain_list_v2_t<t_meta_entry> t_meta_list;
static t_meta_list::const_iterator find_first_field(t_meta_list const & p_list,const char * p_field)
{
@@ -381,7 +381,7 @@ static void g_parse_cue_line(const char * p_line,t_size p_line_length,cue_parser {
t_size ptr = 0;
while(ptr < p_line_length && !is_spacing(p_line[ptr])) ptr++;
- if (!stricmp_utf8_ex(p_line,ptr,"file",infinite))
+ if (!stricmp_utf8_ex(p_line,ptr,"file",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
t_size file_base,file_length, type_base,type_length;
@@ -413,7 +413,7 @@ static void g_parse_cue_line(const char * p_line,t_size p_line_length,cue_parser p_callback.on_file(p_line + file_base, file_length, p_line + type_base, type_length);
}
- else if (!stricmp_utf8_ex(p_line,ptr,"track",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"track",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
@@ -437,7 +437,7 @@ static void g_parse_cue_line(const char * p_line,t_size p_line_length,cue_parser p_callback.on_track(track,p_line + type_base, type_length);
}
- else if (!stricmp_utf8_ex(p_line,ptr,"index",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"index",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
@@ -471,7 +471,7 @@ static void g_parse_cue_line(const char * p_line,t_size p_line_length,cue_parser p_callback.on_index(index,time);
}
- else if (!stricmp_utf8_ex(p_line,ptr,"pregap",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"pregap",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
@@ -494,7 +494,7 @@ static void g_parse_cue_line(const char * p_line,t_size p_line_length,cue_parser p_callback.on_pregap(time);
}
- else if (!stricmp_utf8_ex(p_line,ptr,"title",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"title",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
if (ptr == p_line_length) throw exception_cue("invalid TITLE syntax",0);
@@ -515,7 +515,7 @@ static void g_parse_cue_line(const char * p_line,t_size p_line_length,cue_parser p_callback.on_title(p_line+ptr,p_line_length-ptr);
}
}
- else if (!stricmp_utf8_ex(p_line,ptr,"performer",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"performer",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
if (ptr == p_line_length) throw exception_cue("invalid PERFORMER syntax",0);
@@ -536,7 +536,7 @@ static void g_parse_cue_line(const char * p_line,t_size p_line_length,cue_parser p_callback.on_performer(p_line+ptr,p_line_length-ptr);
}
}
- else if (!stricmp_utf8_ex(p_line,ptr,"songwriter",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"songwriter",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
if (ptr == p_line_length) throw exception_cue("invalid SONGWRITER syntax",0);
@@ -557,35 +557,35 @@ static void g_parse_cue_line(const char * p_line,t_size p_line_length,cue_parser p_callback.on_songwriter(p_line+ptr,p_line_length-ptr);
}
}
- else if (!stricmp_utf8_ex(p_line,ptr,"isrc",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"isrc",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
t_size length = p_line_length - ptr;
if (length == 0) throw exception_cue("invalid ISRC syntax",0);
p_callback.on_isrc(p_line+ptr,length);
}
- else if (!stricmp_utf8_ex(p_line,ptr,"catalog",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"catalog",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
t_size length = p_line_length - ptr;
if (length == 0) throw exception_cue("invalid CATALOG syntax",0);
p_callback.on_catalog(p_line+ptr,length);
}
- else if (!stricmp_utf8_ex(p_line,ptr,"flags",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"flags",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
if (ptr < p_line_length)
p_callback.on_flags(p_line + ptr, p_line_length - ptr);
}
- else if (!stricmp_utf8_ex(p_line,ptr,"rem",infinite))
+ else if (!stricmp_utf8_ex(p_line,ptr,"rem",pfc_infinite))
{
while(ptr < p_line_length && is_spacing(p_line[ptr])) ptr++;
if (ptr < p_line_length)
p_callback.on_comment(p_line + ptr, p_line_length - ptr);
}
- else if (!stricmp_utf8_ex(p_line,ptr,"postgap",infinite)) {
+ else if (!stricmp_utf8_ex(p_line,ptr,"postgap",pfc_infinite)) {
throw exception_cue("POSTGAP is not supported",0);
- } else if (!stricmp_utf8_ex(p_line,ptr,"cdtextfile",infinite)) {
+ } else if (!stricmp_utf8_ex(p_line,ptr,"cdtextfile",pfc_infinite)) {
//do nothing
}
else throw exception_cue("unknown cuesheet item",0);
@@ -618,7 +618,7 @@ static void g_parse_cue(const char * p_cuesheet,cue_parser_callback & p_callback }
}
-void cue_parser::parse(const char *p_cuesheet,pfc::chain_list_t<cue_entry> & p_out) {
+void cue_parser::parse(const char *p_cuesheet,t_cue_entry_list & p_out) {
try {
cue_parser_callback_retrievelist callback(p_out);
g_parse_cue(p_cuesheet,callback);
@@ -670,7 +670,7 @@ namespace { void on_track(unsigned p_index,const char * p_type,t_size p_type_length)
{
- if (stricmp_utf8_ex(p_type,p_type_length,"audio",infinite)) throw exception_cue("only tracks of type AUDIO supported",0);
+ if (stricmp_utf8_ex(p_type,p_type_length,"audio",pfc_infinite)) throw exception_cue("only tracks of type AUDIO supported",0);
//if (p_index != m_track + 1) throw exception_cue("cuesheet tracks out of order",0);
if (m_track != 0) finalize_track();
if (m_file.is_empty()) throw exception_cue("declaring a track with no file set",0);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser.h index b8121fe..9b254ad 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser.h @@ -15,9 +15,9 @@ namespace file_info_record_helper { public:
__file_info_record__meta__enumerator(file_info & p_out) : m_out(p_out) {}
template<typename t_value> void operator() (const char * p_name,const t_value & p_value) {
- t_size index = infinite;
+ t_size index = ~0;
for(typename t_value::const_iterator iter = p_value.first(); iter.is_valid(); ++iter) {
- if (index == infinite) index = m_out.__meta_add_unsafe(p_name,*iter);
+ if (index == ~0) index = m_out.__meta_add_unsafe(p_name,*iter);
else m_out.meta_add_value(index,*iter);
}
}
@@ -27,7 +27,7 @@ namespace file_info_record_helper { class file_info_record {
public:
- typedef pfc::chain_list_t<pfc::string8> t_meta_value;
+ typedef pfc::chain_list_v2_t<pfc::string8> t_meta_value;
typedef pfc::map_t<pfc::string8,t_meta_value,file_info::field_name_comparator> t_meta_map;
typedef pfc::map_t<pfc::string8,pfc::string8,file_info::field_name_comparator> t_info_map;
@@ -56,7 +56,7 @@ namespace file_info_record_helper { t_meta_value & entry = m_meta.find_or_add(p_info.meta_enum_name(metawalk));
entry.remove_all();
for(t_size valuewalk = 0; valuewalk < valuecount; ++valuewalk) {
- entry.insert_last(p_info.meta_enum_value(metawalk,valuewalk));
+ entry.add_item(p_info.meta_enum_value(metawalk,valuewalk));
}
}
}
@@ -89,7 +89,7 @@ namespace file_info_record_helper { t_meta_value & val = m_meta.find_or_add(p_name);
val.remove_all();
for(t_size walk = 0; walk < count; ++walk) {
- val.insert_last(p_info.meta_enum_value(p_index,walk));
+ val.add_item(p_info.meta_enum_value(p_index,walk));
}
}
}
@@ -144,11 +144,13 @@ namespace cue_parser t_cuesheet_index_list m_indexes;
};
+ typedef pfc::chain_list_v2_t<cue_entry> t_cue_entry_list;
+
PFC_DECLARE_EXCEPTION(exception_bad_cuesheet,exception_io_data,"Invalid cuesheet");
//! Throws exception_bad_cuesheet on failure.
- void parse(const char *p_cuesheet,pfc::chain_list_t<cue_entry> & p_out);
+ void parse(const char *p_cuesheet,t_cue_entry_list & p_out);
//! Throws exception_bad_cuesheet on failure.
void parse_info(const char *p_cuesheet,file_info & p_info,unsigned p_index);
//! Throws exception_bad_cuesheet on failure.
@@ -184,18 +186,20 @@ namespace cue_parser - class __decoder_wrapper {
+ class _decoder_wrapper {
public:
virtual bool run(audio_chunk & p_chunk,abort_callback & p_abort) = 0;
virtual void seek(double p_seconds,abort_callback & p_abort) = 0;
virtual bool get_dynamic_info(file_info & p_out, double & p_timestamp_delta) = 0;
virtual bool get_dynamic_info_track(file_info & p_out, double & p_timestamp_delta) = 0;
virtual void on_idle(abort_callback & p_abort) = 0;
- virtual ~__decoder_wrapper() {}
+ virtual bool run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) = 0;
+ virtual void set_logger(event_logger::ptr ptr) = 0;
+ virtual ~_decoder_wrapper() {}
};
template<typename t_input>
- class __decoder_wrapper_simple : public __decoder_wrapper {
+ class _decoder_wrapper_simple : public _decoder_wrapper {
public:
void initialize(service_ptr_t<file> p_filehint,const char * p_path,unsigned p_flags,abort_callback & p_abort) {
m_input.open(p_filehint,p_path,input_open_decode,p_abort);
@@ -206,11 +210,13 @@ namespace cue_parser bool get_dynamic_info(file_info & p_out, double & p_timestamp_delta) {return m_input.decode_get_dynamic_info(p_out,p_timestamp_delta);}
bool get_dynamic_info_track(file_info & p_out, double & p_timestamp_delta) {return m_input.decode_get_dynamic_info_track(p_out,p_timestamp_delta);}
void on_idle(abort_callback & p_abort) {m_input.decode_on_idle(p_abort);}
+ bool run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) {return m_input.decode_run_raw(p_chunk, p_raw, p_abort);}
+ void set_logger(event_logger::ptr ptr) {m_input.set_logger(ptr);}
private:
t_input m_input;
};
- class __decoder_wrapper_cue : public __decoder_wrapper {
+ class _decoder_wrapper_cue : public _decoder_wrapper {
public:
void open(service_ptr_t<file> p_filehint,const playable_location & p_location,unsigned p_flags,abort_callback & p_abort,double p_start,double p_length) {
m_input.open(p_filehint,p_location,p_flags,p_abort,p_start,p_length);
@@ -220,7 +226,8 @@ namespace cue_parser bool get_dynamic_info(file_info & p_out, double & p_timestamp_delta) {return m_input.get_dynamic_info(p_out,p_timestamp_delta);}
bool get_dynamic_info_track(file_info & p_out, double & p_timestamp_delta) {return m_input.get_dynamic_info_track(p_out,p_timestamp_delta);}
void on_idle(abort_callback & p_abort) {m_input.on_idle(p_abort);}
-
+ bool run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) {return m_input.run_raw(p_chunk, p_raw, p_abort);}
+ void set_logger(event_logger::ptr ptr) {m_input.set_logger(ptr);}
private:
input_helper_cue m_input;
};
@@ -267,7 +274,7 @@ namespace cue_parser void decode_initialize(t_uint32 p_subsong,unsigned p_flags,abort_callback & p_abort) {
m_decoder.release();
if (p_subsong == 0) {
- pfc::rcptr_t<__decoder_wrapper_simple<t_base> > temp;
+ pfc::rcptr_t<_decoder_wrapper_simple<t_base> > temp;
temp.new_t();
m_file->reopen(p_abort);
temp->initialize(m_file,m_path,p_flags,p_abort);
@@ -276,12 +283,13 @@ namespace cue_parser double start,length;
m_meta.query_track_offsets(p_subsong,start,length);
- pfc::rcptr_t<__decoder_wrapper_cue> temp;
+ pfc::rcptr_t<_decoder_wrapper_cue> temp;
temp.new_t();
m_file->reopen(p_abort);
temp->open(m_file,make_playable_location(m_path,0),p_flags & ~input_flag_no_seeking,p_abort,start,length);
m_decoder = temp;
}
+ if (m_logger.is_valid()) m_decoder->set_logger(m_logger);
}
bool decode_run(audio_chunk & p_chunk,abort_callback & p_abort) {
@@ -293,6 +301,14 @@ namespace cue_parser }
bool decode_can_seek() {return true;}
+
+ bool decode_run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) {
+ return m_decoder->run_raw(p_chunk, p_raw, p_abort);
+ }
+ void set_logger(event_logger::ptr ptr) {
+ m_logger = ptr;
+ if (m_decoder.is_valid()) m_decoder->set_logger(ptr);
+ }
bool decode_get_dynamic_info(file_info & p_out, double & p_timestamp_delta) {
return m_decoder->get_dynamic_info(p_out,p_timestamp_delta);
@@ -325,7 +341,7 @@ namespace cue_parser t_base instance;
m_file->reopen(p_abort);
instance.open(m_file,m_path,input_open_info_write,p_abort);
- instance.retag(pfc::safe_cast<const file_info&>(info),p_abort);
+ instance.retag(pfc::implicit_cast<const file_info&>(info),p_abort);
info.reset();
instance.get_info(info,p_abort);
m_meta.set_tag(info);
@@ -336,27 +352,25 @@ namespace cue_parser inline static bool g_is_our_path(const char * p_path,const char * p_extension) {return t_base::g_is_our_path(p_path,p_extension);}
private:
- pfc::rcptr_t<__decoder_wrapper> m_decoder;
+ pfc::rcptr_t<_decoder_wrapper> m_decoder;
file_info_impl m_info;
pfc::string8 m_path;
service_ptr_t<file> m_file;
embeddedcue_metadata_manager m_meta;
+ event_logger::ptr m_logger;
};
template<typename I>
class chapterizer_impl_t : public chapterizer
{
public:
- bool is_our_file(const char * p_path,abort_callback & p_abort)
- {
- return I::g_is_our_path(p_path,pfc::string_extension(p_path));
+ bool is_our_path(const char * p_path) {
+ return I::g_is_our_path(p_path, pfc::string_extension(p_path));
}
void set_chapters(const char * p_path,chapter_list const & p_list,abort_callback & p_abort) {
-
-
input_wrapper_cue_t<I> instance;
instance.open(0,p_path,input_open_info_write,p_abort);
@@ -370,8 +384,8 @@ namespace cue_parser {
cue_creator::t_entry_list entries;
t_size n, m = p_list.get_chapter_count();
-
- double offset_acc = 0;
+ const double pregap = p_list.get_pregap();
+ double offset_acc = pregap;
for(n=0;n<m;n++)
{
cue_creator::t_entry_list::iterator entry;
@@ -380,6 +394,7 @@ namespace cue_parser entry->m_file = "CDImage.wav";
entry->m_track_number = (unsigned)(n+1);
entry->m_index_list.from_infos(entry->m_infos,offset_acc);
+ if (n == 0) entry->m_index_list.m_positions[0] = 0;
offset_acc += entry->m_infos.get_length();
}
cue_creator::create(cuesheet,entries);
@@ -400,10 +415,7 @@ namespace cue_parser void get_chapters(const char * p_path,chapter_list & p_list,abort_callback & p_abort) {
input_wrapper_cue_t<I> instance;
-
-
instance.open(0,p_path,input_open_info_read,p_abort);
-
const t_uint32 total = instance.get_subsong_count();
p_list.set_chapter_count(total);
@@ -413,6 +425,10 @@ namespace cue_parser p_list.set_info(walk,info);
}
}
+
+ bool supports_pregaps() {
+ return true;
+ }
};
};
@@ -420,9 +436,9 @@ namespace cue_parser //! Wrapper template for generating embedded cuesheet enabled inputs.
//! t_input_impl is a singletrack input implementation (see input_singletrack_impl for method declarations).
//! To declare an embedded cuesheet enabled input, change your input declaration from input_singletrack_factory_t<myinput> to input_cuesheet_factory_t<myinput>.
-template<typename t_input_impl>
+template<typename t_input_impl, unsigned t_flags = 0>
class input_cuesheet_factory_t {
public:
- input_factory_t<cue_parser::input_wrapper_cue_t<t_input_impl> > m_input_factory;
+ input_factory_ex_t<cue_parser::input_wrapper_cue_t<t_input_impl>,t_flags,input_decoder_v2> m_input_factory;
service_factory_single_t<cue_parser::chapterizer_impl_t<t_input_impl> > m_chapterizer_factory;
};
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser_embedding.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser_embedding.cpp index 6af2eb0..0a26346 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser_embedding.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cue_parser_embedding.cpp @@ -13,7 +13,7 @@ static bool is_reserved_meta_entry(const char * p_name) { static bool is_global_meta_entry(const char * p_name) {
static const char header[] = "cue_track";
- return pfc::stricmp_ascii_ex(p_name,strlen(header),header,infinite) != 0;
+ return pfc::stricmp_ascii_ex(p_name,strlen(header),header,~0) != 0;
}
static bool is_allowed_field(const char * p_name) {
return !is_reserved_meta_entry(p_name) && is_global_meta_entry(p_name);
@@ -65,7 +65,7 @@ namespace { if (m_value == NULL) {
m_value = val;
} else {
- if (pfc::comparator_chainlist<pfc::comparator_strcmp>::compare(*m_value,*val) != 0) {
+ if (pfc::comparator_list<pfc::comparator_strcmp>::compare(*m_value,*val) != 0) {
m_state = false; return;
}
}
@@ -124,7 +124,7 @@ namespace { static void strip_redundant_track_meta(unsigned p_tracknumber,const file_info & p_cueinfo,file_info_record::t_meta_map & p_meta,const char * p_metaname) {
t_size metaindex = p_cueinfo.meta_find(p_metaname);
- if (metaindex == infinite) return;
+ if (metaindex == ~0) return;
pfc::string_formatter namelocal;
build_cue_meta_name(p_metaname,p_tracknumber,namelocal);
{
@@ -200,7 +200,7 @@ void embeddedcue_metadata_manager::get_tag(file_info & p_info) const { static bool resolve_cue_meta_name(const char * p_name,pfc::string_base & p_outname,unsigned & p_tracknumber) {
//"cue_trackNN_fieldname"
static const char header[] = "cue_track";
- if (pfc::stricmp_ascii_ex(p_name,strlen(header),header,infinite) != 0) return false;
+ if (pfc::stricmp_ascii_ex(p_name,strlen(header),header,~0) != 0) return false;
p_name += strlen(header);
if (!pfc::char_is_numeric(p_name[0]) || !pfc::char_is_numeric(p_name[1]) || p_name[2] != '_') return false;
unsigned tracknumber = pfc::atoui_ex(p_name,2);
@@ -246,14 +246,14 @@ void embeddedcue_metadata_manager::set_tag(file_info const & p_info) { //processing order
//1. cuesheet content
//2. overwrite with global metadata from the tag
- //2. overwrite with local metadata from the tag
+ //3. overwrite with local metadata from the tag
{
cue_creator::t_entry_list entries;
try {
cue_parser::parse_full(cuesheet,entries);
} catch(exception_io_data const & e) {
- console::formatter() << e;
+ console::complain("Attempting to embed an invalid cuesheet", e.what());
return;
}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cuesheet_index_list.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cuesheet_index_list.cpp index 1b8b9b0..dfabf18 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cuesheet_index_list.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cuesheet_index_list.cpp @@ -1,8 +1,5 @@ #include "stdafx.h"
-static bool is_numeric(char c) {return c>='0' && c<='9';}
-
-
bool t_cuesheet_index_list::is_valid() const {
if (m_positions[1] < m_positions[0]) return false;
for(t_size n = 2; n < count && m_positions[n] > 0; n++) {
@@ -30,7 +27,7 @@ void t_cuesheet_index_list::to_infos(file_info & p_out) const for(unsigned n=2;n<count;n++)
{
char namebuffer[16];
- sprintf(namebuffer,"index %02u",n);
+ sprintf_s(namebuffer,"index %02u",n);
double position = m_positions[n] - base;
if (position > 0)
p_out.info_set(namebuffer,cuesheet_format_index_time(position));
@@ -59,7 +56,7 @@ bool t_cuesheet_index_list::from_infos(file_info const & p_in,double p_base) for(unsigned n=2;n<count;n++)
{
char namebuffer[16];
- sprintf(namebuffer,"index %02u",n);
+ sprintf_s(namebuffer,"index %02u",n);
double temp;
if (parse_value(p_in.info_get(namebuffer),temp)) {
m_positions[n] = temp + p_base; found = true;
@@ -70,69 +67,6 @@ bool t_cuesheet_index_list::from_infos(file_info const & p_in,double p_base) return found;
}
-cuesheet_format_index_time::cuesheet_format_index_time(double p_time)
-{
- t_uint64 ticks = audio_math::time_to_samples(p_time,75);
- t_uint64 seconds = ticks / 75; ticks %= 75;
- t_uint64 minutes = seconds / 60; seconds %= 60;
- m_buffer << pfc::format_uint(minutes,2) << ":" << pfc::format_uint(seconds,2) << ":" << pfc::format_uint(ticks,2);
-}
-
-double cuesheet_parse_index_time_e(const char * p_string,t_size p_length)
-{
- return (double) cuesheet_parse_index_time_ticks_e(p_string,p_length) / 75.0;
-}
-
-unsigned cuesheet_parse_index_time_ticks_e(const char * p_string,t_size p_length)
-{
- p_length = pfc::strlen_max(p_string,p_length);
- t_size ptr = 0;
- t_size splitmarks[2];
- t_size splitptr = 0;
- for(ptr=0;ptr<p_length;ptr++)
- {
- if (p_string[ptr] == ':')
- {
- if (splitptr >= 2) throw std::exception("invalid INDEX time syntax",0);
- splitmarks[splitptr++] = ptr;
- }
- else if (!is_numeric(p_string[ptr])) throw std::exception("invalid INDEX time syntax",0);
- }
-
- t_size minutes_base = 0, minutes_length = 0, seconds_base = 0, seconds_length = 0, frames_base = 0, frames_length = 0;
-
- switch(splitptr)
- {
- case 0:
- frames_base = 0;
- frames_length = p_length;
- break;
- case 1:
- seconds_base = 0;
- seconds_length = splitmarks[0];
- frames_base = splitmarks[0] + 1;
- frames_length = p_length - frames_base;
- break;
- case 2:
- minutes_base = 0;
- minutes_length = splitmarks[0];
- seconds_base = splitmarks[0] + 1;
- seconds_length = splitmarks[1] - seconds_base;
- frames_base = splitmarks[1] + 1;
- frames_length = p_length - frames_base;
- break;
- }
-
- unsigned ret = 0;
-
- if (frames_length > 0) ret += pfc::atoui_ex(p_string + frames_base,frames_length);
- if (seconds_length > 0) ret += 75 * pfc::atoui_ex(p_string + seconds_base,seconds_length);
- if (minutes_length > 0) ret += 60 * 75 * pfc::atoui_ex(p_string + minutes_base,minutes_length);
-
- return ret;
-}
-
-
bool t_cuesheet_index_list::is_empty() const {
for(unsigned n=0;n<count;n++) if (m_positions[n] != m_positions[1]) return false;
return true;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cuesheet_index_list.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cuesheet_index_list.h index 06512a6..099ce80 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cuesheet_index_list.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/cuesheet_index_list.h @@ -1,8 +1,7 @@ struct t_cuesheet_index_list
{
enum {count = 100};
- inline t_cuesheet_index_list() {reset();}
- inline t_cuesheet_index_list(const t_cuesheet_index_list & p_source) {*this=p_source;}
+ t_cuesheet_index_list() {reset();}
void reset() {for(unsigned n=0;n<count;n++) m_positions[n]=0;}
void to_infos(file_info & p_out) const;
@@ -18,14 +17,3 @@ struct t_cuesheet_index_list bool is_valid() const;
};
-unsigned cuesheet_parse_index_time_ticks_e(const char * p_string,t_size p_length);
-double cuesheet_parse_index_time_e(const char * p_string,t_size p_length);
-
-class cuesheet_format_index_time
-{
-public:
- cuesheet_format_index_time(double p_time);
- inline operator const char*() const {return m_buffer;}
-private:
- pfc::string_formatter m_buffer;
-};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dialog_resize_helper.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dialog_resize_helper.cpp index 7fad82e..02574f7 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dialog_resize_helper.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dialog_resize_helper.cpp @@ -1,93 +1,17 @@ #include "stdafx.h"
#include "dialog_resize_helper.h"
-void resize::calc_xy(HWND wnd,UINT id,RECT &r,RECT & o)
-{
- RECT c;
- GetClientRect(wnd,&c);
- SetWindowPos(GetDlgItem(wnd,id),0,0,0,
- r.right-r.left+c.right-o.right,
- r.bottom-r.top+c.bottom-o.bottom,
- SWP_NOMOVE|SWP_NOZORDER);
-}
-
-void resize::calc_move_xy(HWND wnd,UINT id,RECT &r,RECT & o)
-{
- RECT c;
- GetClientRect(wnd,&c);
- SetWindowPos(GetDlgItem(wnd,id),0,
- c.right-o.right+r.left,
- c.bottom-o.bottom+r.top,
- 0,0,SWP_NOSIZE|SWP_NOZORDER);
-}
-
-void resize::calc_move_x(HWND wnd,UINT id,RECT &r,RECT & o)
-{
- RECT c;
- GetClientRect(wnd,&c);
- SetWindowPos(GetDlgItem(wnd,id),0,
- c.right-o.right+r.left,
- r.top,
- 0,0,SWP_NOSIZE|SWP_NOZORDER);
-}
-
-void resize::calc_move_x_size_y(HWND wnd,UINT id,RECT &r,RECT & o)
-{
- RECT c;
- GetClientRect(wnd,&c);
- SetWindowPos(GetDlgItem(wnd,id),0,
- c.right-o.right+r.left,
- r.top,
- r.right-r.left,
- r.bottom-r.top+c.bottom-o.bottom,
- SWP_NOZORDER);
-}
-
-void resize::calc_move_y(HWND wnd,UINT id,RECT &r,RECT & o)
-{
- RECT c;
- GetClientRect(wnd,&c);
- SetWindowPos(GetDlgItem(wnd,id),0,
- r.left,
- c.bottom-o.bottom+r.top,
- 0,0,SWP_NOSIZE|SWP_NOZORDER);
-}
-
-void resize::calc_x(HWND wnd,UINT id,RECT &r,RECT & o)
-{
- RECT c;
- GetClientRect(wnd,&c);
- SetWindowPos(GetDlgItem(wnd,id),0,0,0,
- r.right-r.left+c.right-o.right,
- r.bottom-r.top,
- SWP_NOMOVE|SWP_NOZORDER);
-}
-
-void GetChildRect(HWND wnd,UINT id,RECT* child)
+BOOL GetChildWindowRect(HWND wnd,UINT id,RECT* child)
{
RECT temp;
- GetWindowRect(GetDlgItem(wnd,id),&temp);
- MapWindowPoints(0,wnd,(POINT*)&temp,2);
+ HWND wndChild = GetDlgItem(wnd, id);
+ if (wndChild == NULL) return FALSE;
+ if (!GetWindowRect(wndChild,&temp)) return FALSE;
+ if (!MapWindowPoints(0,wnd,(POINT*)&temp,2)) return FALSE;
*child = temp;
+ return TRUE;
}
-/*
-class dialog_resize_helper
-{
- struct entry { RECT orig; UINT id; UINT flags };
- mem_block_list<entry> data;
- RECT orig_client;
- HWND parent;
-public:
- enum {
- X_MOVE = 1, X_SIZE = 2, Y_MOVE = 4, Y_SIZE = 8
- };
- void set_parent(HWND wnd);
- void add_item(UINT id,UINT flags);
- void reset();
-};
-*/
-
void dialog_resize_helper::set_parent(HWND wnd)
{
reset();
@@ -115,24 +39,25 @@ void dialog_resize_helper::on_wm_size() RECT cur_client;
GetClientRect(parent,&cur_client);
HWND wnd = GetDlgItem(parent,e.id);
-
- unsigned dest_x = orig_rect.left, dest_y = orig_rect.top,
- dest_cx = orig_rect.right - orig_rect.left, dest_cy = orig_rect.bottom - orig_rect.top;
-
- int delta_x = cur_client.right - orig_client.right,
- delta_y = cur_client.bottom - orig_client.bottom;
-
- if (e.flags & X_MOVE)
- dest_x += delta_x;
- else if (e.flags & X_SIZE)
- dest_cx += delta_x;
-
- if (e.flags & Y_MOVE)
- dest_y += delta_y;
- else if (e.flags & Y_SIZE)
- dest_cy += delta_y;
-
- DeferWindowPos(hWinPosInfo, wnd,0,dest_x,dest_y,dest_cx,dest_cy,SWP_NOZORDER);
+ if (wnd != NULL) {
+ unsigned dest_x = orig_rect.left, dest_y = orig_rect.top,
+ dest_cx = orig_rect.right - orig_rect.left, dest_cy = orig_rect.bottom - orig_rect.top;
+
+ int delta_x = cur_client.right - orig_client.right,
+ delta_y = cur_client.bottom - orig_client.bottom;
+
+ if (e.flags & X_MOVE)
+ dest_x += delta_x;
+ else if (e.flags & X_SIZE)
+ dest_cx += delta_x;
+
+ if (e.flags & Y_MOVE)
+ dest_y += delta_y;
+ else if (e.flags & Y_SIZE)
+ dest_cy += delta_y;
+
+ DeferWindowPos(hWinPosInfo, wnd,0,dest_x,dest_y,dest_cx,dest_cy,SWP_NOZORDER);
+ }
}
if (sizegrip != 0)
{
@@ -142,29 +67,33 @@ void dialog_resize_helper::on_wm_size() DeferWindowPos(hWinPosInfo, sizegrip, NULL, rc.right - (rc_grip.right - rc_grip.left), rc.bottom - (rc_grip.bottom - rc_grip.top), 0, 0, SWP_NOZORDER | SWP_NOSIZE);
}
EndDeferWindowPos(hWinPosInfo);
- RedrawWindow(parent,0,0,RDW_INVALIDATE);
+ //RedrawWindow(parent,0,0,RDW_INVALIDATE);
}
}
+bool dialog_resize_helper::process_message(HWND wnd,UINT msg,WPARAM wp,LPARAM lp) {
+ LRESULT result = 0;
+ if (!ProcessWindowMessage(wnd,msg,wp,lp,result)) return false;
+ SetWindowLongPtr(wnd,DWLP_MSGRESULT,result);
+ return true;
+}
-bool dialog_resize_helper::process_message(HWND wnd,UINT msg,WPARAM wp,LPARAM lp)
-{
- switch(msg)
- {
+BOOL dialog_resize_helper::ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult) {
+ switch(uMsg) {
case WM_SIZE:
on_wm_size();
- return true;
+ return FALSE;
case WM_GETMINMAXINFO:
{
RECT r;
- LPMINMAXINFO info = (LPMINMAXINFO) lp;
- DWORD dwStyle = GetWindowLong(wnd, GWL_STYLE);
- DWORD dwExStyle = GetWindowLong(wnd, GWL_EXSTYLE);
+ LPMINMAXINFO info = (LPMINMAXINFO) lParam;
+ DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);
+ DWORD dwExStyle = GetWindowLong(hWnd, GWL_EXSTYLE);
if (max_x && max_y)
{
r.left = 0; r.right = max_x;
r.top = 0; r.bottom = max_y;
- MapDialogRect(wnd,&r);
+ MapDialogRect(hWnd,&r);
AdjustWindowRectEx(&r, dwStyle, FALSE, dwExStyle);
info->ptMaxTrackSize.x = r.right - r.left;
info->ptMaxTrackSize.y = r.bottom - r.top;
@@ -173,28 +102,29 @@ bool dialog_resize_helper::process_message(HWND wnd,UINT msg,WPARAM wp,LPARAM lp {
r.left = 0; r.right = min_x;
r.top = 0; r.bottom = min_y;
- MapDialogRect(wnd,&r);
+ MapDialogRect(hWnd,&r);
AdjustWindowRectEx(&r, dwStyle, FALSE, dwExStyle);
info->ptMinTrackSize.x = r.right - r.left;
info->ptMinTrackSize.y = r.bottom - r.top;
}
}
- return true;
+ lResult = 0;
+ return TRUE;
case WM_INITDIALOG:
- set_parent(wnd);
+ set_parent(hWnd);
{
- unsigned n;
- for(n=0;n<m_table.get_size();n++)
- {
- GetChildRect(parent,m_table[n].id,&rects[n]);
+ t_size n;
+ for(n=0;n<m_table.get_size();n++) {
+ GetChildWindowRect(parent,m_table[n].id,&rects[n]);
}
}
- break;
+ return FALSE;
case WM_DESTROY:
reset();
- break;
+ return FALSE;
+ default:
+ return FALSE;
}
- return false;
}
void dialog_resize_helper::add_sizegrip()
@@ -227,4 +157,4 @@ dialog_resize_helper::dialog_resize_helper(const param * src,unsigned count,unsi dialog_resize_helper::~dialog_resize_helper()
{
-}
\ No newline at end of file +}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dialog_resize_helper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dialog_resize_helper.h index cdd5c54..346ca76 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dialog_resize_helper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dialog_resize_helper.h @@ -1,20 +1,7 @@ #ifndef _DIALOG_RESIZE_HELPER_H_
#define _DIALOG_RESIZE_HELPER_H_
-
-//deprecated, use dialog_resize_helper class
-namespace resize
-{
- void calc_xy(HWND wnd,UINT id,RECT &r,RECT & o);
- void calc_move_xy(HWND wnd,UINT id,RECT &r,RECT & o);
- void calc_move_x(HWND wnd,UINT id,RECT &r,RECT & o);
- void calc_move_x_size_y(HWND wnd,UINT id,RECT &r,RECT & o);
- void calc_move_y(HWND wnd,UINT id,RECT &r,RECT & o);
- void calc_x(HWND wnd,UINT id,RECT &r,RECT & o);
-};
-
-void GetChildRect(HWND wnd,UINT id,RECT* child);
-
+BOOL GetChildWindowRect(HWND wnd,UINT id,RECT* child);
class dialog_resize_helper
{
@@ -33,10 +20,8 @@ private: pfc::array_t<param> m_table;
void set_parent(HWND wnd);
- void add_item(UINT id,UINT flags);
void reset();
void on_wm_size();
- void add_items(const param* table,unsigned count);
public:
inline void set_min_size(unsigned x,unsigned y) {min_x = x; min_y = y;}
inline void set_max_size(unsigned x,unsigned y) {max_x = x; max_y = y;}
@@ -47,12 +32,17 @@ public: XY_MOVE = X_MOVE|Y_MOVE, XY_SIZE = X_SIZE|Y_SIZE,
X_MOVE_Y_SIZE = X_MOVE|Y_SIZE, X_SIZE_Y_MOVE = X_SIZE|Y_MOVE,
};
+ //the old way
bool process_message(HWND wnd,UINT msg,WPARAM wp,LPARAM lp);
+ //ATL-compatible
+ BOOL ProcessWindowMessage(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT& lResult);
+ dialog_resize_helper(const param * src,unsigned count,unsigned p_min_x,unsigned p_min_y,unsigned p_max_x,unsigned p_max_y);
- explicit dialog_resize_helper(const param * src,unsigned count,unsigned p_min_x,unsigned p_min_y,unsigned p_max_x,unsigned p_max_y);
~dialog_resize_helper();
+
+ PFC_CLASS_NOT_COPYABLE_EX(dialog_resize_helper);
};
-#endif
\ No newline at end of file +#endif
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dropdown_helper.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dropdown_helper.cpp index 70f51f2..7434470 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dropdown_helper.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dropdown_helper.cpp @@ -2,9 +2,10 @@ #include "dropdown_helper.h"
-void cfg_dropdown_history::build_list(pfc::ptr_list_t<char> & out)
+void _cfg_dropdown_history_base::build_list(pfc::ptr_list_t<char> & out)
{
- const char * src = data;
+ pfc::string8 temp; get_state(temp);
+ const char * src = temp;
while(*src)
{
int ptr = 0;
@@ -18,7 +19,7 @@ void cfg_dropdown_history::build_list(pfc::ptr_list_t<char> & out) }
}
-void cfg_dropdown_history::parse_list(const pfc::ptr_list_t<char> & src)
+void _cfg_dropdown_history_base::parse_list(const pfc::ptr_list_t<char> & src)
{
t_size n;
pfc::string8_fastalloc temp;
@@ -27,7 +28,7 @@ void cfg_dropdown_history::parse_list(const pfc::ptr_list_t<char> & src) temp.add_string(src[n]);
temp.add_char(separator);
}
- data = temp;
+ set_state(temp);
}
static void g_setup_dropdown_fromlist(HWND wnd,const pfc::ptr_list_t<char> & list)
@@ -39,7 +40,7 @@ static void g_setup_dropdown_fromlist(HWND wnd,const pfc::ptr_list_t<char> & lis }
}
-void cfg_dropdown_history::setup_dropdown(HWND wnd)
+void _cfg_dropdown_history_base::setup_dropdown(HWND wnd)
{
pfc::ptr_list_t<char> list;
build_list(list);
@@ -47,9 +48,9 @@ void cfg_dropdown_history::setup_dropdown(HWND wnd) list.free_all();
}
-void cfg_dropdown_history::add_item(const char * item)
+bool _cfg_dropdown_history_base::add_item(const char * item)
{
- if (!item || !*item) return;
+ if (!item || !*item) return false;
pfc::string8 meh;
if (strchr(item,separator))
{
@@ -72,16 +73,24 @@ void cfg_dropdown_history::add_item(const char * item) if (!found)
{
- while(list.get_count() > max) list.delete_by_idx(list.get_count()-1);
- list.insert_item(strdup(item),0);
+ while(list.get_count() > m_max) list.delete_by_idx(list.get_count()-1);
+ list.insert_item(_strdup(item),0);
}
parse_list(list);
list.free_all();
+ return found;
}
-bool cfg_dropdown_history::is_empty()
+bool _cfg_dropdown_history_base::add_item(const char *item, HWND combobox) {
+ const bool state = add_item(item);
+ if (state) uSendMessageText(combobox, CB_ADDSTRING, 0, item);
+ return state;
+}
+
+bool _cfg_dropdown_history_base::is_empty()
{
- const char * src = data;
+ pfc::string8 temp; get_state(temp);
+ const char * src = temp;
while(*src)
{
if (*src!=separator) return false;
@@ -90,63 +99,62 @@ bool cfg_dropdown_history::is_empty() return true;
}
-void cfg_dropdown_history::on_context(HWND wnd,LPARAM coords)
-{
- int coords_x = (short)LOWORD(coords), coords_y = (short)HIWORD(coords);
- if (coords_x == -1 && coords_y == -1)
- {
- RECT asdf;
- GetWindowRect(wnd,&asdf);
- coords_x = (asdf.left + asdf.right) / 2;
- coords_y = (asdf.top + asdf.bottom) / 2;
- }
- enum {ID_ERASE_ALL = 1, ID_ERASE_ONE };
- HMENU menu = CreatePopupMenu();
- uAppendMenu(menu,MF_STRING,ID_ERASE_ALL,"Wipe history");
- {
- pfc::string8 tempvalue;
- uGetWindowText(wnd,tempvalue);
- if (!tempvalue.is_empty())
- uAppendMenu(menu,MF_STRING,ID_ERASE_ONE,"Remove this history item");
- }
- int cmd = TrackPopupMenu(menu,TPM_RIGHTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD,coords_x,coords_y,0,wnd,0);
- DestroyMenu(menu);
- switch(cmd)
- {
- case ID_ERASE_ALL:
+bool _cfg_dropdown_history_base::on_context(HWND wnd,LPARAM coords) {
+ try {
+ int coords_x = (short)LOWORD(coords), coords_y = (short)HIWORD(coords);
+ if (coords_x == -1 && coords_y == -1)
{
- data = "";
- pfc::string8 value;//preserve old value while wiping dropdown list
- uGetWindowText(wnd,value);
- uSendMessage(wnd,CB_RESETCONTENT,0,0);
- uSetWindowText(wnd,value);
+ RECT asdf;
+ GetWindowRect(wnd,&asdf);
+ coords_x = (asdf.left + asdf.right) / 2;
+ coords_y = (asdf.top + asdf.bottom) / 2;
}
- break;
- case ID_ERASE_ONE:
+ enum {ID_ERASE_ALL = 1, ID_ERASE_ONE };
+ HMENU menu = CreatePopupMenu();
+ uAppendMenu(menu,MF_STRING,ID_ERASE_ALL,"Wipe history");
{
- pfc::string8 value;
- uGetWindowText(wnd,value);
-
- pfc::ptr_list_t<char> list;
- t_size n,m;
- bool found;
- build_list(list);
- m = list.get_count();
- found = false;
- for(n=0;n<m;n++)
+ pfc::string8 tempvalue;
+ uGetWindowText(wnd,tempvalue);
+ if (!tempvalue.is_empty())
+ uAppendMenu(menu,MF_STRING,ID_ERASE_ONE,"Remove this history item");
+ }
+ int cmd = TrackPopupMenu(menu,TPM_RIGHTBUTTON|TPM_NONOTIFY|TPM_RETURNCMD,coords_x,coords_y,0,wnd,0);
+ DestroyMenu(menu);
+ switch(cmd)
+ {
+ case ID_ERASE_ALL:
+ {
+ set_state("");
+ pfc::string8 value;//preserve old value while wiping dropdown list
+ uGetWindowText(wnd,value);
+ uSendMessage(wnd,CB_RESETCONTENT,0,0);
+ uSetWindowText(wnd,value);
+ return true;
+ }
+ case ID_ERASE_ONE:
{
- if (!strcmp(value,list[n]))
+ pfc::string8 value;
+ uGetWindowText(wnd,value);
+
+ pfc::ptr_list_t<char> list;
+ build_list(list);
+ bool found = false;
+ for(t_size n=0;n<list.get_size();n++)
{
- free(list[n]);
- list.remove_by_idx(n);
- found = true;
- break;
+ if (!strcmp(value,list[n]))
+ {
+ free(list[n]);
+ list.remove_by_idx(n);
+ found = true;
+ break;
+ }
}
+ if (found) parse_list(list);
+ g_setup_dropdown_fromlist(wnd,list);
+ list.free_all();
+ return found;
}
- if (found) parse_list(list);
- g_setup_dropdown_fromlist(wnd,list);
- list.free_all();
}
- break;
- }
-}
\ No newline at end of file + } catch(...) {}
+ return false;
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dropdown_helper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dropdown_helper.h index 35b0dfa..910d17b 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dropdown_helper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/dropdown_helper.h @@ -1,22 +1,54 @@ #ifndef _DROPDOWN_HELPER_H_
#define _DROPDOWN_HELPER_H_
-
-class cfg_dropdown_history
+class _cfg_dropdown_history_base
{
- enum {separator = '\n'};
- cfg_string data;
- unsigned max;
+ const unsigned m_max;
void build_list(pfc::ptr_list_t<char> & out);
void parse_list(const pfc::ptr_list_t<char> & src);
public:
- cfg_dropdown_history(const GUID & p_guid,unsigned p_max = 10,const char * init_vals = "") : data(p_guid,init_vals) {max = p_max;}
+ enum {separator = '\n'};
+ virtual void set_state(const char * val) = 0;
+ virtual void get_state(pfc::string_base & out) const = 0;
+ _cfg_dropdown_history_base(unsigned p_max) : m_max(p_max) {}
+ void on_init(HWND ctrl, const char * initVal) {
+ add_item(initVal); setup_dropdown(ctrl); uSetWindowText(ctrl, initVal);
+ }
void setup_dropdown(HWND wnd);
void setup_dropdown(HWND wnd,UINT id) {setup_dropdown(GetDlgItem(wnd,id));}
- void add_item(const char * item);
+ bool add_item(const char * item); //returns true when the content has changed, false when not (the item was already on the list)
+ bool add_item(const char * item, HWND combobox); //immediately adds the item to the combobox
bool is_empty();
- void on_context(HWND wnd,LPARAM coords);
+ bool on_context(HWND wnd,LPARAM coords); //returns true when the content has changed
+};
+
+class cfg_dropdown_history : public _cfg_dropdown_history_base {
+public:
+ cfg_dropdown_history(const GUID & p_guid,unsigned p_max = 10,const char * init_vals = "") : _cfg_dropdown_history_base(p_max), m_state(p_guid, init_vals) {}
+ void set_state(const char * val) {m_state = val;}
+ void get_state(pfc::string_base & out) const {out = m_state;}
+private:
+ cfg_string m_state;
+};
+
+class cfg_dropdown_history_mt : public _cfg_dropdown_history_base {
+public:
+ cfg_dropdown_history_mt(const GUID & p_guid,unsigned p_max = 10,const char * init_vals = "") : _cfg_dropdown_history_base(p_max), m_state(p_guid, init_vals) {}
+ void set_state(const char * val) {m_state.set(val);}
+ void get_state(pfc::string_base & out) const {m_state.get(out);}
+private:
+ cfg_string_mt m_state;
};
+// ATL-compatible message map entry macro for installing dropdown list context menus.
+#define DROPDOWN_HISTORY_HANDLER(ctrlID,var) \
+ if(uMsg == WM_CONTEXTMENU) { \
+ const HWND source = (HWND) wParam; \
+ if (source != NULL && source == CWindow(hWnd).GetDlgItem(ctrlID)) { \
+ var.on_context(source,lParam); \
+ lResult = 0; \
+ return TRUE; \
+ } \
+ }
-#endif //_DROPDOWN_HELPER_H_
\ No newline at end of file +#endif //_DROPDOWN_HELPER_H_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_cached.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_cached.h index 75330fc..dc6206e 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_cached.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_cached.h @@ -1,13 +1,17 @@ -template<unsigned blocksize>
class file_cached : public file {
public:
- static void g_create(service_ptr_t<file> & p_out,service_ptr_t<file> p_base,abort_callback & p_abort) {
- service_ptr_t<file_cached<blocksize> > temp;
- temp = new service_impl_t<file_cached<blocksize> >();
+ static file::ptr g_create(service_ptr_t<file> p_base,abort_callback & p_abort, t_size blockSize) {
+ service_ptr_t<file_cached> temp = new service_impl_t<file_cached>(blockSize);
temp->initialize(p_base,p_abort);
- p_out = temp.get_ptr();
+ return temp;
+ }
+ static void g_create(service_ptr_t<file> & p_out,service_ptr_t<file> p_base,abort_callback & p_abort, t_size blockSize) {
+ p_out = g_create(p_base, p_abort, blockSize);
+ }
+protected:
+ file_cached(t_size blocksize) {
+ m_buffer.set_size(blocksize);
}
-private:
void initialize(service_ptr_t<file> p_base,abort_callback & p_abort) {
m_base = p_base;
m_position = 0;
@@ -33,15 +37,15 @@ public: if (m_position >= m_buffer_position && m_position < m_buffer_position + m_buffer_status) {
t_size delta = pfc::min_t<t_size>((t_size)(m_buffer_position + m_buffer_status - m_position),p_bytes - done);
t_size bufptr = (t_size)(m_position - m_buffer_position);
- memcpy(outptr+done,m_buffer+bufptr,delta);
+ memcpy(outptr+done,m_buffer.get_ptr()+bufptr,delta);
done += delta;
m_position += delta;
- if (m_buffer_status != sizeof(m_buffer) && done < p_bytes) break;//EOF before m_size is hit
+ if (m_buffer_status != m_buffer.get_size() && done < p_bytes) break;//EOF before m_size is hit
} else {
- m_buffer_position = m_position - m_position % blocksize;
+ m_buffer_position = m_position - m_position % m_buffer.get_size();
adjust_position(m_buffer_position,p_abort);
- m_buffer_status = m_base->read(m_buffer,sizeof(m_buffer),p_abort);
+ m_buffer_status = m_base->read(m_buffer.get_ptr(),m_buffer.get_size(),p_abort);
m_position_base += m_buffer_status;
if (m_buffer_status <= (t_size)(m_position - m_buffer_position)) break;
@@ -111,5 +115,5 @@ private: bool m_can_seek;
t_filesize m_buffer_position;
t_size m_buffer_status;
- t_uint8 m_buffer[blocksize];
-};
\ No newline at end of file + pfc::array_t<t_uint8> m_buffer;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_info_const_impl.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_info_const_impl.cpp index 5ae4386..41e2e15 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_info_const_impl.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_info_const_impl.cpp @@ -1,45 +1,27 @@ #include "stdafx.h"
-static const char * const standard_fieldnames[] =
-{
- "artist","ARTIST","Artist",
- "album","ALBUM","Album",
- "tracknumber","TRACKNUMBER","Tracknumber",
- "totaltracks","TOTALTRACKS","Totaltracks",
- "genre","GENRE","Genre",
- "title","TITLE","Title",
- "comment","COMMENT","Comment",
- "date","DATE","Date",
- "discnumber","DISCNUMBER","Discnumber"
+// presorted - do not change without a proper strcmp resort
+static const char * const standard_fieldnames[] = {
+ "ALBUM","ALBUM ARTIST","ARTIST","Album","Album Artist","Artist","COMMENT","Comment","DATE","DISCNUMBER","Date",
+ "Discnumber","GENRE","Genre","TITLE","TOTALTRACKS","TRACKNUMBER","Title","TotalTracks","Totaltracks","TrackNumber",
+ "Tracknumber","album","album artist","artist","comment","date","discnumber","genre","title","totaltracks","tracknumber",
};
-static const char * const standard_infonames[] =
-{
- "bitspersample", "channels", "bitrate", "codec", "codec_profile","tool","tagtype", "samplerate"
+// presorted - do not change without a proper strcmp resort
+static const char * const standard_infonames[] = {
+ "bitrate","bitspersample","channels","codec","codec_profile","encoding","samplerate","tagtype","tool",
};
-static const char * optimize_fieldname(const char * p_string)
-{
- for(t_size n=0;n<tabsize(standard_fieldnames);n++)
- {
- const char * stdstring = standard_fieldnames[n];
- if (/*p_string[0] == stdstring[0] && */strcmp(p_string,stdstring) == 0) {
- return stdstring;
- }
- }
- return NULL;
+static const char * optimize_fieldname(const char * p_string) {
+ t_size index;
+ if (!pfc::binarySearch<pfc::comparator_strcmp>::run(standard_fieldnames,0,PFC_TABSIZE(standard_fieldnames),p_string,index)) return NULL;
+ return standard_fieldnames[index];
}
-static const char * optimize_infoname(const char * p_string)
-{
- for(t_size n=0;n<tabsize(standard_infonames);n++)
- {
- const char * stdstring = standard_infonames[n];
- if (/*p_string[0] == stdstring[0] && */strcmp(p_string,stdstring) == 0) {
- return stdstring;
- }
- }
- return NULL;
+static const char * optimize_infoname(const char * p_string) {
+ t_size index;
+ if (!pfc::binarySearch<pfc::comparator_strcmp>::run(standard_infonames,0,PFC_TABSIZE(standard_infonames),p_string,index)) return NULL;
+ return standard_infonames[index];
}
/*
@@ -86,7 +68,7 @@ namespace { file_info_const_impl::t_index * m_hintmap;
};
- class bsearch_callback_hintmap_impl : public pfc::bsearch_callback
+ class bsearch_callback_hintmap_impl// : public pfc::bsearch_callback
{
public:
bsearch_callback_hintmap_impl(
@@ -98,9 +80,9 @@ namespace { {
}
- int test(t_size p_index) const
+ inline int test(t_size p_index) const
{
- return pfc::stricmp_ascii_ex(m_meta[m_hintmap[p_index]].m_name,infinite,m_name,m_name_length);
+ return pfc::stricmp_ascii_ex(m_meta[m_hintmap[p_index]].m_name,~0,m_name,m_name_length);
}
private:
@@ -260,8 +242,8 @@ t_size file_info_const_impl::meta_find_ex(const char * p_name,t_size p_name_leng {
#ifdef __file_info_const_impl_have_hintmap__
if (m_hintmap != NULL) {
- t_size result = infinite;
- if (!pfc::bsearch(m_meta_count,bsearch_callback_hintmap_impl(m_meta,m_hintmap,p_name,p_name_length),result)) return infinite;
+ t_size result = ~0;
+ if (!pfc::bsearch_inline_t(m_meta_count,bsearch_callback_hintmap_impl(m_meta,m_hintmap,p_name,p_name_length),result)) return ~0;
else return m_hintmap[result];
} else {
return file_info::meta_find_ex(p_name,p_name_length);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_info_const_impl.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_info_const_impl.h index a267aeb..59ddf35 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_info_const_impl.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_info_const_impl.h @@ -29,22 +29,22 @@ public: replaygain_info get_replaygain() const {return m_replaygain;}
private:
- void set_length(double p_length) {throw pfc::exception_bug_check();}
+ void set_length(double p_length) {uBugCheck();}
- t_size meta_set_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {throw pfc::exception_bug_check();}
- void meta_insert_value_ex(t_size p_index,t_size p_value_index,const char * p_value,t_size p_value_length) {throw pfc::exception_bug_check();}
- void meta_remove_mask(const bit_array & p_mask) {throw pfc::exception_bug_check();}
- void meta_reorder(const t_size * p_order) {throw pfc::exception_bug_check();}
- void meta_remove_values(t_size p_index,const bit_array & p_mask) {throw pfc::exception_bug_check();}
- void meta_modify_value_ex(t_size p_index,t_size p_value_index,const char * p_value,t_size p_value_length) {throw pfc::exception_bug_check();}
+ t_size meta_set_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {uBugCheck();}
+ void meta_insert_value_ex(t_size p_index,t_size p_value_index,const char * p_value,t_size p_value_length) {uBugCheck();}
+ void meta_remove_mask(const bit_array & p_mask) {uBugCheck();}
+ void meta_reorder(const t_size * p_order) {uBugCheck();}
+ void meta_remove_values(t_size p_index,const bit_array & p_mask) {uBugCheck();}
+ void meta_modify_value_ex(t_size p_index,t_size p_value_index,const char * p_value,t_size p_value_length) {uBugCheck();}
- t_size info_set_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {throw pfc::exception_bug_check();}
- void info_remove_mask(const bit_array & p_mask) {throw pfc::exception_bug_check();}
+ t_size info_set_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {uBugCheck();}
+ void info_remove_mask(const bit_array & p_mask) {uBugCheck();}
- void set_replaygain(const replaygain_info & p_info) {throw pfc::exception_bug_check();}
+ void set_replaygain(const replaygain_info & p_info) {uBugCheck();}
- t_size meta_set_nocheck_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {throw pfc::exception_bug_check();}
- t_size info_set_nocheck_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {throw pfc::exception_bug_check();}
+ t_size meta_set_nocheck_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {uBugCheck();}
+ t_size info_set_nocheck_ex(const char * p_name,t_size p_name_length,const char * p_value,t_size p_value_length) {uBugCheck();}
public:
struct meta_entry {
const char * m_name;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_list_helper.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_list_helper.cpp index 3dacfea..4053e73 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_list_helper.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_list_helper.cpp @@ -17,8 +17,16 @@ static void file_list_remove_duplicates(pfc::ptr_list_t<char> & out) namespace file_list_helper
{
+ t_size file_list_from_metadb_handle_list::g_get_count(metadb_handle_list_cref data, t_size max) {
+ pfc::avltree_t<const char*, metadb::path_comparator> content;
+ const t_size inCount = data.get_size();
+ for(t_size walk = 0; walk < inCount && content.get_count() < max; ++walk) {
+ content += data[walk]->get_path();
+ }
+ return content.get_count();
+ }
void file_list_from_metadb_handle_list::__add(const char * p_what) {
- char * temp = strdup(p_what);
+ char * temp = _strdup(p_what);
if (temp == NULL) throw std::bad_alloc();
try {m_data.add_item(temp); } catch(...) {free(temp); throw;}
}
@@ -32,7 +40,6 @@ namespace file_list_helper __add( p_list.get_item(n)->get_path() );
}
file_list_remove_duplicates(m_data);
-
}
void file_list_from_metadb_handle_list::init_from_list_display(const list_base_const_t<metadb_handle_ptr> & p_list)
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_list_helper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_list_helper.h index e4b9fcd..3cf0383 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_list_helper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_list_helper.h @@ -8,6 +8,8 @@ namespace file_list_helper class file_list_from_metadb_handle_list : public pfc::list_base_const_t<const char*> {
public:
+ static t_size g_get_count(const list_base_const_t<metadb_handle_ptr> & p_list, t_size max = ~0);
+
void init_from_list(const list_base_const_t<metadb_handle_ptr> & p_list);
void init_from_list_display(const list_base_const_t<metadb_handle_ptr> & p_list);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_move_helper.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_move_helper.cpp index b54c99e..4c2336b 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_move_helper.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_move_helper.cpp @@ -1,155 +1,11 @@ #include "stdafx.h"
-static bool grab_items_by_path(pfc::list_base_t<metadb_handle_ptr> & p_out,const char * p_path,abort_callback & p_abort)
-{
- try {
- pfc::string8 path;
- filesystem::g_get_canonical_path(p_path,path);
- p_out.remove_all();
- service_ptr_t<input_info_reader> reader;
- input_entry::g_open_for_info_read(reader,0,path,p_abort);
-
- static_api_ptr_t<metadb> l_metadb;
-
- const t_uint32 count = reader->get_subsong_count();
- for(t_uint32 n=0;n<count;n++) {
- p_abort.check_e();
- metadb_handle_ptr ptr;
- l_metadb->handle_create(ptr,make_playable_location(path,reader->get_subsong(n)));
- p_out.add_item(ptr);
- }
-
- return p_out.get_count() > 0;
- } catch(std::exception const &) {return false;}
-}
-
-file_move_helper::file_move_helper() {}
-file_move_helper::~file_move_helper() {}
-file_move_helper::file_move_helper(const file_move_helper & p_src) {*this = p_src;}
-
-bool file_move_helper::take_snapshot(const char * p_path,abort_callback & p_abort)
-{
- in_metadb_sync blah;
-
- m_source_handles.remove_all();
- m_data.set_size(0);
- if (!grab_items_by_path(m_source_handles,p_path,p_abort)) return false;
- t_size n, m = m_source_handles.get_count();
- m_data.set_size(m);
- for(n=0;n<m;n++)
- {
- m_data[n].m_location = m_source_handles[n]->get_location();
- m_data[n].m_have_info = m_source_handles[n]->get_info(m_data[n].m_info);
- m_data[n].m_stats = m_source_handles[n]->get_filestats();
-
- }
- return true;
-}
-
-bool file_move_helper::on_moved(const char * p_path,abort_callback & p_abort)
-{
- bool ret;
- file_move_callback_manager cb;
- ret = on_moved(p_path,p_abort,cb);
- cb.run_callback();
- return ret;
-}
-
-bool file_move_helper::on_copied(const char * p_path,abort_callback & p_abort)
-{
- bool ret;
- file_move_callback_manager cb;
- ret = on_copied(p_path,p_abort,cb);
- cb.run_callback();
- return ret;
-}
-
-bool file_move_helper::on_moved(const char * p_path,abort_callback & p_abort,file_move_callback_manager & p_cb)
-{
- file_path_canonical path(p_path);
- if (m_data.get_size() == 0) return false;
- if (!metadb::path_compare(path,get_source_path())) return true;
-
- metadb_handle_list items;
- make_new_item_list(items,path,p_cb);
-
-
- /*if (p_update_db)*/
- p_cb.on_library_add_items(items);
- p_cb.on_library_remove_items(m_source_handles);
-
- p_cb.on_moved(pfc::list_single_ref_t<const char*>(get_source_path()),pfc::list_single_ref_t<const char*>(path));
-
- return true;
-}
-
-bool file_move_helper::on_copied(const char * p_path,abort_callback & p_abort,file_move_callback_manager & p_cb)
-{
- file_path_canonical path(p_path);
- if (m_data.get_size() == 0) return false;
- if (!metadb::path_compare(path,get_source_path())) return true;
- metadb_handle_list items;
- make_new_item_list(items,path,p_cb);
- /*if (p_update_db)*/ p_cb.on_library_add_items(items);
- p_cb.on_copied(pfc::list_single_ref_t<const char*>(get_source_path()),pfc::list_single_ref_t<const char*>(path));
- return true;
-}
-
bool file_move_helper::g_on_deleted(const pfc::list_base_const_t<const char *> & p_files)
{
file_operation_callback::g_on_files_deleted(p_files);
return true;
}
-void file_move_helper::make_new_item_list(pfc::list_base_t<metadb_handle_ptr> & p_out,const char * p_new_path,file_move_callback_manager & p_cb)
-{
- pfc::string8 new_path;
- filesystem::g_get_canonical_path(p_new_path,new_path);
-
- t_size n; const t_size m = m_data.get_size();
- static_api_ptr_t<metadb> api;
- pfc::array_t<metadb_handle_ptr> hint_handles;
- pfc::array_t<const file_info*> hint_infos;
- pfc::array_t<t_filestats> hint_stats;
- hint_handles.set_size(m); hint_infos.set_size(m); hint_stats.set_size(m);
- t_size hintptr = 0;
- for(n=0;n<m;n++)
- {
- metadb_handle_ptr temp;
- api->handle_create(temp,make_playable_location(new_path,m_data[n].m_location.get_subsong()));
- if (m_data[n].m_have_info)
- {
- hint_handles[hintptr] = temp;
- hint_infos[hintptr] = &m_data[n].m_info;
- hint_stats[hintptr] = m_data[n].m_stats;
-
- hintptr++;
- }
- p_out.add_item(temp);
- }
-
- if (hintptr > 0)
- {
- p_cb.on_hint(
- pfc::list_const_array_t<metadb_handle_ptr,const pfc::array_t<metadb_handle_ptr> &>(hint_handles,hintptr),
- pfc::list_const_array_t<const file_info *,const pfc::array_t<const file_info *> &>(hint_infos,hintptr),
- pfc::list_const_array_t<t_filestats,const pfc::array_t<t_filestats> &>(hint_stats,hintptr)
- );
-/*
- static_api_ptr_t<metadb_io>()->hint_multi(
- list_const_array_t<metadb_handle_ptr,const array_t<metadb_handle_ptr> &>(hint_handles,hintptr),
- list_const_array_t<const file_info *,const array_t<const file_info *> &>(hint_infos,hintptr),
- list_const_array_t<t_filestats,const array_t<t_filestats> &>(hint_stats,hintptr),
- bit_array_false());*/
- }
-
-}
-
-const char * file_move_helper::get_source_path() const
-{
- return m_data.get_size() > 0 ? m_data[0].m_location.get_path() : 0;
-}
-
t_size file_move_helper::g_filter_dead_files_sorted_make_mask(pfc::list_base_t<metadb_handle_ptr> & p_data,const pfc::list_base_const_t<const char*> & p_dead,bit_array_var & p_mask)
{
t_size n, m = p_data.get_count();
@@ -180,99 +36,3 @@ t_size file_move_helper::g_filter_dead_files(pfc::list_base_t<metadb_handle_ptr> return g_filter_dead_files_sorted(p_data,temp);
}
-
-void file_move_callback_manager::on_library_add_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data)
-{
- m_added.add_items(p_data);
-}
-
-void file_move_callback_manager::on_library_remove_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data)
-{
- m_removed.add_items(p_data);
-}
-
-void file_move_callback_manager::on_moved(const pfc::string_list_const & p_from,const pfc::string_list_const & p_to)
-{
- assert(p_from.get_count() == p_to.get_count());
- m_move_from += p_from;
- m_move_to += p_to;
-}
-
-void file_move_callback_manager::on_copied(const pfc::string_list_const & p_from,const pfc::string_list_const & p_to)
-{
- assert(p_from.get_count() == p_to.get_count());
- m_copy_from += p_from;
- m_copy_to += p_to;
-}
-
-void file_move_callback_manager::on_hint(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,const pfc::list_base_const_t<const file_info*> & p_infos,const pfc::list_base_const_t<t_filestats> & p_stats)
-{
- m_hint_handles.add_items(p_list);
- m_hint_stats.add_items(p_stats);
-
- {
- t_size old_count = m_hint_infos.get_count(), delta = p_infos.get_count();
- m_hint_infos.set_count(old_count + delta);
- for(t_size n=0;n<delta;n++)
- m_hint_infos[old_count+n] = *p_infos[n];
- }
-
-/* metadb_handle_list m_hint_handles;
- list_t<file_info_impl_const> m_hint_infos;
- list_t<t_filestats> m_hint_stats;*/
-
-}
-
-
-void file_move_callback_manager::run_callback()
-{
- if (m_hint_handles.get_count() > 0)
- {
- static_api_ptr_t<metadb_io>()->hint_multi(
- m_hint_handles,
- pfc::ptr_list_const_array_t<const file_info,const pfc::list_t<file_info_const_impl> &>(m_hint_infos,m_hint_infos.get_count()),
- m_hint_stats,
- bit_array_false());
-
- m_hint_infos.remove_all();
- m_hint_stats.remove_all();
-
- //trick to make sure values don't get wiped
- //m_hint_handles.remove_all();
-
- }
-
- assert(m_copy_from.get_count() == m_copy_to.get_count());
- assert(m_move_from.get_count() == m_move_to.get_count());
-
- static_api_ptr_t<library_manager> api_library_manager;
-
- if (m_added.get_count() > 0)
- {
- api_library_manager->add_items(m_added);
- m_added.remove_all();
- }
-
- if (m_removed.get_count())
- {
- api_library_manager->remove_items(m_removed);
- m_removed.remove_all();
- }
-
- if (m_copy_from.get_count() > 0)
- {
- file_operation_callback::g_on_files_copied(m_copy_from,m_copy_to);
- m_copy_from.remove_all();
- m_copy_to.remove_all();
- }
-
- if (m_move_from.get_count() > 0)
- {
- file_operation_callback::g_on_files_moved(m_move_from,m_move_to);
- m_move_from.remove_all();
- m_move_to.remove_all();
- }
-
- //trick to make sure values don't get wiped
- m_hint_handles.remove_all();
-}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_move_helper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_move_helper.h index 7ce34ae..e52d0a6 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_move_helper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_move_helper.h @@ -1,60 +1,8 @@ -class file_move_callback_manager
-{
+class file_move_helper {
public:
- void on_library_add_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data);
- void on_library_remove_items(const pfc::list_base_const_t<metadb_handle_ptr> & p_data);
-
- void on_moved(const pfc::string_list_const & p_from,const pfc::string_list_const & p_to);
- void on_copied(const pfc::string_list_const & p_from,const pfc::string_list_const & p_to);
-
- void on_hint(const pfc::list_base_const_t<metadb_handle_ptr> & p_list,const pfc::list_base_const_t<const file_info*> & p_infos,const pfc::list_base_const_t<t_filestats> & p_stats);
-
- void run_callback();
-private:
- metadb_handle_list m_removed;
- metadb_handle_list m_added;
-
- pfc::string_list_impl m_copy_from,m_copy_to;
- pfc::string_list_impl m_move_from,m_move_to;
-
- metadb_handle_list m_hint_handles;
- pfc::list_t<file_info_const_impl> m_hint_infos;
- pfc::list_t<t_filestats> m_hint_stats;
-};
-
-class file_move_helper
-{
-public:
- file_move_helper();
- ~file_move_helper();
- file_move_helper(const file_move_helper & p_src);
- bool take_snapshot(const char * p_path,abort_callback & p_abort);
- bool on_moved(const char * p_path,abort_callback & p_abort);
- bool on_copied(const char * p_path,abort_callback & p_abort);
- bool on_moved(const char * p_path,abort_callback & p_abort,file_move_callback_manager & p_cb);
- bool on_copied(const char * p_path,abort_callback & p_abort,file_move_callback_manager & p_cb);
-
static bool g_on_deleted(const pfc::list_base_const_t<const char *> & p_files);
static t_size g_filter_dead_files_sorted_make_mask(pfc::list_base_t<metadb_handle_ptr> & p_data,const pfc::list_base_const_t<const char*> & p_dead,bit_array_var & p_mask);
static t_size g_filter_dead_files_sorted(pfc::list_base_t<metadb_handle_ptr> & p_data,const pfc::list_base_const_t<const char*> & p_dead);
static t_size g_filter_dead_files(pfc::list_base_t<metadb_handle_ptr> & p_data,const pfc::list_base_const_t<const char*> & p_dead);
-
-private:
-
- struct t_entry
- {
- playable_location_impl m_location;
- file_info_i m_info;
- t_filestats m_stats;
- bool m_have_info;
- };
-
- metadb_handle_list m_source_handles;
-
- pfc::array_t<t_entry> m_data;
-
- const char * get_source_path() const;
-
- void make_new_item_list(pfc::list_base_t<metadb_handle_ptr> & p_out,const char * p_path,file_move_callback_manager & p_cb);
};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_win32_wrapper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_win32_wrapper.h index 5d11188..b8061a3 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_win32_wrapper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/file_win32_wrapper.h @@ -53,7 +53,7 @@ public: void write(const void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
if (!p_writeable) throw exception_io_denied();
- pfc::static_assert_t< (sizeof(t_size) >= sizeof(DWORD)) >();
+ PFC_STATIC_ASSERT(sizeof(t_size) >= sizeof(DWORD));
t_size bytes_written_total = 0;
@@ -80,7 +80,7 @@ public: }
t_size read(void * p_buffer,t_size p_bytes,abort_callback & p_abort) {
- pfc::static_assert_t< (sizeof(t_size) >= sizeof(DWORD)) >();
+ PFC_STATIC_ASSERT(sizeof(t_size) >= sizeof(DWORD));
t_size bytes_read_total = 0;
if (sizeof(t_size) == sizeof(DWORD)) {
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/filetimetools.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/filetimetools.cpp new file mode 100644 index 0000000..33cbfd9 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/filetimetools.cpp @@ -0,0 +1,101 @@ +#include "stdafx.h"
+
+
+#ifndef _WIN32
+#error PORTME
+#endif
+
+static bool is_spacing(char c) {return c == ' ' || c==10 || c==13 || c == '\t';}
+
+static bool is_spacing(const char * str, t_size len) {
+ for(t_size walk = 0; walk < len; ++walk) if (!is_spacing(str[walk])) return false;
+ return true;
+}
+
+typedef exception_io_data exception_time_error;
+
+static unsigned ParseDateElem(const char * ptr, t_size len) {
+ unsigned ret = 0;
+ for(t_size walk = 0; walk < len; ++walk) {
+ const char c = ptr[walk];
+ if (c < '0' || c > '9') throw exception_time_error();
+ ret = ret * 10 + (unsigned)(c - '0');
+ }
+ return ret;
+}
+
+t_filetimestamp foobar2000_io::filetimestamp_from_string(const char * date) {
+ // Accepted format
+ // YYYY-MM-DD HH:MM:SS
+ try {
+ t_size remaining = strlen(date);
+ SYSTEMTIME st = {};
+ st.wDay = 1; st.wMonth = 1;
+ for(;;) {
+#define ADVANCE(n) { PFC_ASSERT( remaining >= n); date += n; remaining -= n; }
+#define ADVANCE_TEST(n) { if (remaining < n) throw exception_time_error(); }
+#define PARSE(var, digits) { ADVANCE_TEST(digits); var = (WORD) ParseDateElem(date, digits); ADVANCE(digits) ; }
+#define TEST_END( durationIncrement )
+#define SKIP(c) { ADVANCE_TEST(1); if (date[0] != c) throw exception_time_error(); ADVANCE(1); }
+#define SKIP_SPACING() {while(remaining > 0 && is_spacing(*date)) ADVANCE(1);}
+ SKIP_SPACING();
+ PARSE( st.wYear, 4 ); if (st.wYear < 1601) throw exception_time_error();
+ TEST_END(wYear); SKIP('-');
+ PARSE( st.wMonth, 2 ); if (st.wMonth < 1 || st.wMonth > 12) throw exception_time_error();
+ TEST_END(wMonth); SKIP('-');
+ PARSE( st.wDay, 2); if (st.wDay < 1 || st.wDay > 31) throw exception_time_error();
+ TEST_END(wDay); SKIP(' ');
+ PARSE( st.wHour, 2); if (st.wHour >= 24) throw exception_time_error();
+ TEST_END(wHour); SKIP(':');
+ PARSE( st.wMinute, 2); if (st.wMinute >= 60) throw exception_time_error();
+ TEST_END(wMinute); SKIP(':');
+ PARSE( st.wSecond, 2); if (st.wSecond >= 60) throw exception_time_error();
+ SKIP_SPACING();
+ TEST_END( wSecond );
+#undef ADVANCE
+#undef ADVANCE_TEST
+#undef PARSE
+#undef TEST_END
+#undef SKIP
+#undef SKIP_SPACING
+ if (remaining > 0) throw exception_time_error();
+ break;
+ }
+ t_filetimestamp base, out;
+ if (!SystemTimeToFileTime(&st, (FILETIME*) &base)) throw exception_time_error();
+ if (!LocalFileTimeToFileTime((const FILETIME*)&base, (FILETIME*)&out)) throw exception_time_error();
+ return out;
+ } catch(exception_time_error) {
+ return filetimestamp_invalid;
+ }
+}
+
+static const char g_invalidMsg[] = "<invalid timestamp>";
+
+format_filetimestamp::format_filetimestamp(t_filetimestamp p_timestamp) {
+ try {
+ SYSTEMTIME st; FILETIME ft;
+ if (FileTimeToLocalFileTime((FILETIME*)&p_timestamp,&ft)) {
+ if (FileTimeToSystemTime(&ft,&st)) {
+ m_buffer
+ << pfc::format_uint(st.wYear,4) << "-" << pfc::format_uint(st.wMonth,2) << "-" << pfc::format_uint(st.wDay,2) << " "
+ << pfc::format_uint(st.wHour,2) << ":" << pfc::format_uint(st.wMinute,2) << ":" << pfc::format_uint(st.wSecond,2);
+ return;
+ }
+ }
+ } catch(...) {}
+ m_buffer = g_invalidMsg;
+}
+
+format_filetimestamp_utc::format_filetimestamp_utc(t_filetimestamp p_timestamp) {
+ try {
+ SYSTEMTIME st;
+ if (FileTimeToSystemTime((const FILETIME*)&p_timestamp,&st)) {
+ m_buffer
+ << pfc::format_uint(st.wYear,4) << "-" << pfc::format_uint(st.wMonth,2) << "-" << pfc::format_uint(st.wDay,2) << " "
+ << pfc::format_uint(st.wHour,2) << ":" << pfc::format_uint(st.wMinute,2) << ":" << pfc::format_uint(st.wSecond,2);
+ return;
+ }
+ } catch(...) {}
+ m_buffer = g_invalidMsg;
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/filetimetools.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/filetimetools.h new file mode 100644 index 0000000..25867db --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/filetimetools.h @@ -0,0 +1,23 @@ +namespace foobar2000_io {
+ t_filetimestamp filetimestamp_from_string(const char * date);
+
+ //! Warning: this formats according to system timezone settings, created strings should be used for display only, never for storage.
+ class format_filetimestamp {
+ public:
+ format_filetimestamp(t_filetimestamp p_timestamp);
+ operator const char*() const {return m_buffer;}
+ const char * get_ptr() const {return m_buffer;}
+ private:
+ pfc::string_fixed_t<32> m_buffer;
+ };
+
+ class format_filetimestamp_utc {
+ public:
+ format_filetimestamp_utc(t_filetimestamp p_timestamp);
+ operator const char*() const {return m_buffer;}
+ const char * get_ptr() const {return m_buffer;}
+ private:
+ pfc::string_fixed_t<32> m_buffer;
+ };
+
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcproj b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcproj index fc7c089..9fe6c49 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcproj +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcproj @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8.00"
+ Version="9.00"
Name="foobar2000_sdk_helpers"
ProjectGUID="{EE47764E-A202-4F85-A767-ABDAB4AFF35F}"
RootNamespace="foobar2000_sdk_helpers"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -44,14 +45,17 @@ />
<Tool
Name="VCCLCompilerTool"
- PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x501"
StringPooling="true"
+ BufferSecurityCheck="false"
FloatingPointModel="2"
RuntimeTypeInfo="false"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="stdafx.h"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -179,7 +183,7 @@ <Tool
Name="VCCLCompilerTool"
Optimization="0"
- PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x500"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x501"
BasicRuntimeChecks="3"
RuntimeLibrary="1"
UsePrecompiledHeader="2"
@@ -297,6 +301,10 @@ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
>
<File
+ RelativePath=".\clipboard.cpp"
+ >
+ </File>
+ <File
RelativePath="create_directory_helper.cpp"
>
<FileConfiguration
@@ -489,11 +497,11 @@ </FileConfiguration>
</File>
<File
- RelativePath=".\format_title_group.cpp"
+ RelativePath=".\filetimetools.cpp"
>
</File>
<File
- RelativePath=".\inplace_edit.cpp"
+ RelativePath=".\IDataObjectUtils.cpp"
>
</File>
<File
@@ -531,50 +539,6 @@ >
</File>
<File
- RelativePath="preload_info_helper.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
- RelativePath="search_filter.cpp"
- >
- <FileConfiguration
- Name="Debug|Win32"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- <FileConfiguration
- Name="Debug|x64"
- >
- <Tool
- Name="VCCLCompilerTool"
- Optimization="0"
- BasicRuntimeChecks="3"
- />
- </FileConfiguration>
- </File>
- <File
RelativePath=".\seekabilizer.cpp"
>
</File>
@@ -663,6 +627,10 @@ </FileConfiguration>
</File>
<File
+ RelativePath=".\VisUtils.cpp"
+ >
+ </File>
+ <File
RelativePath="wildcard.cpp"
>
<FileConfiguration
@@ -738,15 +706,27 @@ Filter="h;hpp;hxx;hm;inl"
>
<File
+ RelativePath=".\album_art_helpers.h"
+ >
+ </File>
+ <File
RelativePath=".\bitreader_helper.h"
>
</File>
<File
+ RelativePath=".\CallForwarder.h"
+ >
+ </File>
+ <File
RelativePath=".\cfg_guidlist.h"
>
</File>
<File
- RelativePath=".\cfg_structlist.h"
+ RelativePath=".\clipboard.h"
+ >
+ </File>
+ <File
+ RelativePath=".\COM_utils.h"
>
</File>
<File
@@ -802,7 +782,7 @@ >
</File>
<File
- RelativePath=".\format_title_group.h"
+ RelativePath=".\filetimetools.h"
>
</File>
<File
@@ -810,7 +790,11 @@ >
</File>
<File
- RelativePath=".\inplace_edit.h"
+ RelativePath=".\icon_remapping_wildcard.h"
+ >
+ </File>
+ <File
+ RelativePath=".\IDataObjectUtils.h"
>
</File>
<File
@@ -834,11 +818,11 @@ >
</File>
<File
- RelativePath="preload_info_helper.h"
+ RelativePath=".\playlist_position_reference_tracker.h"
>
</File>
<File
- RelativePath="search_filter.h"
+ RelativePath=".\ProfileCache.h"
>
</File>
<File
@@ -862,6 +846,14 @@ >
</File>
<File
+ RelativePath=".\ThreadUtils.h"
+ >
+ </File>
+ <File
+ RelativePath=".\VisUtils.h"
+ >
+ </File>
+ <File
RelativePath="wildcard.h"
>
</File>
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcxproj b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcxproj new file mode 100644 index 0000000..018c831 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcxproj @@ -0,0 +1,318 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{EE47764E-A202-4F85-A767-ABDAB4AFF35F}</ProjectGuid>
+ <RootNamespace>foobar2000_sdk_helpers</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(Platform)\$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)$(Platform)\$(Configuration)\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(Platform)\$(Configuration)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="clipboard.cpp" />
+ <ClCompile Include="create_directory_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="cue_creator.cpp" />
+ <ClCompile Include="cue_parser.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="cue_parser_embedding.cpp" />
+ <ClCompile Include="cuesheet_index_list.cpp" />
+ <ClCompile Include="dialog_resize_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="dropdown_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="dynamic_bitrate_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="file_info_const_impl.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="file_list_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="file_move_helper.cpp" />
+ <ClCompile Include="file_wrapper_simple.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="filetimetools.cpp" />
+ <ClCompile Include="IDataObjectUtils.cpp" />
+ <ClCompile Include="input_helpers.cpp" />
+ <ClCompile Include="listview_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="metadb_io_hintlist.cpp" />
+ <ClCompile Include="mp3_utils.cpp" />
+ <ClCompile Include="seekabilizer.cpp" />
+ <ClCompile Include="StdAfx.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="stream_buffer_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="text_file_loader.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="VisUtils.cpp" />
+ <ClCompile Include="wildcard.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="win32_dialog.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="win32_misc.cpp" />
+ <ClCompile Include="window_placement_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="album_art_helpers.h" />
+ <ClInclude Include="bitreader_helper.h" />
+ <ClInclude Include="CallForwarder.h" />
+ <ClInclude Include="cfg_guidlist.h" />
+ <ClInclude Include="clipboard.h" />
+ <ClInclude Include="COM_utils.h" />
+ <ClInclude Include="create_directory_helper.h" />
+ <ClInclude Include="cue_creator.h" />
+ <ClInclude Include="cue_parser.h" />
+ <ClInclude Include="cuesheet_index_list.h" />
+ <ClInclude Include="dialog_resize_helper.h" />
+ <ClInclude Include="dropdown_helper.h" />
+ <ClInclude Include="dynamic_bitrate_helper.h" />
+ <ClInclude Include="file_cached.h" />
+ <ClInclude Include="file_info_const_impl.h" />
+ <ClInclude Include="file_list_helper.h" />
+ <ClInclude Include="file_move_helper.h" />
+ <ClInclude Include="file_win32_wrapper.h" />
+ <ClInclude Include="file_wrapper_simple.h" />
+ <ClInclude Include="filetimetools.h" />
+ <ClInclude Include="helpers.h" />
+ <ClInclude Include="icon_remapping_wildcard.h" />
+ <ClInclude Include="IDataObjectUtils.h" />
+ <ClInclude Include="input_helpers.h" />
+ <ClInclude Include="listview_helper.h" />
+ <ClInclude Include="meta_table_builder.h" />
+ <ClInclude Include="metadb_io_hintlist.h" />
+ <ClInclude Include="mp3_utils.h" />
+ <ClInclude Include="playlist_position_reference_tracker.h" />
+ <ClInclude Include="ProfileCache.h" />
+ <ClInclude Include="seekabilizer.h" />
+ <ClInclude Include="StdAfx.h" />
+ <ClInclude Include="stream_buffer_helper.h" />
+ <ClInclude Include="string_filter.h" />
+ <ClInclude Include="text_file_loader.h" />
+ <ClInclude Include="ThreadUtils.h" />
+ <ClInclude Include="VisUtils.h" />
+ <ClInclude Include="wildcard.h" />
+ <ClInclude Include="win32_dialog.h" />
+ <ClInclude Include="win32_misc.h" />
+ <ClInclude Include="window_placement_helper.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcxproj.filters b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcxproj.filters new file mode 100644 index 0000000..fab297a --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers.vcxproj.filters @@ -0,0 +1,224 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{f9bf58c4-374f-49a5-94db-1f5ae50beca1}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{07b1c50a-a3ad-4711-9ae0-d1411b80fd7a}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="clipboard.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="create_directory_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="cue_creator.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="cue_parser.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="cue_parser_embedding.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="cuesheet_index_list.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dialog_resize_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dropdown_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="dynamic_bitrate_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_info_const_impl.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_list_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_move_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="file_wrapper_simple.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="filetimetools.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="IDataObjectUtils.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="input_helpers.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="listview_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="metadb_io_hintlist.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="mp3_utils.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="seekabilizer.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="StdAfx.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="stream_buffer_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="text_file_loader.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="VisUtils.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="wildcard.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="win32_dialog.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="win32_misc.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="window_placement_helper.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="album_art_helpers.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="bitreader_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="CallForwarder.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="cfg_guidlist.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="clipboard.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="COM_utils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="create_directory_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="cue_creator.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="cue_parser.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="cuesheet_index_list.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="dialog_resize_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="dropdown_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="dynamic_bitrate_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_cached.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_info_const_impl.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_list_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_move_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_win32_wrapper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="file_wrapper_simple.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="filetimetools.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="helpers.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="icon_remapping_wildcard.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="IDataObjectUtils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="input_helpers.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="listview_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="meta_table_builder.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="metadb_io_hintlist.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="mp3_utils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="playlist_position_reference_tracker.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ProfileCache.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="seekabilizer.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="StdAfx.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="stream_buffer_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="string_filter.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="text_file_loader.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="ThreadUtils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="VisUtils.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="wildcard.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="win32_dialog.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="win32_misc.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="window_placement_helper.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcproj b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcproj new file mode 100644 index 0000000..a3d1e67 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcproj @@ -0,0 +1,880 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="listeningto_foo2kSDK_helpers"
+ ProjectGUID="{EE47764E-A202-4F85-A767-ABDAB4AFF35F}"
+ RootNamespace="foobar2000_sdk_helpers"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x501"
+ StringPooling="true"
+ BufferSecurityCheck="false"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="stdafx.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
+ StringPooling="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="stdafx.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x501"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="stdafx.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="stdafx.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath=".\clipboard.cpp"
+ >
+ </File>
+ <File
+ RelativePath="create_directory_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\cue_creator.cpp"
+ >
+ </File>
+ <File
+ RelativePath="cue_parser.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\cue_parser_embedding.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\cuesheet_index_list.cpp"
+ >
+ </File>
+ <File
+ RelativePath="dialog_resize_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="dropdown_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="dynamic_bitrate_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="file_info_const_impl.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="file_list_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\file_move_helper.cpp"
+ >
+ </File>
+ <File
+ RelativePath="file_wrapper_simple.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\filetimetools.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\IDataObjectUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\input_helpers.cpp"
+ >
+ </File>
+ <File
+ RelativePath="listview_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\metadb_io_hintlist.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\mp3_utils.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\seekabilizer.cpp"
+ >
+ </File>
+ <File
+ RelativePath="StdAfx.cpp"
+ >
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="stream_buffer_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="text_file_loader.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\VisUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath="wildcard.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="win32_dialog.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\win32_misc.cpp"
+ >
+ </File>
+ <File
+ RelativePath="window_placement_helper.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath=".\album_art_helpers.h"
+ >
+ </File>
+ <File
+ RelativePath=".\bitreader_helper.h"
+ >
+ </File>
+ <File
+ RelativePath=".\CallForwarder.h"
+ >
+ </File>
+ <File
+ RelativePath=".\cfg_guidlist.h"
+ >
+ </File>
+ <File
+ RelativePath=".\clipboard.h"
+ >
+ </File>
+ <File
+ RelativePath=".\COM_utils.h"
+ >
+ </File>
+ <File
+ RelativePath="create_directory_helper.h"
+ >
+ </File>
+ <File
+ RelativePath=".\cue_creator.h"
+ >
+ </File>
+ <File
+ RelativePath="cue_parser.h"
+ >
+ </File>
+ <File
+ RelativePath=".\cuesheet_index_list.h"
+ >
+ </File>
+ <File
+ RelativePath="dialog_resize_helper.h"
+ >
+ </File>
+ <File
+ RelativePath="dropdown_helper.h"
+ >
+ </File>
+ <File
+ RelativePath="dynamic_bitrate_helper.h"
+ >
+ </File>
+ <File
+ RelativePath=".\file_cached.h"
+ >
+ </File>
+ <File
+ RelativePath="file_info_const_impl.h"
+ >
+ </File>
+ <File
+ RelativePath="file_list_helper.h"
+ >
+ </File>
+ <File
+ RelativePath=".\file_move_helper.h"
+ >
+ </File>
+ <File
+ RelativePath=".\file_win32_wrapper.h"
+ >
+ </File>
+ <File
+ RelativePath="file_wrapper_simple.h"
+ >
+ </File>
+ <File
+ RelativePath=".\filetimetools.h"
+ >
+ </File>
+ <File
+ RelativePath="helpers.h"
+ >
+ </File>
+ <File
+ RelativePath=".\icon_remapping_wildcard.h"
+ >
+ </File>
+ <File
+ RelativePath=".\IDataObjectUtils.h"
+ >
+ </File>
+ <File
+ RelativePath=".\input_helpers.h"
+ >
+ </File>
+ <File
+ RelativePath="listview_helper.h"
+ >
+ </File>
+ <File
+ RelativePath=".\meta_table_builder.h"
+ >
+ </File>
+ <File
+ RelativePath=".\metadb_io_hintlist.h"
+ >
+ </File>
+ <File
+ RelativePath=".\mp3_utils.h"
+ >
+ </File>
+ <File
+ RelativePath=".\playlist_position_reference_tracker.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ProfileCache.h"
+ >
+ </File>
+ <File
+ RelativePath=".\seekabilizer.h"
+ >
+ </File>
+ <File
+ RelativePath="StdAfx.h"
+ >
+ </File>
+ <File
+ RelativePath="stream_buffer_helper.h"
+ >
+ </File>
+ <File
+ RelativePath=".\string_filter.h"
+ >
+ </File>
+ <File
+ RelativePath="text_file_loader.h"
+ >
+ </File>
+ <File
+ RelativePath=".\ThreadUtils.h"
+ >
+ </File>
+ <File
+ RelativePath=".\VisUtils.h"
+ >
+ </File>
+ <File
+ RelativePath="wildcard.h"
+ >
+ </File>
+ <File
+ RelativePath="win32_dialog.h"
+ >
+ </File>
+ <File
+ RelativePath=".\win32_misc.h"
+ >
+ </File>
+ <File
+ RelativePath="window_placement_helper.h"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcxproj b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcxproj new file mode 100644 index 0000000..bd0c420 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcxproj @@ -0,0 +1,322 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>listeningto_foo2kSDK_helpers</ProjectName>
+ <ProjectGuid>{EE47764E-A202-4F85-A767-ABDAB4AFF35F}</ProjectGuid>
+ <RootNamespace>foobar2000_sdk_helpers</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/listeningto/$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <ClCompile>
+ <Optimization>MinSpace</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_WIN32_WINNT=0x501;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>stdafx.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="clipboard.cpp" />
+ <ClCompile Include="create_directory_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="cue_creator.cpp" />
+ <ClCompile Include="cue_parser.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="cue_parser_embedding.cpp" />
+ <ClCompile Include="cuesheet_index_list.cpp" />
+ <ClCompile Include="dialog_resize_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="dropdown_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="dynamic_bitrate_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="file_info_const_impl.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="file_list_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="file_move_helper.cpp" />
+ <ClCompile Include="file_wrapper_simple.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="filetimetools.cpp" />
+ <ClCompile Include="IDataObjectUtils.cpp" />
+ <ClCompile Include="input_helpers.cpp" />
+ <ClCompile Include="listview_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="metadb_io_hintlist.cpp" />
+ <ClCompile Include="mp3_utils.cpp" />
+ <ClCompile Include="seekabilizer.cpp" />
+ <ClCompile Include="StdAfx.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="stream_buffer_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="text_file_loader.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="VisUtils.cpp" />
+ <ClCompile Include="wildcard.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="win32_dialog.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ <ClCompile Include="win32_misc.cpp" />
+ <ClCompile Include="window_placement_helper.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="album_art_helpers.h" />
+ <ClInclude Include="bitreader_helper.h" />
+ <ClInclude Include="CallForwarder.h" />
+ <ClInclude Include="cfg_guidlist.h" />
+ <ClInclude Include="clipboard.h" />
+ <ClInclude Include="COM_utils.h" />
+ <ClInclude Include="create_directory_helper.h" />
+ <ClInclude Include="cue_creator.h" />
+ <ClInclude Include="cue_parser.h" />
+ <ClInclude Include="cuesheet_index_list.h" />
+ <ClInclude Include="dialog_resize_helper.h" />
+ <ClInclude Include="dropdown_helper.h" />
+ <ClInclude Include="dynamic_bitrate_helper.h" />
+ <ClInclude Include="file_cached.h" />
+ <ClInclude Include="file_info_const_impl.h" />
+ <ClInclude Include="file_list_helper.h" />
+ <ClInclude Include="file_move_helper.h" />
+ <ClInclude Include="file_win32_wrapper.h" />
+ <ClInclude Include="file_wrapper_simple.h" />
+ <ClInclude Include="filetimetools.h" />
+ <ClInclude Include="helpers.h" />
+ <ClInclude Include="icon_remapping_wildcard.h" />
+ <ClInclude Include="IDataObjectUtils.h" />
+ <ClInclude Include="input_helpers.h" />
+ <ClInclude Include="listview_helper.h" />
+ <ClInclude Include="meta_table_builder.h" />
+ <ClInclude Include="metadb_io_hintlist.h" />
+ <ClInclude Include="mp3_utils.h" />
+ <ClInclude Include="playlist_position_reference_tracker.h" />
+ <ClInclude Include="ProfileCache.h" />
+ <ClInclude Include="seekabilizer.h" />
+ <ClInclude Include="StdAfx.h" />
+ <ClInclude Include="stream_buffer_helper.h" />
+ <ClInclude Include="string_filter.h" />
+ <ClInclude Include="text_file_loader.h" />
+ <ClInclude Include="ThreadUtils.h" />
+ <ClInclude Include="VisUtils.h" />
+ <ClInclude Include="wildcard.h" />
+ <ClInclude Include="win32_dialog.h" />
+ <ClInclude Include="win32_misc.h" />
+ <ClInclude Include="window_placement_helper.h" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcxproj.user b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/foobar2000_sdk_helpers_9.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/helpers.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/helpers.h index c0c527a..c8966e8 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/helpers.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/helpers.h @@ -11,17 +11,14 @@ #include "cuesheet_index_list.h"
#include "cue_creator.h"
#include "cue_parser.h"
-#include "search_filter.h"
#include "text_file_loader.h"
#include "file_list_helper.h"
-#include "preload_info_helper.h"
#include "listview_helper.h"
#include "stream_buffer_helper.h"
#include "file_info_const_impl.h"
#include "file_wrapper_simple.h"
#include "dynamic_bitrate_helper.h"
#include "cfg_guidlist.h"
-#include "cfg_structlist.h"
#include "file_win32_wrapper.h"
#include "file_move_helper.h"
#include "file_cached.h"
@@ -30,9 +27,18 @@ #include "bitreader_helper.h"
#include "mp3_utils.h"
#include "win32_misc.h"
+#include "COM_utils.h"
#include "metadb_io_hintlist.h"
-#include "format_title_group.h"
-#include "inplace_edit.h"
#include "meta_table_builder.h"
+#include "icon_remapping_wildcard.h"
+#include "album_art_helpers.h"
+#include "clipboard.h"
+#include "IDataObjectUtils.h"
+#include "CallForwarder.h"
+#include "playlist_position_reference_tracker.h"
+#include "ThreadUtils.h"
+#include "VisUtils.h"
+#include "filetimetools.h"
+#include "ProfileCache.h"
-#endif //_FOOBAR2000_SDK_HELPERS_H_
\ No newline at end of file +#endif //_FOOBAR2000_SDK_HELPERS_H_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/icon_remapping_wildcard.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/icon_remapping_wildcard.h new file mode 100644 index 0000000..c6bb981 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/icon_remapping_wildcard.h @@ -0,0 +1,13 @@ +class icon_remapping_wildcard_impl : public icon_remapping {
+public:
+ icon_remapping_wildcard_impl(const char * p_pattern,const char * p_iconname) : m_pattern(p_pattern), m_iconname(p_iconname) {}
+ bool query(const char * p_extension,pfc::string_base & p_iconname) {
+ if (wildcard_helper::test(p_extension,m_pattern,true)) {
+ p_iconname = m_iconname; return true;
+ } else {
+ return false;
+ }
+ }
+private:
+ pfc::string8 m_pattern,m_iconname;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/input_helpers.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/input_helpers.cpp index d1f4a54..40b1969 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/input_helpers.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/input_helpers.cpp @@ -26,38 +26,49 @@ static void process_fullbuffer(service_ptr_t<file> & p_file,const char * p_path, }
}
-void input_helper::open(service_ptr_t<file> p_filehint,const playable_location & p_location,unsigned p_flags,abort_callback & p_abort,bool p_from_redirect,bool p_skip_hints) {
+bool input_helper::need_file_reopen(const char * newPath) const {
+ return m_input.is_empty() || metadb::path_compare(m_path, newPath) != 0;
+}
+
+bool input_helper::open_path(file::ptr p_filehint,const char * path,abort_callback & p_abort,bool p_from_redirect,bool p_skip_hints) {
p_abort.check();
- if (m_input.is_empty() || metadb::path_compare(p_location.get_path(),m_path) != 0)
- {
- m_input.release();
+ if (!need_file_reopen(path)) return false;
+ m_input.release();
- service_ptr_t<file> l_file = p_filehint;
- process_fullbuffer(l_file,p_location.get_path(),m_fullbuffer,p_abort);
+ service_ptr_t<file> l_file = p_filehint;
+ process_fullbuffer(l_file,path,m_fullbuffer,p_abort);
- TRACK_CODE("input_entry::g_open_for_decoding",
- input_entry::g_open_for_decoding(m_input,l_file,p_location.get_path(),p_abort,p_from_redirect)
- );
+ TRACK_CODE("input_entry::g_open_for_decoding",
+ input_entry::g_open_for_decoding(m_input,l_file,path,p_abort,p_from_redirect)
+ );
-
- if (!p_skip_hints) {
- try {
- static_api_ptr_t<metadb_io>()->hint_reader(m_input.get_ptr(),p_location.get_path(),p_abort);
- } catch(exception_io_data) {
- //don't fail to decode when this barfs
- m_input.release();
- if (l_file.is_valid()) l_file->reopen(p_abort);
- TRACK_CODE("input_entry::g_open_for_decoding",
- input_entry::g_open_for_decoding(m_input,l_file,p_location.get_path(),p_abort,p_from_redirect)
- );
- }
+
+ if (!p_skip_hints) {
+ try {
+ static_api_ptr_t<metadb_io>()->hint_reader(m_input.get_ptr(),path,p_abort);
+ } catch(exception_io_data) {
+ //Don't fail to decode when this barfs, might be barfing when reading info from another subsong than the one we're trying to decode etc.
+ m_input.release();
+ if (l_file.is_valid()) l_file->reopen(p_abort);
+ TRACK_CODE("input_entry::g_open_for_decoding",
+ input_entry::g_open_for_decoding(m_input,l_file,path,p_abort,p_from_redirect)
+ );
}
-
- m_path = p_location.get_path();
}
- TRACK_CODE("input_decoder::initialize",m_input->initialize(p_location.get_subsong_index(),p_flags,p_abort));
+ m_path = path;
+ return true;
+}
+
+void input_helper::open_decoding(t_uint32 subsong, t_uint32 flags, abort_callback & p_abort) {
+ TRACK_CODE("input_decoder::initialize",m_input->initialize(subsong,flags,p_abort));
+}
+
+void input_helper::open(service_ptr_t<file> p_filehint,const playable_location & p_location,unsigned p_flags,abort_callback & p_abort,bool p_from_redirect,bool p_skip_hints) {
+ open_path(p_filehint, p_location.get_path(), p_abort, p_from_redirect, p_skip_hints);
+
+ open_decoding(p_location.get_subsong(), p_flags, p_abort);
}
@@ -69,30 +80,38 @@ bool input_helper::is_open() { return m_input.is_valid();
}
-bool input_helper::run(audio_chunk & p_chunk,abort_callback & p_abort)
-{
- if (m_input.is_valid()) {
- TRACK_CODE("input_decoder::run",return m_input->run(p_chunk,p_abort));
- } else {
- throw pfc::exception_bug_check();
- }
+void input_helper::set_pause(bool state) {
+ input_decoder_v3::ptr v3;
+ if (m_input->service_query_t(v3)) v3->set_pause(state);
+}
+bool input_helper::flush_on_pause() {
+ input_decoder_v3::ptr v3;
+ if (m_input->service_query_t(v3)) return v3->flush_on_pause();
+ else return false;
}
-void input_helper::seek(double seconds,abort_callback & p_abort)
-{
- if (m_input.is_valid()) {
- TRACK_CODE("input_decoder::seek",m_input->seek(seconds,p_abort));
- } else {
- throw pfc::exception_bug_check();
- }
+
+void input_helper::set_logger(event_logger::ptr ptr) {
+ input_decoder_v2::ptr v2;
+ if (m_input->service_query_t(v2)) v2->set_logger(ptr);
+}
+
+bool input_helper::run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) {
+ input_decoder_v2::ptr v2;
+ if (!m_input->service_query_t(v2)) throw pfc::exception_not_implemented();
+ return v2->run_raw(p_chunk, p_raw, p_abort);
+}
+
+bool input_helper::run(audio_chunk & p_chunk,abort_callback & p_abort) {
+ TRACK_CODE("input_decoder::run",return m_input->run(p_chunk,p_abort));
+}
+
+void input_helper::seek(double seconds,abort_callback & p_abort) {
+ TRACK_CODE("input_decoder::seek",m_input->seek(seconds,p_abort));
}
bool input_helper::can_seek() {
- if (m_input.is_valid()) {
- return m_input->can_seek();
- } else {
- throw pfc::exception_bug_check();
- }
+ return m_input->can_seek();
}
void input_helper::set_full_buffer(t_filesize val) {
@@ -105,27 +124,15 @@ void input_helper::on_idle(abort_callback & p_abort) { }
bool input_helper::get_dynamic_info(file_info & p_out,double & p_timestamp_delta) {
- if (m_input.is_valid()) {
- TRACK_CODE("input_decoder::get_dynamic_info",return m_input->get_dynamic_info(p_out,p_timestamp_delta));
- } else {
- throw pfc::exception_bug_check();
- }
+ TRACK_CODE("input_decoder::get_dynamic_info",return m_input->get_dynamic_info(p_out,p_timestamp_delta));
}
bool input_helper::get_dynamic_info_track(file_info & p_out,double & p_timestamp_delta) {
- if (m_input.is_valid()) {
- TRACK_CODE("input_decoder::get_dynamic_info_track",return m_input->get_dynamic_info_track(p_out,p_timestamp_delta));
- } else {
- throw pfc::exception_bug_check();
- }
+ TRACK_CODE("input_decoder::get_dynamic_info_track",return m_input->get_dynamic_info_track(p_out,p_timestamp_delta));
}
void input_helper::get_info(t_uint32 p_subsong,file_info & p_info,abort_callback & p_abort) {
- if (m_input.is_valid()) {
- TRACK_CODE("input_decoder::get_info",m_input->get_info(p_subsong,p_info,p_abort));
- } else {
- throw pfc::exception_bug_check();
- }
+ TRACK_CODE("input_decoder::get_info",m_input->get_info(p_subsong,p_info,p_abort));
}
const char * input_helper::get_path() const {
@@ -188,7 +195,7 @@ bool dead_item_filter::run(const pfc::list_base_const_t<metadb_handle_ptr> & p_l valid_handles.sort_by_pointer();
for(t_size listidx=0;listidx<p_list.get_count();listidx++) {
- bool dead = valid_handles.bsearch_by_pointer(p_list[listidx]) == infinite;
+ bool dead = valid_handles.bsearch_by_pointer(p_list[listidx]) == ~0;
if (dead) console::formatter() << "Dead item: " << p_list[listidx];
p_mask.set(listidx,dead);
}
@@ -282,18 +289,24 @@ void input_helper_cue::open(service_ptr_t<file> p_filehint,const playable_locati void input_helper_cue::close() {m_input.close();}
bool input_helper_cue::is_open() {return m_input.is_open();}
-bool input_helper_cue::run(audio_chunk & p_chunk,abort_callback & p_abort) {
+bool input_helper_cue::_m_input_run(audio_chunk & p_chunk, mem_block_container * p_raw, abort_callback & p_abort) {
+ if (p_raw == NULL) {
+ return m_input.run(p_chunk, p_abort);
+ } else {
+ return m_input.run_raw(p_chunk, *p_raw, p_abort);
+ }
+}
+bool input_helper_cue::_run(audio_chunk & p_chunk, mem_block_container * p_raw, abort_callback & p_abort) {
p_abort.check();
-
-
+
if (m_length > 0) {
if (m_position >= m_length) return false;
+ if (!_m_input_run(p_chunk, p_raw, p_abort)) return false;
+
m_dynamic_info_trigger = true;
m_dynamic_info_track_trigger = true;
- if (!m_input.run(p_chunk,p_abort)) return false;
-
t_uint64 max = (t_uint64) audio_math::time_to_samples(m_length - m_position, p_chunk.get_sample_rate());
if (max == 0)
{//handle rounding accidents, this normally shouldn't trigger
@@ -305,6 +318,11 @@ bool input_helper_cue::run(audio_chunk & p_chunk,abort_callback & p_abort) { if ((t_uint64)samples > max)
{
p_chunk.set_sample_count((unsigned)max);
+ if (p_raw != NULL) {
+ const t_size rawSize = p_raw->get_size();
+ PFC_ASSERT( rawSize % samples == 0 );
+ p_raw->set_size( (t_size) ( (t_uint64) rawSize * max / samples ) );
+ }
m_position = m_length;
}
else
@@ -315,11 +333,18 @@ bool input_helper_cue::run(audio_chunk & p_chunk,abort_callback & p_abort) { }
else
{
- if (!m_input.run(p_chunk,p_abort)) return false;
+ if (!_m_input_run(p_chunk, p_raw, p_abort)) return false;
m_position += p_chunk.get_duration();
return true;
}
}
+bool input_helper_cue::run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort) {
+ return _run(p_chunk, &p_raw, p_abort);
+}
+
+bool input_helper_cue::run(audio_chunk & p_chunk,abort_callback & p_abort) {
+ return _run(p_chunk, NULL, p_abort);
+}
void input_helper_cue::seek(double p_seconds,abort_callback & p_abort)
{
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/input_helpers.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/input_helpers.h index f8ffab6..b5835e1 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/input_helpers.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/input_helpers.h @@ -7,15 +7,27 @@ public: void open(service_ptr_t<file> p_filehint,metadb_handle_ptr p_location,unsigned p_flags,abort_callback & p_abort,bool p_from_redirect = false,bool p_skip_hints = false);
void open(service_ptr_t<file> p_filehint,const playable_location & p_location,unsigned p_flags,abort_callback & p_abort,bool p_from_redirect = false,bool p_skip_hints = false);
+ //! Multilevel open helpers.
+ //! @returns Diagnostic/helper value: true if the decoder had to be re-opened entirely, false if the instance was reused.
+ bool open_path(file::ptr p_filehint,const char * path,abort_callback & p_abort,bool p_from_redirect,bool p_skip_hints);
+ //! Multilevel open helpers.
+ void open_decoding(t_uint32 subsong, t_uint32 flags, abort_callback & p_abort);
+
+ bool need_file_reopen(const char * newPath) const;
+
void close();
bool is_open();
bool run(audio_chunk & p_chunk,abort_callback & p_abort);
+ bool run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort);
void seek(double seconds,abort_callback & p_abort);
bool can_seek();
void set_full_buffer(t_filesize val);
void on_idle(abort_callback & p_abort);
bool get_dynamic_info(file_info & p_out,double & p_timestamp_delta);
bool get_dynamic_info_track(file_info & p_out,double & p_timestamp_delta);
+ void set_logger(event_logger::ptr ptr);
+ void set_pause(bool state);
+ bool flush_on_pause();
//! Retrieves path of currently open file.
const char * get_path() const;
@@ -63,18 +75,22 @@ public: void close();
bool is_open();
bool run(audio_chunk & p_chunk,abort_callback & p_abort);
+ bool run_raw(audio_chunk & p_chunk, mem_block_container & p_raw, abort_callback & p_abort);
void seek(double seconds,abort_callback & p_abort);
bool can_seek();
void set_full_buffer(t_filesize val);
void on_idle(abort_callback & p_abort);
bool get_dynamic_info(file_info & p_out,double & p_timestamp_delta);
bool get_dynamic_info_track(file_info & p_out,double & p_timestamp_delta);
+ void set_logger(event_logger::ptr ptr) {m_input.set_logger(ptr);}
const char * get_path() const;
void get_info(t_uint32 p_subsong,file_info & p_info,abort_callback & p_abort);
private:
+ bool _run(audio_chunk & p_chunk, mem_block_container * p_raw, abort_callback & p_abort);
+ bool _m_input_run(audio_chunk & p_chunk, mem_block_container * p_raw, abort_callback & p_abort);
input_helper m_input;
double m_start,m_length,m_position;
bool m_dynamic_info_trigger,m_dynamic_info_track_trigger;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/listview_helper.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/listview_helper.cpp index 76cd1d8..dc0a904 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/listview_helper.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/listview_helper.cpp @@ -1,30 +1,23 @@ #include "stdafx.h"
-#define uTEXT(blah) TEXT(blah)
-#define uLVM_SETITEM LVM_SETITEM
-#define uLVM_INSERTITEM LVM_INSERTITEM
-#define uLVM_INSERTCOLUMN LVM_INSERTCOLUMN
-#define uLVM_GETITEM LVM_GETITEM
namespace listview_helper {
unsigned insert_item(HWND p_listview,unsigned p_index,const char * p_name,LPARAM p_param)
{
- if (p_index == infinite) p_index = ListView_GetItemCount(p_listview);
- LVITEM item;
- memset(&item,0,sizeof(item));
+ if (p_index == ~0) p_index = ListView_GetItemCount(p_listview);
+ LVITEM item = {};
pfc::stringcvt::string_os_from_utf8 os_string_temp(p_name);
- os_string_temp.convert(p_name);
item.mask = LVIF_TEXT | LVIF_PARAM;
item.iItem = p_index;
item.lParam = p_param;
item.pszText = const_cast<TCHAR*>(os_string_temp.get_ptr());
- LRESULT ret = uSendMessage(p_listview,uLVM_INSERTITEM,0,(LPARAM)&item);
- if (ret < 0) return infinite;
+ LRESULT ret = uSendMessage(p_listview,LVM_INSERTITEM,0,(LPARAM)&item);
+ if (ret < 0) return ~0;
else return (unsigned) ret;
}
@@ -32,66 +25,59 @@ namespace listview_helper { unsigned insert_column(HWND p_listview,unsigned p_index,const char * p_name,unsigned p_width_dlu)
{
- pfc::stringcvt::string_os_from_utf8 os_string_temp;
- os_string_temp.convert(p_name);
+ pfc::stringcvt::string_os_from_utf8 os_string_temp(p_name);
RECT rect = {0,0,p_width_dlu,0};
MapDialogRect(GetParent(p_listview),&rect);
- LVCOLUMN data;
- memset(&data,0,sizeof(data));
+ LVCOLUMN data = {};
data.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT;
data.fmt = LVCFMT_LEFT;
data.cx = rect.right;
data.pszText = const_cast<TCHAR*>(os_string_temp.get_ptr());
- LRESULT ret = uSendMessage(p_listview,uLVM_INSERTCOLUMN,p_index,(LPARAM)&data);
- if (ret < 0) return infinite;
+ LRESULT ret = uSendMessage(p_listview,LVM_INSERTCOLUMN,p_index,(LPARAM)&data);
+ if (ret < 0) return ~0;
else return (unsigned) ret;
}
void get_item_text(HWND p_listview,unsigned p_index,unsigned p_column,pfc::string_base & p_out) {
- enum {buffer_length = 4096};
- TCHAR buffer[buffer_length];
- ListView_GetItemText(p_listview,p_index,p_column,buffer,buffer_length);
- p_out = pfc::stringcvt::string_utf8_from_os(buffer,buffer_length);
+ enum {buffer_length = 1024*64};
+ pfc::array_t<TCHAR> buffer; buffer.set_size(buffer_length);
+ ListView_GetItemText(p_listview,p_index,p_column,buffer.get_ptr(),buffer_length);
+ p_out = pfc::stringcvt::string_utf8_from_os(buffer.get_ptr(),buffer_length);
}
bool set_item_text(HWND p_listview,unsigned p_index,unsigned p_column,const char * p_name)
{
- LVITEM item;
- memset(&item,0,sizeof(item));
+ LVITEM item = {};
- pfc::stringcvt::string_os_from_utf8 os_string_temp;
- os_string_temp.convert(p_name);
+ pfc::stringcvt::string_os_from_utf8 os_string_temp(p_name);
item.mask = LVIF_TEXT;
item.iItem = p_index;
item.iSubItem = p_column;
item.pszText = const_cast<TCHAR*>(os_string_temp.get_ptr());
- return uSendMessage(p_listview,uLVM_SETITEM,0,(LPARAM)&item) ? true : false;
+ return uSendMessage(p_listview,LVM_SETITEM,0,(LPARAM)&item) ? true : false;
}
bool is_item_selected(HWND p_listview,unsigned p_index)
{
- LVITEM item;
- memset(&item,0,sizeof(item));
+ LVITEM item = {};
item.mask = LVIF_STATE;
item.iItem = p_index;
item.stateMask = LVIS_SELECTED;
- if (!uSendMessage(p_listview,uLVM_GETITEM,0,(LPARAM)&item)) return false;
+ if (!uSendMessage(p_listview,LVM_GETITEM,0,(LPARAM)&item)) return false;
return (item.state & LVIS_SELECTED) ? true : false;
}
- bool set_item_selection(HWND p_listview,unsigned p_index,bool p_state)
+ void set_item_selection(HWND p_listview,unsigned p_index,bool p_state)
{
- LVITEM item;
- memset(&item,0,sizeof(item));
- item.mask = LVIF_STATE;
- item.iItem = p_index;
+ PFC_ASSERT( ::IsWindow(p_listview) );
+ LVITEM item = {};
item.stateMask = LVIS_SELECTED;
item.state = p_state ? LVIS_SELECTED : 0;
- return uSendMessage(p_listview,uLVM_SETITEM,0,(LPARAM)&item) ? true : false;
+ WIN32_OP_D( SendMessage(p_listview,LVM_SETITEMSTATE,(WPARAM)p_index,(LPARAM)&item) );
}
bool select_single_item(HWND p_listview,unsigned p_index)
@@ -114,34 +100,74 @@ namespace listview_helper { }
+void ListView_GetContextMenuPoint(HWND p_list,LPARAM p_coords,POINT & p_point,int & p_selection) {
+ POINT pt = {(short)LOWORD(p_coords),(short)HIWORD(p_coords)};
+ ListView_GetContextMenuPoint(p_list, pt, p_point, p_selection);
+}
-bool ListView_GetContextMenuPoint(HWND p_list,LPARAM p_coords,POINT & p_point,int & p_selection) {
- if ((DWORD)p_coords == (DWORD)infinite) {
+void ListView_GetContextMenuPoint(HWND p_list,POINT p_coords,POINT & p_point,int & p_selection) {
+ if (p_coords.x == -1 && p_coords.y == -1) {
int firstsel = ListView_GetFirstSelection(p_list);
if (firstsel >= 0) {
+ ListView_EnsureVisible(p_list, firstsel, FALSE);
RECT rect;
- if (!ListView_GetItemRect(p_list,firstsel,&rect,LVIR_BOUNDS)) return false;
+ WIN32_OP_D( ListView_GetItemRect(p_list,firstsel,&rect,LVIR_BOUNDS) );
p_point.x = (rect.left + rect.right) / 2;
p_point.y = (rect.top + rect.bottom) / 2;
- if (!ClientToScreen(p_list,&p_point)) return false;
+ WIN32_OP_D( ClientToScreen(p_list,&p_point) );
} else {
RECT rect;
- if (!GetClientRect(p_list,&rect)) return false;
+ WIN32_OP_D(GetClientRect(p_list,&rect));
p_point.x = (rect.left + rect.right) / 2;
p_point.y = (rect.top + rect.bottom) / 2;
- if (!ClientToScreen(p_list,&p_point)) return false;
+ WIN32_OP_D(ClientToScreen(p_list,&p_point));
}
p_selection = firstsel;
- return true;
} else {
- POINT pt = {(short)LOWORD(p_coords),(short)HIWORD(p_coords)};
+ POINT pt = p_coords; // {(short)LOWORD(p_coords),(short)HIWORD(p_coords)};
p_point = pt;
POINT client = pt;
- if (!ScreenToClient(p_list,&client)) return false;
- LVHITTESTINFO info;
- memset(&info,0,sizeof(info));
+ WIN32_OP_D( ScreenToClient(p_list,&client) );
+ LVHITTESTINFO info = {};
info.pt = client;
p_selection = ListView_HitTest(p_list,&info);
- return true;
}
}
+
+#if 0
+static bool ProbeColumn(HWND view, int index) {
+ LVCOLUMN col = {LVCF_ORDER};
+ return !! ListView_GetColumn(view, index, &col);
+}
+int ListView_GetColumnCount(HWND listView) {
+ if (!ProbeColumn(listView, 0)) return 0;
+ int hi = 1;
+ for(;;) {
+ if (!ProbeColumn(listView, hi)) break;
+ hi <<= 1;
+ if (hi <= 0) {
+ PFC_ASSERT(!"Shouldn't get here!");
+ return -1;
+ }
+ }
+ int lo = hi >> 1;
+ //lo is the highest known valid column, hi is the lowest known invalid, let's bsearch thru
+ while(lo + 1 < hi) {
+ PFC_ASSERT( lo < hi );
+ const int mid = lo + (hi - lo) / 2;
+ PFC_ASSERT( lo < mid && mid < hi );
+ if (ProbeColumn(listView, mid)) {
+ lo = mid;
+ } else {
+ hi = mid;
+ }
+ }
+ return hi;
+}
+#else
+int ListView_GetColumnCount(HWND listView) {
+ HWND header = ListView_GetHeader(listView);
+ PFC_ASSERT(header != NULL);
+ return Header_GetItemCount(header);
+}
+#endif
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/listview_helper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/listview_helper.h index cf9b202..97c2b8d 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/listview_helper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/listview_helper.h @@ -8,7 +8,7 @@ namespace listview_helper bool is_item_selected(HWND p_listview,unsigned p_index);
- bool set_item_selection(HWND p_listview,unsigned p_index,bool p_state);
+ void set_item_selection(HWND p_listview,unsigned p_index,bool p_state);
bool select_single_item(HWND p_listview,unsigned p_index);
@@ -35,4 +35,7 @@ static bool ListView_IsItemSelected(HWND p_listview,int p_index) { return ListView_GetItemState(p_listview,p_index,LVIS_SELECTED) != 0;
}
-bool ListView_GetContextMenuPoint(HWND p_list,LPARAM p_coords,POINT & p_point,int & p_selection);
\ No newline at end of file +void ListView_GetContextMenuPoint(HWND p_list,LPARAM p_coords,POINT & p_point,int & p_selection);
+void ListView_GetContextMenuPoint(HWND p_list,POINT p_coords,POINT & p_point,int & p_selection);
+
+int ListView_GetColumnCount(HWND listView);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/meta_table_builder.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/meta_table_builder.h index 90b052a..f61eb74 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/meta_table_builder.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/meta_table_builder.h @@ -1,10 +1,11 @@ -class __meta_table_enum_wrapper {
+class _meta_table_enum_wrapper {
public:
- __meta_table_enum_wrapper(file_info & p_info) : m_info(p_info) {}
- void operator() (const char * p_name,const pfc::chain_list_t<pfc::string8> & p_values) {
- t_size index = infinite;
- for(pfc::chain_list_t<pfc::string8>::const_iterator iter = p_values.first(); iter.is_valid(); ++iter) {
- if (index == infinite) index = m_info.__meta_add_unsafe(p_name,*iter);
+ _meta_table_enum_wrapper(file_info & p_info) : m_info(p_info) {}
+ template<typename t_values>
+ void operator() (const char * p_name,const t_values & p_values) {
+ t_size index = ~0;
+ for(t_values::const_iterator iter = p_values.first(); iter.is_valid(); ++iter) {
+ if (index == ~0) index = m_info.__meta_add_unsafe(p_name,*iter);
else m_info.meta_add_value(index,*iter);
}
}
@@ -12,38 +13,79 @@ private: file_info & m_info;
};
+class _meta_table_enum_wrapper_RG {
+public:
+ _meta_table_enum_wrapper_RG(file_info & p_info) : m_info(p_info) {}
+ template<typename t_values>
+ void operator() (const char * p_name,const t_values & p_values) {
+ if (p_values.get_count() > 0) {
+ if (!m_info.info_set_replaygain(p_name, *p_values.first())) {
+ t_size index = ~0;
+ for(t_values::const_iterator iter = p_values.first(); iter.is_valid(); ++iter) {
+ if (index == ~0) index = m_info.__meta_add_unsafe(p_name,*iter);
+ else m_info.meta_add_value(index,*iter);
+ }
+ }
+ }
+ }
+private:
+ file_info & m_info;
+};
+
//! Purpose: building a file_info metadata table from loose input without search-for-existing-entry bottleneck
class meta_table_builder {
public:
- void add(const char * p_name,const char * p_value,t_size p_value_len = infinite) {
+ typedef pfc::chain_list_v2_t<pfc::string8> t_entry;
+ typedef pfc::map_t<pfc::string8,t_entry,file_info::field_name_comparator> t_content;
+
+ t_content & content() {return m_data;}
+ t_content const & content() const {return m_data;}
+
+ void add(const char * p_name,const char * p_value,t_size p_value_len = ~0) {
if (file_info::g_is_valid_field_name(p_name)) {
- __add(p_name).insert_last()->set_string(p_value,p_value_len);
+ _add(p_name).insert_last()->set_string(p_value,p_value_len);
}
}
void remove(const char * p_name) {
m_data.remove(p_name);
}
- void set(const char * p_name,const char * p_value,t_size p_value_len = infinite) {
+ void set(const char * p_name,const char * p_value,t_size p_value_len = ~0) {
if (file_info::g_is_valid_field_name(p_name)) {
- t_entry & entry = __add(p_name);
+ t_entry & entry = _add(p_name);
entry.remove_all();
entry.insert_last()->set_string(p_value,p_value_len);
}
}
- pfc::chain_list_t<pfc::string8> & add(const char * p_name) {
- if (!file_info::g_is_valid_field_name(p_name)) throw pfc::exception_bug_check();//we return a reference, nothing smarter to do
- return __add(p_name);
+ t_entry & add(const char * p_name) {
+ if (!file_info::g_is_valid_field_name(p_name)) throw pfc::exception_bug_check_v2();//we return a reference, nothing smarter to do
+ return _add(p_name);
}
- void finalize(file_info & p_info) {
+ void finalize(file_info & p_info) const {
p_info.meta_remove_all();
- m_data.enumerate(__meta_table_enum_wrapper(p_info));
+ m_data.enumerate(_meta_table_enum_wrapper(p_info));
+ }
+ void finalize_withRG(file_info & p_info) const {
+ p_info.meta_remove_all(); p_info.set_replaygain(replaygain_info_invalid);
+ m_data.enumerate(_meta_table_enum_wrapper_RG(p_info));
}
void from_info(const file_info & p_info) {
m_data.remove_all();
from_info_overwrite(p_info);
}
+ void from_info_withRG(const file_info & p_info) {
+ m_data.remove_all();
+ from_info_overwrite(p_info);
+ from_RG_overwrite(p_info.get_replaygain());
+ }
+ void from_RG_overwrite(replaygain_info info) {
+ replaygain_info::t_text_buffer buffer;
+ if (info.format_album_gain(buffer)) set("replaygain_album_gain", buffer);
+ if (info.format_track_gain(buffer)) set("replaygain_track_gain", buffer);
+ if (info.format_album_peak(buffer)) set("replaygain_album_peak", buffer);
+ if (info.format_track_peak(buffer)) set("replaygain_track_peak", buffer);
+ }
void from_info_overwrite(const file_info & p_info) {
for(t_size metawalk = 0, metacount = p_info.meta_get_count(); metawalk < metacount; ++metawalk ) {
const t_size valuecount = p_info.meta_enum_value_count(metawalk);
@@ -56,12 +98,20 @@ public: }
}
}
+ void reset() {m_data.remove_all();}
+
+ void fix_itunes_compilation() {
+ static const char cmp[] = "itunescompilation";
+ if (m_data.have_item(cmp)) {
+ // m_data.remove(cmp);
+ if (!m_data.have_item("album artist")) add("album artist", "Various Artists");
+ }
+ }
private:
- typedef pfc::chain_list_t<pfc::string8> t_entry;
- t_entry & __add(const char * p_name) {
+ t_entry & _add(const char * p_name) {
return m_data.find_or_add(p_name);
}
- pfc::map_t<pfc::string8,t_entry,file_info::field_name_comparator> m_data;
+ t_content m_data;
};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/metadb_io_hintlist.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/metadb_io_hintlist.h index 92d60c8..0549649 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/metadb_io_hintlist.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/metadb_io_hintlist.h @@ -4,6 +4,7 @@ public: void hint_reader(service_ptr_t<input_info_reader> p_reader, const char * p_path,abort_callback & p_abort);
void add(metadb_handle_ptr const & p_handle,const file_info & p_info,t_filestats const & p_stats,bool p_fresh);
void run();
+ t_size get_pending_count() const {return m_entries.get_count();}
private:
struct t_entry {
metadb_handle_ptr m_handle;
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/mp3_utils.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/mp3_utils.cpp index f86333a..a3ace28 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/mp3_utils.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/mp3_utils.cpp @@ -180,11 +180,82 @@ unsigned mp3header::get_samples_per_frame() return fr.m_duration;
}
-
bool mp3_utils::IsSameStream(TMPEGFrameInfo const & p_frame1,TMPEGFrameInfo const & p_frame2) {
return
p_frame1.m_channel_mode == p_frame2.m_channel_mode &&
p_frame1.m_sample_rate == p_frame2.m_sample_rate &&
p_frame1.m_layer == p_frame2.m_layer &&
p_frame1.m_mpegversion == p_frame2.m_mpegversion;
-}
\ No newline at end of file +}
+
+
+
+bool mp3_utils::ValidateFrameCRC(const t_uint8 * frameData, t_size frameSize, TMPEGFrameInfo const & info) {
+ if (frameSize < info.m_bytes) return false; //FAIL, incomplete data
+ if (!info.m_crc) return true; //nothing to check, frame appears valid
+ return ExtractFrameCRC(frameData, frameSize, info) == CalculateFrameCRC(frameData, frameSize, info);
+}
+
+static t_uint32 CRC_update(unsigned value, t_uint32 crc)
+{
+ enum { CRC16_POLYNOMIAL = 0x8005 };
+ unsigned i;
+ value <<= 8;
+ for (i = 0; i < 8; i++) {
+ value <<= 1;
+ crc <<= 1;
+ if (((crc ^ value) & 0x10000)) crc ^= CRC16_POLYNOMIAL;
+ }
+ return crc;
+}
+
+
+void mp3_utils::RecalculateFrameCRC(t_uint8 * frameData, t_size frameSize, TMPEGFrameInfo const & info) {
+ PFC_ASSERT( frameSize >= info.m_bytes && info.m_crc );
+
+ const t_uint16 crc = ExtractFrameCRC(frameData, frameSize, info);
+ frameData[4] = (t_uint8)(crc >> 8);
+ frameData[5] = (t_uint8)(crc & 0xFF);
+}
+
+static t_uint16 grabFrameCRC(const t_uint8 * frameData, t_size sideInfoLen) {
+ t_uint32 crc = 0xffff;
+ crc = CRC_update(frameData[2], crc);
+ crc = CRC_update(frameData[3], crc);
+ for (t_size i = 6; i < sideInfoLen; i++) {
+ crc = CRC_update(frameData[i], crc);
+ }
+
+ return (t_uint32) (crc & 0xFFFF);
+}
+
+t_uint16 mp3_utils::ExtractFrameCRC(const t_uint8 * frameData, t_size frameSize, TMPEGFrameInfo const & info) {
+ PFC_ASSERT( frameSize >= info.m_bytes && info.m_crc );
+
+ return ((t_uint16)frameData[4] << 8) | (t_uint16)frameData[5];
+
+}
+t_uint16 mp3_utils::CalculateFrameCRC(const t_uint8 * frameData, t_size frameSize, TMPEGFrameInfo const & info) {
+ PFC_ASSERT( frameSize >= info.m_bytes && info.m_crc );
+
+ t_size sideInfoLen = 0;
+ if (info.m_mpegversion == MPEG_1)
+ sideInfoLen = (info.m_channels == 1) ? 4 + 17 : 4 + 32;
+ else
+ sideInfoLen = (info.m_channels == 1) ? 4 + 9 : 4 + 17;
+
+ //CRC
+ sideInfoLen += 2;
+
+ PFC_ASSERT( sideInfoLen <= frameSize );
+
+ return grabFrameCRC(frameData, sideInfoLen);
+}
+
+
+bool mp3_utils::ValidateFrameCRC(const t_uint8 * frameData, t_size frameSize) {
+ if (frameSize < 4) return false; //FAIL, not a valid frame
+ TMPEGFrameInfo info;
+ if (!ParseMPEGFrameHeader(info, frameData)) return false; //FAIL, not a valid frame
+ return ValidateFrameCRC(frameData, frameSize, info);
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/mp3_utils.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/mp3_utils.h index 3c748c1..0d058f2 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/mp3_utils.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/mp3_utils.h @@ -26,6 +26,16 @@ namespace mp3_utils bool ParseMPEGFrameHeader(TMPEGFrameInfo & p_info,const t_uint8 p_header[4]);
+ bool ValidateFrameCRC(const t_uint8 * frameData, t_size frameSize);
+ bool ValidateFrameCRC(const t_uint8 * frameData, t_size frameSize, TMPEGFrameInfo const & frameInfo);
+
+ //! Assumes valid frame with CRC (frameInfo.m_crc set, frameInfo.m_bytes <= frameSize).
+ t_uint16 ExtractFrameCRC(const t_uint8 * frameData, t_size frameSize, TMPEGFrameInfo const & frameInfo);
+ //! Assumes valid frame with CRC (frameInfo.m_crc set, frameInfo.m_bytes <= frameSize).
+ t_uint16 CalculateFrameCRC(const t_uint8 * frameData, t_size frameSize, TMPEGFrameInfo const & frameInfo);
+ //! Assumes valid frame with CRC (frameInfo.m_crc set, frameInfo.m_bytes <= frameSize).
+ void RecalculateFrameCRC(t_uint8 * frameData, t_size frameSize, TMPEGFrameInfo const & frameInfo);
+
unsigned QueryMPEGFrameSize(const t_uint8 p_header[4]);
bool IsSameStream(TMPEGFrameInfo const & p_frame1,TMPEGFrameInfo const & p_frame2);
};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/playlist_position_reference_tracker.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/playlist_position_reference_tracker.h new file mode 100644 index 0000000..ef3edb9 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/playlist_position_reference_tracker.h @@ -0,0 +1,73 @@ +class playlist_position_reference_tracker : public playlist_callback_impl_base {
+public:
+ //! @param p_trackitem Specifies whether we want to track some specific item rather than just an offset in a playlist. When set to true, item index becomes invalidated when the item we're tracking is removed.
+ playlist_position_reference_tracker(bool p_trackitem = true) : playlist_callback_impl_base(~0), m_trackitem(p_trackitem), m_playlist(pfc_infinite), m_item(pfc_infinite) {}
+
+ void on_items_added(t_size p_playlist,t_size p_start, const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const bit_array & p_selection) {
+ if (p_playlist == m_playlist && m_item != pfc_infinite && p_start <= m_item) {
+ m_item += p_data.get_count();
+ }
+ }
+ void on_items_reordered(t_size p_playlist,const t_size * p_order,t_size p_count) {
+ if (p_playlist == m_playlist) {
+ if (m_item < p_count) {
+ m_item = order_helper::g_find_reverse(p_order,m_item);
+ } else {
+ m_item = pfc_infinite;
+ }
+ }
+ }
+
+ void on_items_removed(t_size p_playlist,const bit_array & p_mask,t_size p_old_count,t_size p_new_count) {
+ if (p_playlist == m_playlist) {
+ if (m_item < p_old_count) {
+ const t_size item_before = m_item;
+ for(t_size walk = p_mask.find_first(true,0,p_old_count); walk < p_old_count; walk = p_mask.find_next(true,walk,p_old_count)) {
+ if (walk < item_before) {
+ m_item--;
+ } else if (walk == item_before) {
+ if (m_trackitem) m_item = pfc_infinite;
+ break;
+ } else {
+ break;
+ }
+ }
+ if (m_item >= p_new_count) m_item = pfc_infinite;
+ } else {
+ m_item = pfc_infinite;
+ }
+ }
+ }
+
+ //todo? could be useful in some cases
+ void on_items_replaced(t_size p_playlist,const bit_array & p_mask,const pfc::list_base_const_t<t_on_items_replaced_entry> & p_data) {}
+
+ void on_playlist_created(t_size p_index,const char * p_name,t_size p_name_len) {
+ if (m_playlist != pfc_infinite && p_index <= m_playlist) m_playlist++;
+ }
+ void on_playlists_reorder(const t_size * p_order,t_size p_count) {
+ if (m_playlist < p_count) m_playlist = order_helper::g_find_reverse(p_order,m_playlist);
+ else m_playlist = pfc_infinite;
+ }
+ void on_playlists_removed(const bit_array & p_mask,t_size p_old_count,t_size p_new_count) {
+ if (m_playlist < p_old_count) {
+ const t_size playlist_before = m_playlist;
+ for(t_size walk = p_mask.find_first(true,0,p_old_count); walk < p_old_count; walk = p_mask.find_next(true,walk,p_old_count)) {
+ if (walk < playlist_before) {
+ m_playlist--;
+ } else if (walk == playlist_before) {
+ m_playlist = pfc_infinite;
+ break;
+ } else {
+ break;
+ }
+ }
+ } else {
+ m_playlist = pfc_infinite;
+ }
+ }
+
+ t_size m_playlist, m_item;
+private:
+ const bool m_trackitem;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/string_filter.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/string_filter.h index 6507407..e40d69b 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/string_filter.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/string_filter.h @@ -1,10 +1,10 @@ class string_filter_noncasesensitive {
public:
- string_filter_noncasesensitive(const char * p_string,t_size p_string_len = infinite) {
+ string_filter_noncasesensitive(const char * p_string,t_size p_string_len = ~0) {
uStringLower(m_pattern,p_string,p_string_len);
}
- bool test(const char * p_string,t_size p_string_len = infinite) const {
+ bool test(const char * p_string,t_size p_string_len = ~0) const {
::uStringLower(m_lowercasebuffer,p_string,p_string_len);
t_size walk = 0;
while(m_pattern[walk] != 0) {
@@ -12,7 +12,7 @@ public: t_size delta = 0;
while(m_pattern[walk+delta] != 0 && m_pattern[walk+delta] != ' ') delta++;
if (delta > 0) {
- if (pfc::string_find_first_ex(m_lowercasebuffer,infinite,m_pattern+walk,delta) == infinite) return false;
+ if (pfc::string_find_first_ex(m_lowercasebuffer,~0,m_pattern+walk,delta) == ~0) return false;
}
walk += delta;
}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/wildcard.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/wildcard.cpp index 63cbb03..c97eee4 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/wildcard.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/wildcard.cpp @@ -15,7 +15,7 @@ static bool test_recur(const char * fn,const char * rm,bool b_sep) return false;
}
else if (*fn==0) return false;
- else if (*rm!='?' && char_lower(pfc::utf8_get_char(fn))!=char_lower(pfc::utf8_get_char(rm))) return false;
+ else if (*rm!='?' && uCharLower(pfc::utf8_get_char(fn))!=uCharLower(pfc::utf8_get_char(rm))) return false;
fn = pfc::utf8_char_next(fn); rm = pfc::utf8_char_next(rm);
}
@@ -41,4 +41,10 @@ bool wildcard_helper::test(const char * fn,const char * pattern,bool b_sep) return false;
}
-bool wildcard_helper::has_wildcards(const char * str) {return strchr(str,'*') || strchr(str,'?');}
\ No newline at end of file +bool wildcard_helper::has_wildcards(const char * str) {return strchr(str,'*') || strchr(str,'?');}
+
+const char * wildcard_helper::get_wildcard_list() {return "*?";}
+
+bool wildcard_helper::is_wildcard(char c) {
+ return c == '*' || c == '?';
+}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/wildcard.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/wildcard.h index 4282094..2445588 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/wildcard.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/wildcard.h @@ -6,6 +6,10 @@ namespace wildcard_helper bool test_path(const char * path,const char * pattern,bool b_separate_by_semicolon = false);//will extract filename from path first
bool test(const char * str,const char * pattern,bool b_separate_by_semicolon = false);//tests if str matches pattern
bool has_wildcards(const char * str);
+ const char * get_wildcard_list();
+ bool is_wildcard(char c);
};
+
+
#endif //__FOOBAR2000_HELPER_WILDCARD_H__
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_dialog.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_dialog.cpp index 613b366..1c38be5 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_dialog.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_dialog.cpp @@ -199,9 +199,7 @@ namespace dialog_helper { dialog_modeless_v2::dialog_modeless_v2(unsigned p_id,HWND p_parent,HINSTANCE p_instance,bool p_stealfocus) : m_wnd(0), m_status(status_construction), m_stealfocus(p_stealfocus)
{
- SetLastError(NO_ERROR);
- HWND result = CreateDialogParam(p_instance,MAKEINTRESOURCE(p_id),p_parent,DlgProc,reinterpret_cast<LPARAM>(this));
- if (result == 0 || m_wnd == 0) throw exception_win32(GetLastError());
+ WIN32_OP( CreateDialogParam(p_instance,MAKEINTRESOURCE(p_id),p_parent,DlgProc,reinterpret_cast<LPARAM>(this)) != NULL );
m_status = status_lifetime;
}
@@ -229,7 +227,9 @@ namespace dialog_helper { assert(thisptr->m_status == status_construction);
thisptr->m_wnd = wnd;
SetWindowLongPtr(wnd,DWLP_USER,lp);
- modeless_dialog_manager::g_add(wnd);
+ if (GetWindowLong(wnd,GWL_STYLE) & WS_POPUP) {
+ modeless_dialog_manager::g_add(wnd);
+ }
}
else thisptr = reinterpret_cast<dialog_modeless_v2*>(GetWindowLongPtr(wnd,DWLP_USER));
@@ -275,4 +275,14 @@ namespace dialog_helper { }
else return FALSE;
}
-}
\ No newline at end of file +}
+
+HWND uCreateDialog(UINT id,HWND parent,DLGPROC proc,LPARAM param)
+{
+ return CreateDialogParam(core_api::get_my_instance(),MAKEINTRESOURCE(id),parent,proc,param);
+}
+
+int uDialogBox(UINT id,HWND parent,DLGPROC proc,LPARAM param)
+{
+ return (int)DialogBoxParam(core_api::get_my_instance(),MAKEINTRESOURCE(id),parent,proc,param);
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_dialog.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_dialog.h index eb0951b..6c409c1 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_dialog.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_dialog.h @@ -1,9 +1,11 @@ #ifndef _FOOBAR2000_HELPERS_WIN32_DIALOG_H_
#define _FOOBAR2000_HELPERS_WIN32_DIALOG_H_
+//DEPRECATED dialog helpers - kept only for compatibility with old code - do not use in new code, use WTL instead.
namespace dialog_helper
{
+
class dialog
{
protected:
@@ -18,9 +20,9 @@ namespace dialog_helper public:
inline HWND get_wnd() {return wnd;}
- int run_modal(unsigned id,HWND parent);
+ __declspec(deprecated) int run_modal(unsigned id,HWND parent);
- HWND run_modeless(unsigned id,HWND parent);
+ __declspec(deprecated) HWND run_modeless(unsigned id,HWND parent);
private:
HWND wnd;
static INT_PTR CALLBACK DlgProc(HWND wnd,UINT msg,WPARAM wp,LPARAM lp);
@@ -30,12 +32,11 @@ namespace dialog_helper modal_dialog_scope m_modal_scope;
};
-
//! This class is meant to be instantiated on-stack, as a local variable. Using new/delete operators instead or even making this a member of another object works, but does not make much sense because of the way this works (single run() call).
class dialog_modal
{
public:
- int run(unsigned p_id,HWND p_parent,HINSTANCE p_instance = core_api::get_my_instance());
+ __declspec(deprecated) int run(unsigned p_id,HWND p_parent,HINSTANCE p_instance = core_api::get_my_instance());
protected:
virtual BOOL on_message(UINT msg,WPARAM wp,LPARAM lp)=0;
@@ -49,7 +50,6 @@ namespace dialog_helper modal_dialog_scope m_modal_scope;
};
-
//! This class is meant to be used with new/delete operators only. Destroying the window - outside create() / WM_INITDIALOG - will result in object calling delete this. If object is deleted directly using delete operator, WM_DESTROY handler may not be called so it should not be used (use destructor of derived class instead).
//! Classes derived from dialog_modeless must not be instantiated in any other way than operator new().
/*! Typical usage : \n
@@ -69,7 +69,7 @@ namespace dialog_helper public:
//! Creates the dialog window. This will call on_message with WM_INITDIALOG. To abort creation, you can call DestroyWindow() on our window; it will not delete the object but make create() return false instead. You should not delete the object from inside WM_INITDIALOG handler or anything else possibly called from create().
//! @returns true on success, false on failure.
- bool create(unsigned p_id,HWND p_parent,HINSTANCE p_instance = core_api::get_my_instance());
+ __declspec(deprecated) bool create(unsigned p_id,HWND p_parent,HINSTANCE p_instance = core_api::get_my_instance());
protected:
//! Standard windows message handler (DialogProc-style). Use get_wnd() to retrieve our dialog window handle.
virtual BOOL on_message(UINT msg,WPARAM wp,LPARAM lp)=0;
@@ -88,14 +88,11 @@ namespace dialog_helper bool m_is_in_create;
};
-#pragma deprecated(dialog_modeless)
-
-
class dialog_modeless_v2
{
protected:
- explicit dialog_modeless_v2(unsigned p_id,HWND p_parent,HINSTANCE p_instance = core_api::get_my_instance(),bool p_stealfocus = true);
+ __declspec(deprecated) explicit dialog_modeless_v2(unsigned p_id,HWND p_parent,HINSTANCE p_instance = core_api::get_my_instance(),bool p_stealfocus = true);
virtual ~dialog_modeless_v2();
HWND get_wnd() const {return m_wnd;}
virtual BOOL on_message(UINT msg,WPARAM wp,LPARAM lp) {return FALSE;}
@@ -113,9 +110,12 @@ namespace dialog_helper dialog_modeless_v2(const dialog_modeless_v2 &);
};
-
};
+//! Wrapper (provided mainly for old code), simplifies parameters compared to standard CreateDialog() by using core_api::get_my_instance().
+HWND uCreateDialog(UINT id,HWND parent,DLGPROC proc,LPARAM param = 0);
+//! Wrapper (provided mainly for old code), simplifies parameters compared to standard DialogBox() by using core_api::get_my_instance().
+int uDialogBox(UINT id,HWND parent,DLGPROC proc,LPARAM param = 0);
-#endif
\ No newline at end of file +#endif
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_misc.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_misc.cpp index d8328cc..07d5034 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_misc.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_misc.cpp @@ -2,8 +2,7 @@ void registerclass_scope_delayed::toggle_on(UINT p_style,WNDPROC p_wndproc,int p_clsextra,int p_wndextra,HICON p_icon,HCURSOR p_cursor,HBRUSH p_background,const TCHAR * p_class_name,const TCHAR * p_menu_name) {
toggle_off();
- WNDCLASS wc;
- memset(&wc,0,sizeof(wc));
+ WNDCLASS wc = {};
wc.style = p_style;
wc.lpfnWndProc = p_wndproc;
wc.cbClsExtra = p_clsextra;
@@ -14,9 +13,7 @@ void registerclass_scope_delayed::toggle_on(UINT p_style,WNDPROC p_wndproc,int p wc.hbrBackground = p_background;
wc.lpszMenuName = p_menu_name;
wc.lpszClassName = p_class_name;
- SetLastError(NO_ERROR);
- m_class = RegisterClass(&wc);
- if (m_class == 0) throw ::exception_win32(GetLastError());
+ WIN32_OP( (m_class = RegisterClass(&wc)) != 0);
}
void registerclass_scope_delayed::toggle_off() {
@@ -26,43 +23,112 @@ void registerclass_scope_delayed::toggle_off() { }
}
-namespace {
- class clipboard_scope {
- public:
- clipboard_scope() : m_open(false) {}
- ~clipboard_scope() {close();}
- bool open(HWND p_owner) {
- close();
- if (OpenClipboard(p_owner) == TRUE) {
- m_open = true;
- return true;
- } else {
- return false;
- }
- }
- void close() {
- if (m_open) {
- m_open = false;
- CloseClipboard();
- }
- }
- private:
- bool m_open;
- };
-};
-bool uGetClipboardString(pfc::string_base & p_out) {
- clipboard_scope scope;
- if (!scope.open(NULL)) return false;
- HANDLE data = GetClipboardData(
-#ifdef UNICODE
- CF_UNICODETEXT
-#else
- CF_TEXT
+
+unsigned QueryScreenDPI() {
+ HDC dc = GetDC(0);
+ unsigned ret = GetDeviceCaps(dc,LOGPIXELSY);
+ ReleaseDC(0,dc);
+ return ret;
+}
+
+
+SIZE QueryScreenDPIEx() {
+ HDC dc = GetDC(0);
+ SIZE ret = { GetDeviceCaps(dc,LOGPIXELSY), GetDeviceCaps(dc,LOGPIXELSY) };
+ ReleaseDC(0,dc);
+ return ret;
+}
+
+
+bool IsMenuNonEmpty(HMENU menu) {
+ unsigned n,m=GetMenuItemCount(menu);
+ for(n=0;n<m;n++) {
+ if (GetSubMenu(menu,n)) return true;
+ if (!(GetMenuState(menu,n,MF_BYPOSITION)&MF_SEPARATOR)) return true;
+ }
+ return false;
+}
+
+PFC_NORETURN PFC_NOINLINE void WIN32_OP_FAIL() {
+ const DWORD code = GetLastError();
+ PFC_ASSERT( code != NO_ERROR );
+ pfc::string_fixed_t<32> debugMsg; debugMsg << "Win32 error #" << (t_uint32)code;
+ TRACK_CODE( debugMsg, throw exception_win32(code) );
+}
+
+#ifdef _DEBUG
+void WIN32_OP_D_FAIL(const wchar_t * _Message, const wchar_t *_File, unsigned _Line) {
+ const DWORD code = GetLastError();
+ pfc::array_t<wchar_t> msgFormatted; msgFormatted.set_size(pfc::strlen_t(_Message) + 64);
+ wsprintfW(msgFormatted.get_ptr(), L"%s (code: %u)", _Message, code);
+ if (IsDebuggerPresent()) {
+ OutputDebugString(TEXT("WIN32_OP_D() failure:\n"));
+ OutputDebugString(msgFormatted.get_ptr());
+ OutputDebugString(TEXT("\n"));
+ pfc::crash();
+ }
+ _wassert(msgFormatted.get_ptr(),_File,_Line);
+}
#endif
- );
- if (data == NULL) return false;
- CGlobalLock lock(data);
- p_out = pfc::stringcvt::string_utf8_from_os( (const TCHAR*) lock.GetPtr(), lock.GetSize() / sizeof(TCHAR) );
+
+void GetOSVersionString(pfc::string_base & out) {
+ out.reset(); GetOSVersionStringAppend(out);
+}
+
+static bool running_under_wine(void) {
+ HMODULE module = GetModuleHandle(_T("ntdll.dll"));
+ if (!module) return false;
+ return GetProcAddress(module, "wine_server_call") != NULL;
+}
+static bool FetchWineInfoAppend(pfc::string_base & out) {
+ typedef const char *(__cdecl *t_wine_get_build_id)(void);
+ typedef void (__cdecl *t_wine_get_host_version)( const char **sysname, const char **release );
+ const HMODULE ntdll = GetModuleHandle(_T("ntdll.dll"));
+ if (ntdll == NULL) return false;
+ t_wine_get_build_id wine_get_build_id;
+ t_wine_get_host_version wine_get_host_version;
+ wine_get_build_id = (t_wine_get_build_id)GetProcAddress(ntdll, "wine_get_build_id");
+ wine_get_host_version = (t_wine_get_host_version)GetProcAddress(ntdll, "wine_get_host_version");
+ if (wine_get_build_id == NULL || wine_get_host_version == NULL) {
+ if (GetProcAddress(ntdll, "wine_server_call") != NULL) {
+ out << "wine (unknown version)";
+ return true;
+ }
+ return false;
+ }
+ const char * sysname = NULL; const char * release = NULL;
+ wine_get_host_version(&sysname, &release);
+ out << wine_get_build_id() << ", on: " << sysname << " / " << release;
return true;
-}
\ No newline at end of file +}
+void GetOSVersionStringAppend(pfc::string_base & out) {
+
+ if (FetchWineInfoAppend(out)) return;
+
+ OSVERSIONINFO ver = {}; ver.dwOSVersionInfoSize = sizeof(ver);
+ WIN32_OP( GetVersionEx(&ver) );
+ SYSTEM_INFO info = {};
+ GetNativeSystemInfo(&info);
+
+ out << "Windows " << (int)ver.dwMajorVersion << "." << (int)ver.dwMinorVersion << "." << (int)ver.dwBuildNumber;
+ if (ver.szCSDVersion[0] != 0) out << " " << pfc::stringcvt::string_utf8_from_os(ver.szCSDVersion, PFC_TABSIZE(ver.szCSDVersion));
+
+ switch(info.wProcessorArchitecture) {
+ case PROCESSOR_ARCHITECTURE_AMD64:
+ out << " x64"; break;
+ case PROCESSOR_ARCHITECTURE_IA64:
+ out << " IA64"; break;
+ case PROCESSOR_ARCHITECTURE_INTEL:
+ out << " x86"; break;
+ }
+}
+
+
+void SetDefaultMenuItem(HMENU p_menu,unsigned p_id) {
+ MENUITEMINFO info = {sizeof(info)};
+ info.fMask = MIIM_STATE;
+ GetMenuItemInfo(p_menu,p_id,FALSE,&info);
+ info.fState |= MFS_DEFAULT;
+ SetMenuItemInfo(p_menu,p_id,FALSE,&info);
+}
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_misc.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_misc.h index db61a29..5180953 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_misc.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/win32_misc.h @@ -1,3 +1,30 @@ +PFC_NORETURN PFC_NOINLINE void WIN32_OP_FAIL();
+
+#ifdef _DEBUG
+void WIN32_OP_D_FAIL(const wchar_t * _Message, const wchar_t *_File, unsigned _Line);
+#endif
+
+//Throws an exception when (OP) evaluates to false/zero.
+#define WIN32_OP(OP) \
+ { \
+ SetLastError(NO_ERROR); \
+ if (!(OP)) WIN32_OP_FAIL(); \
+ }
+
+//WIN32_OP_D() acts like an assert specialized for win32 operations in debug build, ignores the return value / error codes in release build.
+//Use WIN32_OP_D() instead of WIN32_OP() on operations that are extremely unlikely to fail, so failure condition checks are performed in the debug build only, to avoid bloating release code with pointless error checks.
+#ifdef _DEBUG
+#define WIN32_OP_D(OP) \
+ { \
+ SetLastError(NO_ERROR); \
+ if (!(OP)) WIN32_OP_D_FAIL(PFC_WIDESTRING(#OP), PFC_WIDESTRING(__FILE__), __LINE__); \
+ }
+
+#else
+#define WIN32_OP_D(OP) (void)( (OP), 0);
+#endif
+
+
class registerclass_scope_delayed {
public:
registerclass_scope_delayed() : m_class(0) {}
@@ -99,70 +126,285 @@ private: t_object m_object;
};
-class CGlobalLock {
+typedef CGlobalLockScope CGlobalLock;//for compatibility, implementation moved elsewhere
+
+static bool SetClipboardDataBlock(UINT p_format,const void * p_block,t_size p_block_size) {
+ bool success = false;
+ if (OpenClipboard(NULL)) {
+ EmptyClipboard();
+ HANDLE handle = GlobalAlloc(GMEM_MOVEABLE,p_block_size);
+ if (handle == NULL) {
+ CloseClipboard();
+ throw std::bad_alloc();
+ }
+ {CGlobalLock lock(handle);memcpy(lock.GetPtr(),p_block,p_block_size);}
+ if (SetClipboardData(p_format,handle) == NULL) {
+ GlobalFree(handle);//todo?
+ } else {
+ success = true;
+ }
+ CloseClipboard();
+ }
+ return success;
+}
+
+template<typename t_array>
+static bool SetClipboardDataBlock(UINT p_format,const t_array & p_array) {
+ PFC_STATIC_ASSERT( sizeof(p_array[0]) == 1 );
+ return SetClipboardDataBlock(p_format,p_array.get_ptr(),p_array.get_size());
+}
+
+template<typename t_array>
+static bool GetClipboardDataBlock(UINT p_format,t_array & p_array) {
+ PFC_STATIC_ASSERT( sizeof(p_array[0]) == 1 );
+ if (OpenClipboard(NULL)) {
+ HANDLE handle = GetClipboardData(p_format);
+ if (handle == NULL) {
+ CloseClipboard();
+ return false;
+ }
+ {
+ CGlobalLock lock(handle);
+ const t_size size = lock.GetSize();
+ try {
+ p_array.set_size(size);
+ } catch(...) {
+ CloseClipboard();
+ throw;
+ }
+ memcpy(p_array.get_ptr(),lock.GetPtr(),size);
+ }
+ CloseClipboard();
+ return true;
+ } else {
+ return false;
+ }
+}
+
+
+class OleInitializeScope {
public:
- CGlobalLock(HGLOBAL p_handle) : m_handle(p_handle), m_ptr(GlobalLock(p_handle)) {}
- ~CGlobalLock() {
- if (m_ptr != NULL) GlobalUnlock(m_handle);
+ OleInitializeScope() {
+ if (FAILED(OleInitialize(NULL))) throw pfc::exception("OleInitialize() failure");
}
- void * GetPtr() const {return m_ptr;}
- t_size GetSize() const {return GlobalSize(m_handle);}
+ ~OleInitializeScope() {
+ OleUninitialize();
+ }
+
private:
- void * m_ptr;
- HGLOBAL m_handle;
+ PFC_CLASS_NOT_COPYABLE(OleInitializeScope,OleInitializeScope);
};
-bool uGetClipboardString(pfc::string_base & p_out);
+class CoInitializeScope {
+public:
+ CoInitializeScope() {
+ if (FAILED(CoInitialize(NULL))) throw pfc::exception("CoInitialize() failed");
+ }
+ CoInitializeScope(DWORD params) {
+ if (FAILED(CoInitializeEx(NULL, params))) throw pfc::exception("CoInitialize() failed");
+ }
+ ~CoInitializeScope() {
+ CoUninitialize();
+ }
+ PFC_CLASS_NOT_COPYABLE_EX(CoInitializeScope)
+};
+
+
+unsigned QueryScreenDPI();
+
+SIZE QueryScreenDPIEx();
+
+static WORD GetOSVersion() {
+ const DWORD ver = GetVersion();
+ return (WORD)HIBYTE(LOWORD(ver)) | ((WORD)LOBYTE(LOWORD(ver)) << 8);
+}
+#if _WIN32_WINNT >= 0x501
+#define WS_EX_COMPOSITED_Safe() WS_EX_COMPOSITED
+#else
+static DWORD WS_EX_COMPOSITED_Safe() {
+ return (GetOSVersion() < 0x501) ? 0 : 0x02000000L;
+}
+#endif
-#ifdef __ATLWIN_H__
+static t_size GetOptimalWorkerThreadCount() throw() {
+ DWORD_PTR mask,system;
+ t_size ret = 0;
+ GetProcessAffinityMask(GetCurrentProcess(),&mask,&system);
+ for(t_size n=0;n<sizeof(mask)*8;n++) {
+ if (mask & ((DWORD_PTR)1<<n)) ret++;
+ }
+ if (ret == 0) return 1;
+ return ret;
+}
-class CMenuSelectionReceiver : public CWindowImpl<CMenuSelectionReceiver> {
+//! IMPORTANT: all classes derived from CVerySimpleThread must call WaitTillThreadDone() in their destructor, to avoid object destruction during a virtual function call!
+class CVerySimpleThread {
public:
- CMenuSelectionReceiver(HWND p_parent) {
- SetLastError(NO_ERROR);
- if (Create(p_parent) == NULL) throw exception_win32(GetLastError());
+ CVerySimpleThread() : m_thread(INVALID_HANDLE_VALUE) {}
+ ~CVerySimpleThread() {WaitTillThreadDone();}
+ void StartThread() {
+ CloseThread();
+ HANDLE thread;
+ WIN32_OP( (thread = CreateThread(NULL,0,g_entry,reinterpret_cast<void*>(this),0,NULL) ) != NULL);
+ m_thread = thread;
}
- ~CMenuSelectionReceiver() {
- DestroyWindow();
+ bool IsThreadActive() const {
+ return m_thread != INVALID_HANDLE_VALUE;
}
- typedef CWindowImpl<CMenuSelectionReceiver> _baseClass;
- DECLARE_WND_CLASS_EX(TEXT("{DF0087DB-E765-4283-BBAB-6AB2E8AB64A1}"),0,0);
-
- BEGIN_MSG_MAP(CMenuSelectionReceiver)
- MESSAGE_HANDLER(WM_MENUSELECT,OnMenuSelect)
- END_MSG_MAP()
-protected:
- virtual bool QueryHint(unsigned p_id,pfc::string_base & p_out) {
- return false;
+ void WaitTillThreadDone() {
+ CloseThread();
}
+protected:
+ virtual void ThreadProc() {}
private:
- LRESULT OnMenuSelect(UINT,WPARAM p_wp,LPARAM p_lp,BOOL&) {
- if (p_lp != 0) {
- if (HIWORD(p_wp) & MF_POPUP) {
- m_status.release();
- } else {
- pfc::string8 msg;
- if (!QueryHint(LOWORD(p_wp),msg)) {
- m_status.release();
- } else {
- if (m_status.is_empty()) {
- if (!static_api_ptr_t<ui_control>()->override_status_text_create(m_status)) m_status.release();
- }
- if (m_status.is_valid()) {
- m_status->override_text(msg);
- }
- }
- }
- } else {
- m_status.release();
+ void CloseThread() {
+ if (IsThreadActive()) {
+ WaitForSingleObject(m_thread,INFINITE);
+ CloseHandle(m_thread); m_thread = INVALID_HANDLE_VALUE;
}
+ }
+
+ static DWORD CALLBACK g_entry(void* p_instance) {
+ return reinterpret_cast<CVerySimpleThread*>(p_instance)->entry();
+ }
+ unsigned entry() {
+ try {
+ ThreadProc();
+ } catch(...) {}
return 0;
}
+ HANDLE m_thread;
+
+ PFC_CLASS_NOT_COPYABLE_EX(CVerySimpleThread)
+};
+
+//! IMPORTANT: all classes derived from CSimpleThread must call AbortThread()/WaitTillThreadDone() in their destructors, to avoid object destruction during a virtual function call!
+class CSimpleThread : private completion_notify_receiver {
+public:
+ CSimpleThread() : m_thread(INVALID_HANDLE_VALUE) {}
+ ~CSimpleThread() {AbortThread();}
+ void StartThread() {
+ AbortThread();
+ m_abort.reset();
+ m_ownNotify = create_task(0);
+ HANDLE thread;
+ WIN32_OP( (thread = CreateThread(NULL,0,g_entry,reinterpret_cast<void*>(this),0,NULL) ) != NULL);
+ m_thread = thread;
+ }
+ void AbortThread() {
+ m_abort.abort();
+ CloseThread();
+ }
+ bool IsThreadActive() const {
+ return m_thread != INVALID_HANDLE_VALUE;
+ }
+ void WaitTillThreadDone() {
+ CloseThread();
+ }
+protected:
+ virtual unsigned ThreadProc(abort_callback & p_abort) {return 0;}
+ //! Called when the thread has completed normally, with p_code equal to ThreadProc retval. Not called when AbortThread() or WaitTillThreadDone() was used to abort the thread / wait for the thread to finish.
+ virtual void ThreadDone(unsigned p_code) {};
+private:
+ void CloseThread() {
+ if (IsThreadActive()) {
+ WaitForSingleObject(m_thread,INFINITE);
+ CloseHandle(m_thread); m_thread = INVALID_HANDLE_VALUE;
+ }
+ orphan_all_tasks();
+ }
- service_ptr_t<ui_status_text_override> m_status;
+ void on_task_completion(unsigned p_id,unsigned p_status) {
+ if (IsThreadActive()) {
+ CloseThread();
+ ThreadDone(p_status);
+ }
+ }
+ static DWORD CALLBACK g_entry(void* p_instance) {
+ return reinterpret_cast<CSimpleThread*>(p_instance)->entry();
+ }
+ unsigned entry() {
+ unsigned code = ~0;
+ try {
+ code = ThreadProc(m_abort);
+ } catch(...) {}
+ if (!m_abort.is_aborting()) m_ownNotify->on_completion_async(code);
+ return code;
+ }
+ abort_callback_impl m_abort;
+ HANDLE m_thread;
+ completion_notify_ptr m_ownNotify;
- PFC_CLASS_NOT_COPYABLE(CMenuSelectionReceiver,CMenuSelectionReceiver);
+ PFC_CLASS_NOT_COPYABLE_EX(CSimpleThread);
};
-#endif //#ifdef __ATLWIN_H__
+
+
+
+class EnableWindowScope {
+public:
+ EnableWindowScope(HWND p_window,BOOL p_state) throw() : m_window(p_window) {
+ m_oldState = IsWindowEnabled(m_window);
+ EnableWindow(m_window,p_state);
+ }
+ ~EnableWindowScope() throw() {
+ EnableWindow(m_window,m_oldState);
+ }
+
+private:
+ BOOL m_oldState;
+ HWND m_window;
+};
+
+bool IsMenuNonEmpty(HMENU menu);
+
+class SetTextColorScope {
+public:
+ SetTextColorScope(HDC dc, COLORREF col) throw() : m_dc(dc) {
+ m_oldCol = SetTextColor(dc,col);
+ }
+ ~SetTextColorScope() throw() {
+ SetTextColor(m_dc,m_oldCol);
+ }
+ PFC_CLASS_NOT_COPYABLE_EX(SetTextColorScope)
+private:
+ HDC m_dc;
+ COLORREF m_oldCol;
+};
+
+class CloseHandleScope {
+public:
+ CloseHandleScope(HANDLE handle) throw() : m_handle(handle) {}
+ ~CloseHandleScope() throw() {CloseHandle(m_handle);}
+ HANDLE Detach() throw() {return pfc::replace_t(m_handle,INVALID_HANDLE_VALUE);}
+ HANDLE Get() const throw() {return m_handle;}
+ void Close() throw() {CloseHandle(Detach());}
+ PFC_CLASS_NOT_COPYABLE_EX(CloseHandleScope)
+private:
+ HANDLE m_handle;
+};
+
+class CModelessDialogEntry {
+public:
+ inline CModelessDialogEntry() : m_wnd() {}
+ inline CModelessDialogEntry(HWND p_wnd) : m_wnd() {Set(p_wnd);}
+ inline ~CModelessDialogEntry() {Set(NULL);}
+
+ void Set(HWND p_new) {
+ static_api_ptr_t<modeless_dialog_manager> api;
+ if (m_wnd) api->remove(m_wnd);
+ m_wnd = p_new;
+ if (m_wnd) api->add(m_wnd);
+ }
+private:
+ PFC_CLASS_NOT_COPYABLE_EX(CModelessDialogEntry);
+ HWND m_wnd;
+};
+
+void GetOSVersionString(pfc::string_base & out);
+void GetOSVersionStringAppend(pfc::string_base & out);
+
+
+
+void SetDefaultMenuItem(HMENU p_menu,unsigned p_id);
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/window_placement_helper.cpp b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/window_placement_helper.cpp index e1b5994..9a616d9 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/window_placement_helper.cpp +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/window_placement_helper.cpp @@ -13,8 +13,9 @@ static BOOL CALLBACK __MonitorEnumProc( ) {
RECT * clip = (RECT*)dwData;
RECT newclip;
- UnionRect(&newclip,clip,lprcMonitor);
- *clip = newclip;
+ if (UnionRect(&newclip,clip,lprcMonitor)) {
+ *clip = newclip;
+ }
return TRUE;
}
@@ -35,13 +36,10 @@ static bool test_rect(const RECT * rc) { }
-
bool cfg_window_placement::read_from_window(HWND window)
{
- WINDOWPLACEMENT wp;
- memset(&wp,0,sizeof(wp));
- if (g_is_enabled())
- {
+ WINDOWPLACEMENT wp = {};
+ if (g_is_enabled()) {
wp.length = sizeof(wp);
if (!GetWindowPlacement(window,&wp))
memset(&wp,0,sizeof(wp));
@@ -54,6 +52,10 @@ bool cfg_window_placement::read_from_window(HWND window) return m_data.length == sizeof(m_data);
}
+void cfg_window_placement::on_window_creation_silent(HWND window) {
+ PFC_ASSERT(!m_windows.have_item(window));
+ m_windows.add_item(window);
+}
bool cfg_window_placement::on_window_creation(HWND window)
{
bool ret = false;
@@ -102,10 +104,11 @@ void cfg_window_placement::get_data_raw(stream_writer * p_stream,abort_callback }
void cfg_window_placement::set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) {
+ if (p_sizehint == 0) return;
WINDOWPLACEMENT temp;
try {
p_stream->read_object(&temp,sizeof(temp),p_abort);
- } catch(exception_io_data const &) {return;}
+ } catch(exception_io_data) {return;}
if (temp.length == sizeof(temp)) m_data = temp;
}
@@ -116,11 +119,11 @@ cfg_window_placement::cfg_window_placement(const GUID & p_guid) : cfg_var(p_guid }
-cfg_window_size::cfg_window_size(const GUID & p_guid) : cfg_var(p_guid), m_width(infinite32), m_height(infinite32) {}
+cfg_window_size::cfg_window_size(const GUID & p_guid) : cfg_var(p_guid), m_width(~0), m_height(~0) {}
static BOOL SetWindowSize(HWND p_wnd,unsigned p_x,unsigned p_y)
{
- if (p_x != infinite32 && p_y != infinite32)
+ if (p_x != ~0 && p_y != ~0)
return SetWindowPos(p_wnd,0,0,0,p_x,p_y,SWP_NOACTIVATE|SWP_NOMOVE|SWP_NOZORDER);
else
return FALSE;
@@ -162,13 +165,13 @@ bool cfg_window_size::read_from_window(HWND p_wnd) }
else
{
- m_width = m_height = infinite32;
+ m_width = m_height = ~0;
return false;
}
}
else
{
- m_width = m_height = infinite32;
+ m_width = m_height = ~0;
return false;
}
}
@@ -184,7 +187,7 @@ void cfg_window_size::get_data_raw(stream_writer * p_stream,abort_callback & p_a }
}
- if (m_width != infinite32 && m_height != infinite32) {
+ if (m_width != ~0 && m_height != ~0) {
p_stream->write_lendian_t(m_width,p_abort);
p_stream->write_lendian_t(m_height,p_abort);
}
@@ -192,11 +195,12 @@ void cfg_window_size::get_data_raw(stream_writer * p_stream,abort_callback & p_a }
void cfg_window_size::set_data_raw(stream_reader * p_stream,t_size p_sizehint,abort_callback & p_abort) {
+ if (p_sizehint == 0) return;
t_uint32 width,height;
try {
p_stream->read_lendian_t(width,p_abort);
p_stream->read_lendian_t(height,p_abort);
- } catch(exception_io_data const &) {return;}
+ } catch(exception_io_data) {return;}
m_width = width; m_height = height;
}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/window_placement_helper.h b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/window_placement_helper.h index dbe276d..24cfe20 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/window_placement_helper.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/helpers/window_placement_helper.h @@ -5,6 +5,7 @@ class cfg_window_placement : public cfg_var {
public:
bool on_window_creation(HWND window);//returns true if window position has been changed, false if not
+ void on_window_creation_silent(HWND window);
void on_window_destruction(HWND window);
bool read_from_window(HWND window);
void get_data_raw(stream_writer * p_stream,abort_callback & p_abort);
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-license.txt b/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-license.txt new file mode 100644 index 0000000..fb8f731 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-license.txt @@ -0,0 +1,14 @@ +foobar2000 1.1 SDK
+Copyright (c) 2001-2011, Peter Pawlowski
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation or other materials provided with the distribution.
+
+Usage restrictions:
+It is illegal to use this SDK as a part of foobar2000 components that operate outside of legally documented programming interfaces (APIs), such as using window procedure hooks to modify user interface behaviors. We believe components doing so to be harmful to our userbase by introducing compatibility issues and dependencies on undocumented behaviors of our code that may change at any time without any notice or an update to the SDK which would reflect the change.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-readme.css b/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-readme.css new file mode 100644 index 0000000..1020d9b --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-readme.css @@ -0,0 +1,1291 @@ +a.interwiki { +padding-left : 16px; +} +a.iw_wp { +} +a.iw_wpde { +} +a.iw_wpmeta { +} +a.iw_doku { +} +a.iw_sb { +} +a.iw_amazon { +} +a.iw_amazon_de { +} +a.iw_amazon_uk { +} +a.iw_phpfn { +} +a.iw_dokubug { +} +a.iw_coral { +} +a.iw_google { +} +a.iw_meatball { +} +a.iw_wiki { +} +a.mediafile { +padding-left : 18px; +padding-bottom : 1px; +} +a.mf_jpg { +} +a.mf_jpeg { +} +a.mf_gif { +} +a.mf_png { +} +a.mf_tgz { +} +a.mf_tar { +} +a.mf_gz { +} +a.mf_zip { +} +a.mf_rar { +} +a.mf_pdf { +} +a.mf_ps { +} +a.mf_doc { +} +a.mf_xls { +} +a.mf_ppt { +} +a.mf_rtf { +} +a.mf_swf { +} +a.mf_rpm { +} +a.mf_deb { +} +a.mf_sxw { +} +a.mf_sxc { +} +a.mf_sxi { +} +a.mf_sxd { +} +a.mf_odc { +} +a.mf_odf { +} +a.mf_odg { +} +a.mf_odi { +} +a.mf_odp { +} +a.mf_ods { +} +a.mf_odt { +} +div.clearer { +clear : both; +line-height : 0; +height : 0; +overflow : hidden; +} +div.no { +display : inline; +margin : 0; +padding : 0; +} +.hidden { +display : none; +} +div.error { +background : #fcc; +color : #000; +border-bottom : 1px solid #faa; +font-size : 90%; +margin : 0; +padding-left : 3em; +overflow : hidden; +} +div.info { +background : #ccf; +color : #000; +border-bottom : 1px solid #aaf; +font-size : 90%; +margin : 0; +padding-left : 3em; +overflow : hidden; +} +div.success { +background : #cfc; +color : #000; +border-bottom : 1px solid #afa; +font-size : 90%; +margin : 0; +padding-left : 3em; +overflow : hidden; +} +div.notify { +background : #ffc; +color : #000; +border-bottom : 1px solid #ffa; +font-size : 90%; +margin : 0; +padding-left : 3em; +overflow : hidden; +} +.medialeft { +float : left; +} +.mediaright { +float : right; +} +.mediacenter { +display : block; +margin-left : auto; +margin-right : auto; +} +.leftalign { +text-align : left; +} +.centeralign { +text-align : center; +} +.rightalign { +text-align : right; +} +em.u { +font-style : normal; +text-decoration : underline; +} +em em.u { +font-style : italic; +} +.code .br0 { +color : #6c6; +} +.code .co1 { +color : #808080; +font-style : italic; +} +.code .co2 { +color : #808080; +font-style : italic; +} +.code .co3 { +color : #808080; +} +.code .coMULTI { +color : #808080; +font-style : italic; +} +.code .es0 { +color : #009; +font-weight : bold; +} +.code .kw1 { +color : #b1b100; +} +.code .kw2 { +color : #000; +font-weight : bold; +} +.code .kw3 { +color : #006; +} +.code .kw4 { +color : #933; +} +.code .kw5 { +color : #00f; +} +.code .me1 { +color : #060; +} +.code .me2 { +color : #060; +} +.code .nu0 { +color : #c6c; +} +.code .re0 { +color : #00f; +} +.code .re1 { +color : #00f; +} +.code .re2 { +color : #00f; +} +.code .re3 { +color : #f33; +font-weight : bold; +} +.code .re4 { +color : #099; +} +.code .st0 { +color : #f00; +} +.code .sy0 { +color : #6c6; +} +#acl__manager label { +text-align : left; +font-weight : normal; +display : inline; +} +#acl__manager table { +margin-left : 10%; +width : 80%; +} +#config__manager div.success, #config__manager div.error, #config__manager div.info { +background-position : 0.5em 0%; +padding : 0.5em; +text-align : center; +} +#config__manager fieldset { +margin : 1em; +width : auto; +margin-bottom : 2em; +background-color : #dee7ec; +color : #000; +padding : 0 1em; +} +#config__manager legend { +font-size : 1.25em; +} +#config__manager table { +margin : 1em 0; +width : 100%; +} +#config__manager fieldset td { +text-align : left; +} +#config__manager fieldset td.value { +width : 30em; +} +#config__manager td input.edit { +width : 30em; +} +#config__manager td textarea.edit { +width : 27.5em; +height : 4em; +} +#config__manager tr .input, #config__manager tr input, #config__manager tr textarea, #config__manager tr select { +background-color : #fff; +color : #000; +} +#config__manager tr.default .input, #config__manager tr.default input, #config__manager tr.default textarea, #config__manager tr.default select, #config__manager .selectiondefault { +background-color : #cdf; +color : #000; +} +#config__manager tr.protected .input, #config__manager tr.protected input, #config__manager tr.protected textarea, #config__manager tr.protected select, #config__manager tr.protected .selection { +background-color : #fcc !important ; +color : #000 !important ; +} +#config__manager td.error { +background-color : red; +color : #000; +} +#config__manager .selection { +width : 14.8em; +float : left; +margin : 0 0.3em 2px 0; +} +#config__manager .selection label { +float : right; +width : 14em; +font-size : 90%; +} +* html #config__manager .selection label { +padding-top : 2px; +} +#config__manager .selection input.checkbox { +padding-left : 0.7em; +} +#config__manager .other { +clear : both; +padding-top : 0.5em; +} +#config__manager .other label { +padding-left : 2px; +font-size : 90%; +} +#plugin__manager h2 { +margin-left : 0; +} +#plugin__manager form { +display : block; +margin : 0; +padding : 0; +} +#plugin__manager legend { +display : none; +} +#plugin__manager fieldset { +width : auto; +} +#plugin__manager .button { +margin : 0; +} +#plugin__manager p, #plugin__manager label { +text-align : left; +} +#plugin__manager .hidden { +display : none; +} +#plugin__manager .new { +background : #dee7ec; +} +#plugin__manager input[disabled] { +color : #ccc; +border-color : #ccc; +} +#plugin__manager .pm_menu, #plugin__manager .pm_info { +margin-left : 0; +text-align : left; +} +#plugin__manager .pm_menu { +float : left; +width : 48%; +} +#plugin__manager .pm_info { +float : right; +width : 50%; +} +#plugin__manager .common fieldset { +margin : 0; +padding : 0 0 1em 0; +text-align : left; +border : none; +} +#plugin__manager .common label { +padding : 0 0 0.5em 0; +} +#plugin__manager .common input.edit { +width : 24em; +margin : 0.5em; +} +#plugin__manager .plugins fieldset { +color : #000; +background : #fff; +text-align : right; +border-top : none; +border-right : none; +border-left : none; +} +#plugin__manager .plugins fieldset.protected { +background : #fdd; +color : #000; +} +#plugin__manager .plugins fieldset.disabled { +background : #e0e0e0; +color : #a8a8a8; +} +#plugin__manager .plugins .legend { +color : #000; +background : inherit; +display : block; +margin : 0; +padding : 0; +font-size : 1em; +line-height : 1.4em; +font-weight : normal; +text-align : left; +float : left; +padding : 0; +clear : none; +} +#plugin__manager .plugins .button { +font-size : 95%; +} +#plugin__manager .plugins fieldset.buttons { +border : none; +} +#plugin__manager .plugins fieldset.buttons .button { +float : left; +} +#plugin__manager .pm_info h3 { +margin-left : 0; +} +#plugin__manager .pm_info dl { +margin : 1em 0; +padding : 0; +} +#plugin__manager .pm_info dt { +width : 6em; +float : left; +clear : left; +margin : 0; +padding : 0; +} +#plugin__manager .pm_info dd { +margin : 0 0 0 7em; +padding : 0; +background : none; +} +#plugin__manager .plugins .enable { +float : left; +width : auto; +margin-right : 0.5em; +} +#user__manager tr.disabled { +color : #6f6f6f; +background : #e4e4e4; +} +#user__manager tr.user_info { +vertical-align : top; +} +#user__manager div.edit_user { +width : 46%; +float : left; +} +#user__manager table { +margin-bottom : 1em; +} +#user__manager input.button[disabled] { +color : #ccc !important ; +border-color : #ccc !important ; +} +div.dokuwiki .header { +padding : 3px 0 0 2px; +} +div.dokuwiki .pagename { +float : left; +font-size : 200%; +font-weight : bolder; +color : #dee7ec; +text-align : left; +vertical-align : middle; +} +div.dokuwiki .pagename a { +color : #436976 !important ; +text-decoration : none !important ; +} +div.dokuwiki .logo { +float : right; +font-size : 220%; +font-weight : bolder; +text-align : right; +vertical-align : middle; +} +div.dokuwiki .logo a { +color : #dee7ec !important ; +text-decoration : none !important ; +font-variant : small-caps; +letter-spacing : 2pt; +} +div.dokuwiki .bar { +border-top : 1px solid #8cacbb; +border-bottom : 1px solid #8cacbb; +background : #dee7ec; +padding : 0.1em 0.15em; +clear : both; +} +div.dokuwiki .bar-left { +float : left; +} +div.dokuwiki .bar-right { +float : right; +text-align : right; +} +div.dokuwiki #bar__bottom { +margin-bottom : 3px; +} +div.dokuwiki div.meta { +clear : both; +margin-top : 1em; +color : #638c9c; +font-size : 70%; +} +div.dokuwiki div.meta div.user { +float : left; +} +div.dokuwiki div.meta div.doc { +text-align : right; +} +* { +padding : 0; +margin : 0; +} +body { +font : 80% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif; +background-color : #fff; +color : #000; +} +div.dokuwiki div.page { +margin : 4px 2em 0 1em; +text-align : justify; +} +div.dokuwiki table { +font-size : 100%; +} +div.dokuwiki img { +border : 0; +} +div.dokuwiki p, div.dokuwiki blockquote, div.dokuwiki table, div.dokuwiki pre { +margin : 0 0 1em 0; +} +div.dokuwiki hr { +border : 0; +border-top : 1px solid #8cacbb; +text-align : center; +height : 0; +} +div.dokuwiki div.nothing { +text-align : center; +margin : 2em; +} +div.dokuwiki form { +border : none; +display : inline; +} +div.dokuwiki label.block { +display : block; +text-align : right; +font-weight : bold; +} +div.dokuwiki label.simple { +display : block; +text-align : left; +font-weight : normal; +} +div.dokuwiki label.block input.edit { +width : 50%; +} +div.dokuwiki fieldset { +width : 300px; +text-align : center; +border : 1px solid #8cacbb; +padding : 0.5em; +margin : auto; +} +div.dokuwiki textarea.edit { +font-family : monospace; +font-size : 14px; +color : #000; +background-color : #fff; +border : 1px solid #8cacbb; +padding : 0.3em 0 0 0.3em; +width : 100%; +} +html > body div.dokuwiki textarea.edit { +background : #fff; +} +div.dokuwiki input.edit, div.dokuwiki select.edit { +font-size : 100%; +border : 1px solid #8cacbb; +color : #000; +background-color : #fff; +vertical-align : middle; +margin : 1px; +padding : 0.2em 0.3em; +display : inline; +} +html > body div.dokuwiki input.edit, html > body div.dokuwiki select.edit { +background : #fff; +} +div.dokuwiki select.edit { +padding : 0.1em 0; +} +div.dokuwiki input.missing { +font-size : 100%; +border : 1px solid #8cacbb; +color : #000; +background-color : #fcc; +vertical-align : middle; +margin : 1px; +padding : 0.2em 0.3em; +display : inline; +} +div.dokuwiki textarea.edit[disabled], div.dokuwiki textarea.edit[readonly], div.dokuwiki input.edit[disabled], div.dokuwiki input.edit[readonly], div.dokuwiki select.edit[disabled] { +background-color : #f5f5f5 !important ; +color : #666 !important ; +} +div.dokuwiki div.toolbar, div.dokuwiki div#wiki__editbar { +margin : 2px 0; +text-align : left; +} +div.dokuwiki div#size__ctl { +float : right; +width : 60px; +height : 2.7em; +} +div.dokuwiki #size__ctl img { +cursor : pointer; +} +div.dokuwiki div#wiki__editbar div.editButtons { +float : left; +padding : 0 1em 0.7em 0; +} +div.dokuwiki div#wiki__editbar div.summary { +float : left; +} +div.dokuwiki .nowrap { +white-space : nowrap; +} +div.dokuwiki div#draft__status { +float : right; +color : #638c9c; +} +div.dokuwiki input.button, div.dokuwiki button.button { +border : 1px solid #8cacbb; +color : #000; +background-color : #fff; +vertical-align : middle; +text-decoration : none; +font-size : 100%; +cursor : pointer; +margin : 1px; +padding : 0.125em 0.4em; +} +html > body div.dokuwiki input.button, html > body div.dokuwiki button.button { +background : #fff; +} +* html div.dokuwiki input.button, * html div.dokuwiki button.button { +height : 1.8em; +} +div.dokuwiki div.secedit input.button { +border : 1px solid #8cacbb; +color : #000; +background-color : #fff; +vertical-align : middle; +text-decoration : none; +margin : 0; +padding : 0; +font-size : 10px; +cursor : pointer; +float : right; +display : inline; +} +div.dokuwiki div.pagenav { +margin : 1em 0 0 0; +} +div.dokuwiki div.pagenav-prev { +text-align : right; +float : left; +width : 49%; +} +div.dokuwiki div.pagenav-next { +text-align : left; +float : right; +width : 49%; +} +div.dokuwiki a:link, div.dokuwiki a:visited { +color : #436976; +text-decoration : none; +} +div.dokuwiki a:hover, div.dokuwiki a:active { +color : #000; +text-decoration : underline; +} +div.dokuwiki h1 a, div.dokuwiki h2 a, div.dokuwiki h3 a, div.dokuwiki h4 a, div.dokuwiki h5 a, div.dokuwiki a.nolink { +color : #000 !important ; +text-decoration : none !important ; +} +div.dokuwiki a.urlextern { +background : transparent; +padding : 1px 0 1px 16px; +} +div.dokuwiki a.windows { +background : transparent; +padding : 1px 0 1px 16px; +} +div.dokuwiki a.urlextern:link, div.dokuwiki a.windows:link, div.dokuwiki a.interwiki:link { +color : #436976; +} +div.dokuwiki a.urlextern:visited, div.dokuwiki a.windows:visited, div.dokuwiki a.interwiki:visited { +color : purple; +} +div.dokuwiki a.urlextern:hover, div.dokuwiki a.urlextern:active, div.dokuwiki a.windows:hover, div.dokuwiki a.windows:active, div.dokuwiki a.interwiki:hover, div.dokuwiki a.interwiki:active { +color : #000; +} +div.dokuwiki a.mail { +background : transparent; +padding : 1px 0 1px 16px; +} +div.dokuwiki a.wikilink1 { +color : #090 !important ; +} +div.dokuwiki a.wikilink2 { +color : #f30 !important ; +text-decoration : none !important ; +border-bottom : 1px dashed #f30 !important ; +} +div.dokuwiki div.preview { +background-color : #f5f5f5; +margin : 0 0 0 2em; +padding : 4px; +border : 1px dashed #000; +} +div.dokuwiki div.breadcrumbs { +background-color : #f5f5f5; +color : #666; +font-size : 80%; +padding : 0 0 0 4px; +} +div.dokuwiki span.user { +color : #ccc; +font-size : 90%; +} +div.dokuwiki li.minor { +color : #666; +font-style : italic; +} +div.dokuwiki img.media { +margin : 3px; +} +div.dokuwiki img.medialeft { +border : 0; +float : left; +margin : 0 1.5em 0 0; +} +div.dokuwiki img.mediaright { +border : 0; +float : right; +margin : 0 0 0 1.5em; +} +div.dokuwiki img.mediacenter { +border : 0; +display : block; +margin : 0 auto; +} +div.dokuwiki img.middle { +vertical-align : middle; +} +div.dokuwiki acronym { +cursor : help; +border-bottom : 1px dotted #000; +} +div.dokuwiki h1, div.dokuwiki h2, div.dokuwiki h3, div.dokuwiki h4, div.dokuwiki h5 { +color : #000; +background-color : inherit; +font-size : 100%; +font-weight : normal; +margin : 0 0 1em 0; +padding : 0.5em 0 0 0; +border-bottom : 1px solid #8cacbb; +clear : left; +} +div.dokuwiki h1 { +font-size : 160%; +margin-left : 0; +font-weight : bold; +} +div.dokuwiki h2 { +font-size : 150%; +margin-left : 20px; +} +div.dokuwiki h3 { +font-size : 140%; +margin-left : 40px; +border-bottom : none; +font-weight : bold; +} +div.dokuwiki h4 { +font-size : 120%; +margin-left : 60px; +border-bottom : none; +font-weight : bold; +} +div.dokuwiki h5 { +font-size : 100%; +margin-left : 80px; +border-bottom : none; +font-weight : bold; +} +div.dokuwiki div.level1 { +margin-left : 3px; +} +div.dokuwiki div.level2 { +margin-left : 23px; +} +div.dokuwiki div.level3 { +margin-left : 43px; +} +div.dokuwiki div.level4 { +margin-left : 63px; +} +div.dokuwiki div.level5 { +margin-left : 83px; +} +div.dokuwiki ul { +line-height : 1.5em; +list-style-type : square; +list-style-image : none; +margin : 0 0 0.5em 1.5em; +color : #638c9c; +} +div.dokuwiki ol { +line-height : 1.5em; +list-style-image : none; +margin : 0 0 0.5em 1.5em; +color : #638c9c; +font-weight : bold; +} +div.dokuwiki .li { +color : #000; +font-weight : normal; +} +div.dokuwiki ol { +list-style-type : decimal; +} +div.dokuwiki ol ol { +list-style-type : upper-roman; +} +div.dokuwiki ol ol ol { +list-style-type : lower-alpha; +} +div.dokuwiki ol ol ol ol { +list-style-type : lower-greek; +} +div.dokuwiki li.open { +} +div.dokuwiki li.closed { +} +div.dokuwiki blockquote { +border-left : 2px solid #8cacbb; +padding-left : 3px; +} +div.dokuwiki pre { +font-size : 120%; +padding : 0.5em; +border : 1px dashed #8cacbb; +color : #000; +overflow : auto; +} +div.dokuwiki pre.pre { +background-color : #f7f9fa; +} +div.dokuwiki pre.code { +background-color : #f7f9fa; +} +div.dokuwiki code { +font-size : 120%; +} +div.dokuwiki pre.file { +background-color : #dee7ec; +} +div.dokuwiki table.inline { +background-color : #fff; +border-spacing : 0; +border-collapse : collapse; +} +div.dokuwiki table.inline th { +padding : 3px; +border : 1px solid #8cacbb; +background-color : #dee7ec; +} +div.dokuwiki table.inline td { +padding : 3px; +border : 1px solid #8cacbb; +} +div.dokuwiki div.toc { +margin : 1.2em 0 0 2em; +float : right; +width : 200px; +font-size : 80%; +clear : both; +} +div.dokuwiki div.tocheader { +border : 1px solid #8cacbb; +background-color : #dee7ec; +text-align : left; +font-weight : bold; +padding : 3px; +margin-bottom : 2px; +} +div.dokuwiki span.toc_open, div.dokuwiki span.toc_close { +border : 0.4em solid #dee7ec; +float : right; +display : block; +margin : 0.4em 3px 0 0; +} +div.dokuwiki span.toc_open span, div.dokuwiki span.toc_close span { +display : none; +} +div.dokuwiki span.toc_open { +margin-top : 0.4em; +border-top : 0.4em solid #000; +} +div.dokuwiki span.toc_close { +margin-top : 0; +border-bottom : 0.4em solid #000; +} +div.dokuwiki #toc__inside { +border : 1px solid #8cacbb; +background-color : #fff; +text-align : left; +padding : 0.5em 0 0.7em 0; +} +div.dokuwiki ul.toc { +list-style-type : none; +list-style-image : none; +line-height : 1.2em; +padding-left : 1em; +margin : 0; +} +div.dokuwiki ul.toc li { +background : transparent; +padding-left : 0.4em; +} +div.dokuwiki ul.toc li.clear { +background-image : none; +padding-left : 0.4em; +} +div.dokuwiki a.toc:link, div.dokuwiki a.toc:visited { +color : #436976; +} +div.dokuwiki a.toc:hover, div.dokuwiki a.toc:active { +color : #000; +} +div.dokuwiki table.diff { +background-color : #fff; +width : 100%; +} +div.dokuwiki td.diff-blockheader { +font-weight : bold; +} +div.dokuwiki table.diff th { +border-bottom : 1px solid #8cacbb; +font-size : 120%; +width : 50%; +font-weight : normal; +text-align : left; +} +div.dokuwiki table.diff td { +font-family : monospace; +font-size : 100%; +} +div.dokuwiki td.diff-addedline { +background-color : #dfd; +} +div.dokuwiki td.diff-deletedline { +background-color : #ffb; +} +div.dokuwiki td.diff-context { +background-color : #f5f5f5; +} +div.dokuwiki table.diff td.diff-addedline strong, div.dokuwiki table.diff td.diff-deletedline strong { +color : red; +} +div.dokuwiki div.footnotes { +clear : both; +border-top : 1px solid #8cacbb; +padding-left : 1em; +margin-top : 1em; +} +div.dokuwiki div.fn { +font-size : 90%; +} +div.dokuwiki a.fn_top { +vertical-align : super; +font-size : 80%; +} +div.dokuwiki a.fn_bot { +vertical-align : super; +font-size : 80%; +font-weight : bold; +} +div.insitu-footnote { +font-size : 80%; +line-height : 1.2em; +border : 1px solid #8cacbb; +background-color : #f7f9fa; +text-align : left; +padding : 4px; +max-width : 40%; +} +* html .insitu-footnote pre.code, * html .insitu-footnote pre.file { +padding-bottom : 18px; +} +div.dokuwiki .search_result { +margin-bottom : 6px; +padding : 0 10px 0 30px; +} +div.dokuwiki .search_snippet { +color : #ccc; +font-size : 12px; +margin-left : 20px; +} +div.dokuwiki .search_sep { +color : #000; +} +div.dokuwiki .search_hit { +color : #000; +background-color : #ff9; +} +div.dokuwiki strong.search_hit { +font-weight : normal; +} +div.dokuwiki div.search_quickresult { +margin : 0 0 15px 30px; +padding : 0 10px 10px 0; +border-bottom : 1px dashed #8cacbb; +} +div.dokuwiki div.search_quickresult h3 { +margin : 0 0 1em 0; +font-size : 1em; +font-weight : bold; +} +div.dokuwiki ul.search_quickhits { +margin : 0 0 0.5em 1em; +} +div.dokuwiki ul.search_quickhits li { +margin : 0 1em 0 1em; +float : left; +width : 30%; +} +div.footerinc { +text-align : center; +} +.footerinc a img { +border : 0; +} +div.dokuwiki div.ajax_qsearch { +position : absolute; +right : 237px; +width : 200px; +display : none; +font-size : 80%; +line-height : 1.2em; +border : 1px solid #8cacbb; +background-color : #f7f9fa; +text-align : left; +padding : 4px; +} +button.toolbutton { +background-color : #fff; +padding : 0; +margin : 0 1px 0 0; +border : 1px solid #8cacbb; +cursor : pointer; +} +html > body button.toolbutton { +background : #fff; +} +div.picker { +width : 250px; +border : 1px solid #8cacbb; +background-color : #dee7ec; +} +button.pickerbutton { +padding : 0; +margin : 0 1px 1px 0; +border : 0; +background-color : transparent; +font-size : 80%; +cursor : pointer; +} +div.dokuwiki a.spell_error { +color : #f00; +text-decoration : underline; +} +div.dokuwiki div#spell__suggest { +background-color : #fff; +padding : 2px; +border : 1px solid #000; +font-size : 80%; +display : none; +} +div.dokuwiki div#spell__result { +border : 1px solid #8cacbb; +color : #000; +font-size : 14px; +padding : 3px; +background-color : #f7f9fa; +display : none; +} +div.dokuwiki span.spell_noerr { +color : #093; +} +div.dokuwiki span.spell_wait { +color : #06c; +} +div.dokuwiki div.img_big { +float : left; +margin-right : 0.5em; +} +div.dokuwiki dl.img_tags dt { +font-weight : bold; +background-color : #dee7ec; +} +div.dokuwiki dl.img_tags dd { +background-color : #f5f5f5; +} +div.dokuwiki div.imagemeta { +color : #666; +font-size : 70%; +line-height : 95%; +} +div.dokuwiki div.imagemeta img.thumb { +float : left; +margin-right : 0.1em; +} +#media__manager { +height : 100%; +overflow : hidden; +} +#media__left { +width : 30%; +border-right : 1px solid #8cacbb; +height : 100%; +overflow : auto; +position : absolute; +left : 0; +} +#media__right { +width : 69.7%; +height : 100%; +overflow : auto; +position : absolute; +right : 0; +} +#media__manager h1 { +margin : 0; +padding : 0; +margin-bottom : 0.5em; +} +#media__tree img { +float : left; +padding : 0.5em 0.3em 0 0; +} +#media__tree ul { +list-style-type : none; +list-style-image : none; +} +#media__tree li { +clear : left; +list-style-type : none; +list-style-image : none; +} +* html #media__tree li { +border : 1px solid #fff; +} +#media__opts { +padding-left : 1em; +margin-bottom : 0.5em; +} +#media__opts input { +float : left; +position : absolute; +} +* html #media__opts input { +position : static; +} +#media__opts label { +display : block; +float : left; +margin-left : 30px; +} +* html #media__opts label { +margin-left : 10px; +} +#media__opts br { +clear : left; +} +#media__content img.load { +margin : 1em auto; +} +#media__content #scroll__here { +border : 1px dashed #8cacbb; +} +#media__content .odd { +background-color : #f7f9fa; +padding : 0.4em; +} +#media__content .even { +padding : 0.4em; +} +#media__content a.mediafile { +margin-right : 1.5em; +font-weight : bold; +} +#media__content div.detail { +padding : 0.3em 0 0.3em 2em; +} +#media__content div.detail div.thumb { +float : left; +width : 130px; +text-align : center; +margin-right : 0.4em; +} +#media__content img.btn { +vertical-align : text-bottom; +} +#media__content div.example { +color : #666; +margin-left : 1em; +} +#media__content div.upload { +font-size : 90%; +padding : 0 0.5em 0.5em 0.5em; +} +#media__content form.upload { +display : block; +border-bottom : 1px solid #8cacbb; +padding : 0 0.5em 1em 0.5em; +} +#media__content form.upload fieldset { +padding : 0; +margin : 0; +border : none; +width : auto; +} +#media__content form.upload p { +clear : left; +text-align : left; +padding : 0.25em 0; +margin : 0; +line-height : 1em; +} +#media__content form.upload label { +float : left; +width : 30%; +} +#media__content form.upload label.check { +float : none; +width : auto; +} +#media__content form.upload input.check { +margin-left : 30%; +} +#media__content form.meta { +display : block; +padding : 0 0 1em 0; +} +#media__content form.meta label { +display : block; +width : 25%; +float : left; +font-weight : bold; +margin-left : 1em; +clear : left; +} +#media__content form.meta .edit { +font : 100% "Lucida Grande", Verdana, Lucida, Helvetica, Arial, sans-serif; +float : left; +width : 70%; +padding-right : 0; +padding-left : 0.2em; +margin : 2px; +} +#media__content form.meta textarea.edit { +height : 8em; +} +#media__content form.meta div.metafield { +clear : left; +} +#media__content form.meta div.buttons { +clear : left; +margin-left : 20%; +padding-left : 1em; +}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-readme.html b/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-readme.html new file mode 100644 index 0000000..aa3408d --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/sdk-readme.html @@ -0,0 +1,381 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" + lang="en" dir="ltr"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <title>help:sdk-readme</title> +<meta name="generator" content="DokuWiki Release 2007-06-26b" /> +<meta name="robots" content="noindex,nofollow" /> +<meta name="date" content="2011-03-11T13:17:34+0100" /> +<meta name="keywords" content="help,sdk-readme" /> +<link rel="search" type="application/opensearchdescription+xml" href="/wiki/lib/exe/opensearch.php" title="betadata" /> +<link rel="start" href="/wiki/" /> +<link rel="contents" href="/wiki/doku.php?id=help:sdk-readme&do=index" title="Index" /> +<link rel="alternate" type="application/rss+xml" title="Recent Changes" href="/wiki/feed.php" /> +<link rel="alternate" type="application/rss+xml" title="Current Namespace" href="/wiki/feed.php?mode=list&ns=help" /> +<link rel="alternate" type="text/html" title="Plain HTML" href="/wiki/doku.php?do=export_xhtml&id=help:sdk-readme" /> +<link rel="alternate" type="text/plain" title="Wiki Markup" href="/wiki/doku.php?do=export_raw&id=help:sdk-readme" /> +<link rel="stylesheet" media="all" type="text/css" href="sdk-readme.css" /> +<link rel="stylesheet" media="screen" type="text/css" href="/wiki/lib/exe/css.php" /> +<link rel="stylesheet" media="print" type="text/css" href="/wiki/lib/exe/css.php?s=print" /> +<script type="text/javascript" charset="utf-8" src="/wiki/lib/exe/js.php?edit=0&write=1" ></script> +</head> +<body> +<div class="dokuwiki export"> +<div class="toc"> +<div class="tocheader toctoggle" id="toc__header">Table of Contents</div> +<div id="toc__inside"> + +<ul class="toc"> +<li class="level1"><div class="li"><span class="li"><a href="#foobar2000_1.1_sdk_readme" class="toc">foobar2000 1.1 SDK readme</a></span></div> +<ul class="toc"> +<li class="level2"><div class="li"><span class="li"><a href="#compatibility" class="toc">Compatibility</a></span></div></li> +<li class="level2"><div class="li"><span class="li"><a href="#basic_usage" class="toc">Basic usage</a></span></div></li> +<li class="level2"><div class="li"><span class="li"><a href="#structure_of_a_component" class="toc">Structure of a component</a></span></div> +<ul class="toc"> +<li class="level3"><div class="li"><span class="li"><a href="#services" class="toc">Services</a></span></div></li> +<li class="level3"><div class="li"><span class="li"><a href="#entrypoint_services" class="toc">Entrypoint services</a></span></div></li> +<li class="level3"><div class="li"><span class="li"><a href="#service_extensions" class="toc">Service extensions</a></span></div></li> +<li class="level3"><div class="li"><span class="li"><a href="#autopointer_template_use" class="toc">Autopointer template use</a></span></div></li> +<li class="level3"><div class="li"><span class="li"><a href="#exception_use" class="toc">Exception use</a></span></div></li> +<li class="level3"><div class="li"><span class="li"><a href="#storing_configuration" class="toc">Storing configuration</a></span></div></li> +<li class="level3"><div class="li"><span class="li"><a href="#use_of_global_callback_services" class="toc">Use of global callback services</a></span></div></li> +</ul> +</li> +<li class="level2"><div class="li"><span class="li"><a href="#service_class_design_guidelines_advanced" class="toc">Service class design guidelines (advanced)</a></span></div> +<ul class="toc"> +<li class="level3"><div class="li"><span class="li"><a href="#cross-dll_safety" class="toc">Cross-DLL safety</a></span></div></li> +<li class="level3"><div class="li"><span class="li"><a href="#entrypoint_service_efficiency" class="toc">Entrypoint service efficiency</a></span></div></li></ul> +</li></ul> +</li></ul> +</div> +</div> + + + +<h1><a name="foobar2000_1.1_sdk_readme" id="foobar2000_1.1_sdk_readme">foobar2000 1.1 SDK readme</a></h1> +<div class="level1"> + +</div> +<!-- SECTION "foobar2000 1.1 SDK readme" [1-42] --> +<h2><a name="compatibility" id="compatibility">Compatibility</a></h2> +<div class="level2"> + +<p> + Components built with this <acronym title="Software Development Kit">SDK</acronym> are compatible with foobar2000 1.1. They are not compatible with any earlier versions (will fail to load), and not guaranteed to be compatible with any future versions, though upcoming releases will aim to maintain compatibility as far as possible without crippling newly added functionality. +</p> + +</div> +<!-- SECTION "Compatibility" [43-394] --> +<h2><a name="basic_usage" id="basic_usage">Basic usage</a></h2> +<div class="level2"> + +<p> + Each component must link against: +</p> +<ul> +<li class="level1"><div class="li"> foobar2000_<acronym title="Software Development Kit">SDK</acronym> project (contains declarations of services and various service-specific helper code)</div> +</li> +<li class="level1"><div class="li"> foobar2000_component_client project (contains DLL entrypoint)</div> +</li> +<li class="level1"><div class="li"> shared.dll (various helper code, mainly win32 function wrappers taking UTF-8 strings)</div> +</li> +<li class="level1"><div class="li"> PFC (non-<acronym title="Operating System">OS</acronym>-specific helper class library)</div> +</li> +</ul> + +<p> +Optionally, components can use helper libraries with various non-critical code that is commonly reused across various foobar2000 components: +</p> +<ul> +<li class="level1"><div class="li"> foobar2000_<acronym title="Software Development Kit">SDK</acronym>_helpers - a library of various helper code commonly used by foobar2000 components.</div> +</li> +<li class="level1"><div class="li"> foobar2000_ATL_helpers - another library of various helper code commonly used by foobar2000 components; requires WTL.</div> +</li> +</ul> + +<p> + Foobar2000_<acronym title="Software Development Kit">SDK</acronym>, foobar2000_component_client and PFC are included in sourcecode form; you can link against them by adding them to your workspace and using dependencies. To link against shared.dll, you must add “shared.lib†to linker input manually. +</p> + +<p> +Component code should include the following header files: +</p> +<ul> +<li class="level1"><div class="li"> foobar2000.h from <acronym title="Software Development Kit">SDK</acronym> - do not include other headers from the <acronym title="Software Development Kit">SDK</acronym> directory directly, they're meant to be referenced by foobar2000.h only; it also includes PFC headers and shared.dll helper declaration headers.</div> +</li> +<li class="level1"><div class="li"> Optionally: helpers.h from helpers directory (foobar2000_<acronym title="Software Development Kit">SDK</acronym>_helpers project) - a library of various helper code commonly used by foobar2000 components.</div> +</li> +<li class="level1"><div class="li"> Optionally: ATLHelpers.h from ATLHelpers directory (foobar2000_ATL_helpers project) - another library of various helper code commonly used by foobar2000 components; requires WTL. Note that ATLHelpers.h already includes <acronym title="Software Development Kit">SDK</acronym>/foobar2000.h and helpers/helpers.h so you can replace your other include lines with a reference to ATLHelpers.h.</div> +</li> +</ul> + +</div> +<!-- SECTION "Basic usage" [395-2146] --> +<h2><a name="structure_of_a_component" id="structure_of_a_component">Structure of a component</a></h2> +<div class="level2"> + +<p> + A component is a DLL that implements one or more entrypoint services and interacts with services provided by other components. +</p> + +</div> +<!-- SECTION "Structure of a component" [2147-2313] --> +<h3><a name="services" id="services">Services</a></h3> +<div class="level3"> + +<p> + A service type is an interface class, deriving directly or indirectly from <code>service_base</code> class. A service type class must not have any data members; it can only provide virtual methods (to be overridden by service implementation), helper non-virtual methods built around virtual methods, static helper methods, and constants / enums. Each service interface class must have a static <code>class_guid</code> member, used for identification when enumerating services or querying for supported functionality. A service type declaration should declare a class with public virtual/helper/static methods, and use <code>FB2K_MAKE_SERVICE_INTERFACE()</code> / <code>FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT()</code> macro to implement standard service behaviors for the class; additionally, <code>class_guid</code> needs to be defined outside class declaration (e.g. <code>const GUID someclass::class_guid = {….};</code> ). Note that most of components will not declare their own service types, they will only implement existing ones declared in the <acronym title="Software Development Kit">SDK</acronym>. +</p> + +<p> +A service implementation is a class derived from relevant service type class, implementing virtual methods declared by service type class. Note that service implementation class does not implement virtual methods declared by service_base; those are implemented by service type declaration framework (<code>service_query</code>) or by instantiation framework (<code>service_add_ref</code> / <code>service_release</code>). Service implementation classes are instantiated using <code>service_factory</code> templates in case of entrypoint services (see below), or using <code>service_impl_t</code> template and operator <code>new</code>: â€<code>myserviceptr = new service_impl_t<myservice_impl>(params);</code>â€. +</p> + +<p> +Each service object provides reference counter features and (<code>service_add_ref()</code> and <code>service_release()</code> methods) as well as a method to query for extended functionality (<code>service_query()</code> method). Those methods are implemented by service framework and should be never overridden by service implementations. These methods should also never be called directly - reference counter methods are managed by relevant autopointer templates, <code>service_query_t</code> function template should be used instead of calling <code>service_query</code> directly, to ensure type safety and correct type conversions. +</p> + +</div> +<!-- SECTION "Services" [2314-4579] --> +<h3><a name="entrypoint_services" id="entrypoint_services">Entrypoint services</a></h3> +<div class="level3"> + +<p> + An entrypoint service type is a special case of a service type that can be registered using <code>service_factory</code> templates, and then accessed from any point of service system (excluding DLL startup/shutdown code, such as code inside static object constructors/destructors). An entrypoint service type class must directly derive from <code>service_base</code>. +</p> + +<p> +Registered entrypoint services can be accessed using: +</p> +<ul> +<li class="level1"><div class="li"> For services types with variable number of implementations registered: <code>service_enum_t<T></code> template, <code>service_class_helper_t<T></code> template, etc, e.g. <pre class="code cpp">service_enum_t<someclass> e; service_ptr_t<someclass> ptr; <span class="kw1">while</span><span class="br0">(</span>e.<span class="me1">next</span><span class="br0">(</span>ptr<span class="br0">)</span><span class="br0">)</span> ptr->dosomething<span class="br0">(</span><span class="br0">)</span>;</pre></div> +</li> +<li class="level1"><div class="li"> For services types with single always-present implementation registered - such as core services like <code>playlist_manager</code> - using <code>static_api_ptr_t<T></code> template, e.g.: <pre class="code cpp">static_api_ptr_t<someclass> api; api->dosomething<span class="br0">(</span><span class="br0">)</span>; api->dosomethingelse<span class="br0">(</span><span class="br0">)</span>;</pre></div> +</li> +<li class="level1"><div class="li"> Using per-service-type defined static helper functions, e.g. <code>someclass::g_dosomething()</code> - those use relevant service enumeration methods internally.</div> +</li> +</ul> + +<p> + An entrypoint service type must use <code>FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT()</code> macro to implement standard entrypoint service behaviors, as opposed to all other service types that use <code>FB2K_MAKE_SERVICE_INTERFACE()</code> macro instead. +</p> + +<p> +You can register your own entrypoint service implementations using either <code>service_factory_t</code> or <code>service_factory_single_t</code> template - the difference between the two is that the former instantiates the class on demand, while the latter keeps a single static instance and returns references to it when requested; the latter is faster but usable only for things that have no per-instance member data to maintain. Each <code>service_factory_t</code> / <code>service_factory_single_t</code> instance should be a static variable, such as: â€<code>static service_factory_t<myclass> g_myclass_factory;</code>â€. +</p> + +<p> +Certain service types require custom <code>service_factory</code> helper templates to be used instead of standard <code>service_factory_t</code> / <code>service_factory_single_t</code> templates; see documentation of specific service type for exact info about registering. +</p> + +<p> +A typical entrypoint service implementation looks like this: +</p> +<pre class="code cpp"><span class="kw2">class</span> myservice_impl : <span class="kw2">public</span> myservice <span class="br0">{</span> +<span class="kw2">public</span>: + <span class="kw4">void</span> dosomething<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span>....<span class="br0">}</span>; + <span class="kw4">void</span> dosomethingelse<span class="br0">(</span><span class="kw4">int</span> meh<span class="br0">)</span> <span class="br0">{</span>...<span class="br0">}</span>; +<span class="br0">}</span>; +<span class="kw4">static</span> service_factory_single_t<myservice_impl> g_myservice_impl_factory;</pre> +</div> +<!-- SECTION "Entrypoint services" [4580-7051] --> +<h3><a name="service_extensions" id="service_extensions">Service extensions</a></h3> +<div class="level3"> + +<p> + Additional methods can be added to any service type, by declaring a new service type class deriving from service type class you want to extend. For example: +</p> +<pre class="code cpp"><span class="kw2">class</span> myservice : <span class="kw2">public</span> service_base <span class="br0">{</span> <span class="kw2">public</span>: <span class="kw2">virtual</span> <span class="kw4">void</span> dosomething<span class="br0">(</span><span class="br0">)</span> = <span class="nu0">0</span>; FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT<span class="br0">(</span>myservice<span class="br0">)</span>; <span class="br0">}</span>; +<span class="kw2">class</span> myservice_v2 : <span class="kw2">public</span> myservice <span class="br0">{</span> <span class="kw2">public</span>: <span class="kw2">virtual</span> <span class="kw4">void</span> dosomethingelse<span class="br0">(</span><span class="br0">)</span> = <span class="nu0">0</span>; FB2K_MAKE_SERVICE_INTERFACE<span class="br0">(</span>myservice_v2, myservice<span class="br0">)</span>; <span class="br0">}</span>;</pre> +<p> + In such scenario, to query whether a myservice instance is a <code>myservice_v2</code> and to retrieve <code>myservice_v2</code> pointer, use <code>service_query</code> functionality: +</p> +<pre class="code cpp">service_ptr_t<myservice> ptr; +<span class="br0">(</span>...<span class="br0">)</span> +service_ptr_t<myservice_v2> ptr_ex; +<span class="kw1">if</span> <span class="br0">(</span>ptr->service_query_t<span class="br0">(</span>ptr_ex<span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> <span class="coMULTI">/* ptr_ex is a valid pointer to myservice_v2 interface of our myservice instance */</span> <span class="br0">(</span>...<span class="br0">)</span> <span class="br0">}</span> +<span class="kw1">else</span> <span class="br0">{</span><span class="coMULTI">/* this myservice implementation does not implement myservice_v2 */</span> <span class="br0">(</span>...<span class="br0">)</span> <span class="br0">}</span></pre> +</div> +<!-- SECTION "Service extensions" [7052-7991] --> +<h3><a name="autopointer_template_use" id="autopointer_template_use">Autopointer template use</a></h3> +<div class="level3"> + +<p> + When performing most kinds of service operations, <code>service_ptr_t<T></code> template should be used rather than working with service pointers directly; it automatically manages reference counter calls, ensuring that the service object is deleted when it is no longer referenced. Additionally, <code>static_api_ptr_t<T></code> can be used to automatically acquire/release a pointer to single-implementation entrypoint service, such as one of standard APIs like <code>playlist_manager</code>. +</p> + +</div> +<!-- SECTION "Autopointer template use" [7992-8496] --> +<h3><a name="exception_use" id="exception_use">Exception use</a></h3> +<div class="level3"> + +<p> + Most of <acronym title="Application Programming Interface">API</acronym> functions use C++ exceptions to signal failure conditions. All used exception classes must derive from <code>std::exception</code> (which <code>pfc::exception</code> is typedef'd to); this design allows various instances of code to use single <code>catch()</code> line to get human-readable description of the problem to display. +</p> + +<p> +Additionally, special subclasses of exceptions are defined for use in specific conditions, such as <code>exception_io</code> for I/O failures. As a result, you must provide an exception handler whenever you invoke any kind of I/O code that may fail, unless in specific case calling context already handles exceptions (e.g. input implementation code - any exceptions should be forwarded to calling context, since exceptions are a part of input <acronym title="Application Programming Interface">API</acronym>). +</p> + +<p> +Implementations of global callback services such as <code>playlist_callback</code>, <code>playback_callback</code> or <code>library_callback</code> must not throw unhandled exceptions; behaviors in case they do are undefined (app termination is to be expected). +</p> + +</div> +<!-- SECTION "Exception use" [8497-9514] --> +<h3><a name="storing_configuration" id="storing_configuration">Storing configuration</a></h3> +<div class="level3"> + +<p> + In order to create your entries in the configuration file, you must instantiate some objects that derive from <code>cfg_var</code> class. Those can be either predefined classes (<code>cfg_int</code>, <code>cfg_string</code>, etc) or your own classes implementing relevant methods. +</p> + +<p> +Each <code>cfg_var</code> instance has a GUID assigned, to identify its configuration file entry. The GUID is passed to its constructor (which implementations must take care of, typically by providing a constructor that takes a GUID and forwards it to <code>cfg_var</code> constructor). +</p> + +<p> +Note that <code>cfg_var</code> objects can only be instantiated statically (either directly as static objects, or as members of other static objects). Additionally, you can create configuration data objects that can be accessed by other components, by implementing <code>config_object</code> service. Some standard configuration variables can be also accessed using <code>config_object</code> interface. +</p> + +</div> +<!-- SECTION "Storing configuration" [9515-10450] --> +<h3><a name="use_of_global_callback_services" id="use_of_global_callback_services">Use of global callback services</a></h3> +<div class="level3"> + +<p> + Multiple service classes presented by the <acronym title="Software Development Kit">SDK</acronym> allow your component to receive notifications about various events: +</p> +<ul> +<li class="level1"><div class="li"> file_operation_callback - tracking file move/copy/delete operations.</div> +</li> +<li class="level1"><div class="li"> library_callback - tracking Media Library content changes.</div> +</li> +<li class="level1"><div class="li"> metadb_io_callback - tracking tag read / write operations altering cached/displayed media information.</div> +</li> +<li class="level1"><div class="li"> play_callback - tracking playback related events.</div> +</li> +<li class="level1"><div class="li"> playback_statistics_collector - collecting information about played tracks.</div> +</li> +<li class="level1"><div class="li"> playlist_callback, playlist_callback_single - tracking playlist changes (the latter tracks only active playlist changes).</div> +</li> +<li class="level1"><div class="li"> playback_queue_callback - tracking playback queue changes.</div> +</li> +<li class="level1"><div class="li"> titleformat_config_callback - tracking changes of title formatting configuration.</div> +</li> +<li class="level1"><div class="li"> ui_drop_item_callback - filtering items dropped into the UI.</div> +</li> +</ul> + +<p> +All of global callbacks operate only within main app thread, allowing easy cooperation with windows <acronym title="Graphical User Interface">GUI</acronym> - for an example, you perform playlist view window repainting directly from your playlist_callback implementation. +</p> + +</div> + +<h4><a name="global_callback_recursion_issues" id="global_callback_recursion_issues">Global callback recursion issues</a></h4> +<div class="level4"> + +<p> +There are restrictions on things that are legal to call from within global callbacks. For an example, you can't modify a playlist from inside a playlist callback, because there are other registered callbacks tracking playlist changes that haven't been notified about the change being currently processed yet. +</p> + +<p> +You must not enter modal message loops from inside global callbacks, as those allow any unrelated code (queued messages, user input, etc.) to be executed, without being aware that a global callback is being processed. Certain global <acronym title="Application Programming Interface">API</acronym> methods such as metadb_io::load_info_multi or threaded_process::run_modal enter modal loops when called. Use main_thread_callback service to avoid this problem and delay execution of problematic code. +</p> + +<p> +You should also avoid firing a cross-thread SendMessage() inside global callbacks as well as performing any operations that dispatch global callbacks when handling a message that was sent through a cross-thread SendMessage(). Doing so may result in rare unwanted recursions - SendMessage() call will block the calling thread and immediately process any incoming cross-thread SendMessage() messages. If you're handling a cross-thread SendMessage() and need to perform such operation, delay it using PostMessage() or main_thread_callback. +</p> + +</div> +<!-- SECTION "Use of global callback services" [10451-12872] --> +<h2><a name="service_class_design_guidelines_advanced" id="service_class_design_guidelines_advanced">Service class design guidelines (advanced)</a></h2> +<div class="level2"> + +<p> + This chapter describes things you should keep on your mind when designing your own service type classes. Since 99% of components will only implement existing service types rather than adding their own cross-DLL-communication protocols, you can probably skip reading this chapter. +</p> + +</div> +<!-- SECTION "Service class design guidelines (advanced)" [12873-13209] --> +<h3><a name="cross-dll_safety" id="cross-dll_safety">Cross-DLL safety</a></h3> +<div class="level3"> + +<p> + It is important that all function parameters used by virtual methods of services are cross-DLL safe (do not depend on compiler-specific or runtime-specific behaviors, so no unexpected behaviors occur when calling code is built with different compiler/runtime than callee). To achieve this, any classes passed around must be either simple objects with no structure that could possibly vary with different compilers/runtimes (i.e. make sure that any memory blocks are freed on the side that allocated them); easiest way to achieve this is to reduce all complex data objects or classes passed around to interfaces with virtual methods, with implementation details hidden from callee. For an example, use <code>pfc::string_base&</code> as parameter to a function that is meant to return variable-length strings. +</p> + +</div> +<!-- SECTION "Cross-DLL safety" [13210-14037] --> +<h3><a name="entrypoint_service_efficiency" id="entrypoint_service_efficiency">Entrypoint service efficiency</a></h3> +<div class="level3"> + +<p> + When designing an entrypoint service interface meant to have multiple different implementations, you should consider making it possible for all its implementations to use <code>service_factory_single_t</code> (i.e. no per-instance member data); by e.g. moving functionality that needs multi-instance operation to a separate service type class that is created on-demand by one of entrypoint service methods. For example: +</p> +<pre class="code cpp"><span class="kw2">class</span> myservice : <span class="kw2">public</span> service_base <span class="br0">{</span> +<span class="kw2">public</span>: + <span class="co1">//this method accesses per-instance member data of the implementation class</span> + <span class="kw2">virtual</span> <span class="kw4">void</span> workerfunction<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">void</span> * p_databuffer,t_size p_buffersize<span class="br0">)</span> = <span class="nu0">0</span>; + <span class="co1">//this method is used to determine which implementation can be used to process specific data stream.</span> + <span class="kw2">virtual</span> <span class="kw4">bool</span> queryfunction<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span> * p_dataformat<span class="br0">)</span> = <span class="nu0">0</span>; + + FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT<span class="br0">(</span>myservice<span class="br0">)</span>; +<span class="br0">}</span>; +<span class="br0">(</span>...<span class="br0">)</span> +service_ptr_t<myservice> findservice<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span> * p_dataformat<span class="br0">)</span> <span class="br0">{</span> + service_enum_t<myservice> e; service_ptr_t<myservice> ptr; + <span class="co1">//BOTTLENECK, this dynamically instantiates the service for each query.</span> + <span class="kw1">while</span><span class="br0">(</span>e.<span class="me1">next</span><span class="br0">(</span>ptr<span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> + <span class="kw1">if</span> <span class="br0">(</span>ptr->queryfunction<span class="br0">(</span>p_dataformat<span class="br0">)</span><span class="br0">)</span> <span class="kw1">return</span> ptr; + <span class="br0">}</span> + throw exception_io_data<span class="br0">(</span><span class="br0">)</span>; +<span class="br0">}</span></pre> +<p> +.. should be changed to: +</p> +<pre class="code cpp"><span class="co1">//no longer an entrypoint service - use myservice::instantiate to get an instance instead.</span> +<span class="kw2">class</span> myservice_instance : <span class="kw2">public</span> service_base <span class="br0">{</span> +<span class="kw2">public</span>: + <span class="kw2">virtual</span> <span class="kw4">void</span> workerfunction<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">void</span> * p_databuffer,t_size p_buffersize<span class="br0">)</span> = <span class="nu0">0</span>; + FB2K_MAKE_SERVICE_INTERFACE<span class="br0">(</span>myservice_instance,service_base<span class="br0">)</span>; +<span class="br0">}</span>; + +<span class="kw2">class</span> myservice : <span class="kw2">public</span> service_base <span class="br0">{</span> +<span class="kw2">public</span>: + <span class="co1">//this method is used to determine which implementation can be used to process specific data stream.</span> + <span class="kw2">virtual</span> <span class="kw4">bool</span> queryfunction<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span> * p_dataformat<span class="br0">)</span> = <span class="nu0">0</span>; + <span class="kw2">virtual</span> service_ptr_t<myservice_instance> instantiate<span class="br0">(</span><span class="br0">)</span> = <span class="nu0">0</span>; + FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT<span class="br0">(</span>myservice<span class="br0">)</span>; +<span class="br0">}</span>; + +template<typename t_myservice_instance_impl> +<span class="kw2">class</span> myservice_impl_t : <span class="kw2">public</span> myservice <span class="br0">{</span> +<span class="kw2">public</span>: + <span class="co1">//implementation of myservice_instance must provide static bool g_queryformatfunction(const char*);</span> + <span class="kw4">bool</span> queryfunction<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span> * p_dataformat<span class="br0">)</span> <span class="br0">{</span><span class="kw1">return</span> t_myservice_instance_impl::<span class="me2">g_queryfunction</span><span class="br0">(</span>p_dataformat<span class="br0">)</span>;<span class="br0">}</span> + service_ptr_t<myservice_instance> instantiate<span class="br0">(</span><span class="br0">)</span> <span class="br0">{</span><span class="kw1">return</span> <span class="kw3">new</span> service_impl_t<t_myservice_instance_impl><span class="br0">(</span><span class="br0">)</span>;<span class="br0">}</span> +<span class="br0">}</span>; + +template<typename t_myservice_instance_impl> <span class="kw2">class</span> myservice_factory_t : + <span class="kw2">public</span> service_factory_single_t<myservice_impl_t<t_myservice_instance_impl> > <span class="br0">{</span><span class="br0">}</span>; +<span class="co1">//usage: static myservice_factory_t<myclass> g_myclass_factory;</span> + +<span class="br0">(</span>...<span class="br0">)</span> + +service_ptr_t<myservice_instance> findservice<span class="br0">(</span><span class="kw4">const</span> <span class="kw4">char</span> * p_dataformat<span class="br0">)</span> <span class="br0">{</span> + service_enum_t<myservice> e; service_ptr_t<myservice> ptr; + <span class="co1">//no more bottleneck, enumerated service does not perform inefficient operations when requesting an instance.</span> + <span class="kw1">while</span><span class="br0">(</span>e.<span class="me1">next</span><span class="br0">(</span>ptr<span class="br0">)</span><span class="br0">)</span> <span class="br0">{</span> + <span class="co1">//"inefficient" part is used only once, with implementation that actually supports what we request.</span> + <span class="kw1">if</span> <span class="br0">(</span>ptr->queryfunction<span class="br0">(</span>p_dataformat<span class="br0">)</span><span class="br0">)</span> <span class="kw1">return</span> ptr->instantiate<span class="br0">(</span><span class="br0">)</span>; + <span class="br0">}</span> + throw exception_io_data<span class="br0">(</span><span class="br0">)</span>; +<span class="br0">}</span></pre> +</div> +<!-- SECTION "Entrypoint service efficiency" [14038-] --></div> +</body> +</html> diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/shared/filedialogs.h b/Plugins/listeningto/players/foo_mlt/foobar2000/shared/filedialogs.h new file mode 100644 index 0000000..8d2169a --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/shared/filedialogs.h @@ -0,0 +1,7 @@ +class uGetOpenFileNameMultiResult_impl : public uGetOpenFileNameMultiResult {
+ pfc::list_t<pfc::string> m_data;
+public:
+ void AddItem(pfc::stringp param) {m_data.add_item(param);}
+ t_size get_count() const {return m_data.get_count();}
+ void get_item_ex(const char * & out,t_size n) const {out = m_data[n].ptr();}
+};
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/shared/shared.h b/Plugins/listeningto/players/foo_mlt/foobar2000/shared/shared.h index 05db496..ee4ed74 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/shared/shared.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/shared/shared.h @@ -2,6 +2,7 @@ #define _SHARED_DLL__SHARED_H_
#include "../../pfc/pfc.h"
+#include <signal.h>
#ifndef WIN32
#error N/A
@@ -14,6 +15,8 @@ #include <windows.h>
#include <ddeml.h>
#include <commctrl.h>
+#include <uxtheme.h>
+#include <tmschema.h>
#ifndef NOTHROW
#ifdef _MSC_VER
@@ -59,10 +62,11 @@ int SHARED_EXPORT uCharCompare(t_uint32 p_char1,t_uint32 p_char2); int SHARED_EXPORT uStringCompare_ConvertNumbers(const char * elem1,const char * elem2);
HINSTANCE SHARED_EXPORT uLoadLibrary(const char * name);
HANDLE SHARED_EXPORT uCreateEvent(LPSECURITY_ATTRIBUTES lpEventAttributes,BOOL bManualReset,BOOL bInitialState, const char * lpName);
+HANDLE SHARED_EXPORT GetInfiniteWaitEvent();
DWORD SHARED_EXPORT uGetModuleFileName(HMODULE hMod,pfc::string_base & out);
BOOL SHARED_EXPORT uSetClipboardString(const char * ptr);
-BOOL SHARED_EXPORT uIsDialogMessage(HWND dlg,LPMSG msg);
-BOOL SHARED_EXPORT uGetMessage(LPMSG msg,HWND wnd,UINT min,UINT max);
+BOOL SHARED_EXPORT uGetClipboardString(pfc::string_base & out);
+BOOL SHARED_EXPORT uSetClipboardRawData(UINT format,const void * ptr,t_size size);//does not empty the clipboard
BOOL SHARED_EXPORT uGetClassName(HWND wnd,pfc::string_base & out);
t_size SHARED_EXPORT uCharLength(const char * src);
BOOL SHARED_EXPORT uDragQueryFile(HDROP hDrop,UINT idx,pfc::string_base & out);
@@ -93,6 +97,7 @@ BOOL SHARED_EXPORT uGetLongPathName(const char * name,pfc::string_base & out);// BOOL SHARED_EXPORT uGetFullPathName(const char * name,pfc::string_base & out);
BOOL SHARED_EXPORT uSearchPath(const char * path, const char * filename, const char * extension, pfc::string_base & p_out);
BOOL SHARED_EXPORT uFixPathCaps(const char * path,pfc::string_base & p_out);
+//BOOL SHARED_EXPORT uFixPathCapsQuick(const char * path,pfc::string_base & p_out);
void SHARED_EXPORT uGetCommandLine(pfc::string_base & out);
BOOL SHARED_EXPORT uGetTempPath(pfc::string_base & out);
BOOL SHARED_EXPORT uGetTempFileName(const char * path_name,const char * prefix,UINT unique,pfc::string_base & out);
@@ -124,6 +129,11 @@ typedef uGetOpenFileNameMultiResult * puGetOpenFileNameMultiResult; puGetOpenFileNameMultiResult SHARED_EXPORT uGetOpenFileNameMulti(HWND parent,const char * p_ext_mask,unsigned def_ext_mask,const char * p_def_ext,const char * p_title,const char * p_directory);
+// new in fb2k 1.1.1
+puGetOpenFileNameMultiResult SHARED_EXPORT uBrowseForFolderEx(HWND parent,const char * title, const char * initPath);
+puGetOpenFileNameMultiResult SHARED_EXPORT uEvalKnownFolder(const GUID& id);
+
+
class NOVTABLE uFindFile
{
protected:
@@ -185,36 +195,30 @@ bool SHARED_EXPORT uTreeView_GetText(HWND wnd,HTREEITEM item,pfc::string_base & #define uUnhookWindowsHookEx UnhookWindowsHookEx
#define uCallNextHookEx CallNextHookEx
-
-/* usage:
-
- const char * src = "something";
-
- void * temp = malloc(uOSStringEstimateSize(src));
- uOSStringConvert(src,temp);
- //now temp contains OS-friendly (TCHAR) version of src
-*/
-
typedef TCITEMA uTCITEM;
int SHARED_EXPORT uTabCtrl_InsertItem(HWND wnd,t_size idx,const uTCITEM * item);
int SHARED_EXPORT uTabCtrl_SetItem(HWND wnd,t_size idx,const uTCITEM * item);
int SHARED_EXPORT uGetKeyNameText(LONG lparam,pfc::string_base & out);
-void SHARED_EXPORT uFixAmpersandChars(const char * src,pfc::string_base & out);//for systray
+void SHARED_EXPORT uFixAmpersandChars(const char * src,pfc::string_base & out);//for notification area icon
void SHARED_EXPORT uFixAmpersandChars_v2(const char * src,pfc::string_base & out);//for other controls
//deprecated
t_size SHARED_EXPORT uPrintCrashInfo(LPEXCEPTION_POINTERS param,const char * extrainfo,char * out);
enum {uPrintCrashInfo_max_length = 1024};
-void SHARED_EXPORT uPrintCrashInfo_Init(const char * name);//called only by exe on startup
-void SHARED_EXPORT uPrintCrashInfo_AddInfo(const char * p_info);//called only by exe on startup
-void SHARED_EXPORT uPrintCrashInfo_SetDumpPath(const char * name);//called only by exe on startup
-
+void SHARED_EXPORT uPrintCrashInfo_Init(const char * name);//called only by the exe on startup
+void SHARED_EXPORT uPrintCrashInfo_SetComponentList(const char * p_info);//called only by the exe on startup
+void SHARED_EXPORT uPrintCrashInfo_AddEnvironmentInfo(const char * p_info);//called only by the exe on startup
+void SHARED_EXPORT uPrintCrashInfo_SetDumpPath(const char * name);//called only by the exe on startup
void SHARED_EXPORT uDumpCrashInfo(LPEXCEPTION_POINTERS param);
+
+
+void SHARED_EXPORT uPrintCrashInfo_OnEvent(const char * message, t_size length);
+
BOOL SHARED_EXPORT uListBox_GetText(HWND listbox,UINT index,pfc::string_base & out);
void SHARED_EXPORT uPrintfV(pfc::string_base & out,const char * fmt,va_list arglist);
@@ -270,6 +274,17 @@ private: pfc::string8 m_data;
};
+static pfc::string uGetWindowText(HWND wnd) {
+ pfc::string8 temp;
+ if (!uGetWindowText(wnd,temp)) return "";
+ return temp.toString();
+}
+static pfc::string uGetDlgItemText(HWND wnd,UINT id) {
+ pfc::string8 temp;
+ if (!uGetDlgItemText(wnd,id,temp)) return "";
+ return temp.toString();
+}
+
#define uMAKEINTRESOURCE(x) ((const char*)LOWORD(x))
#ifdef _DEBUG
@@ -379,11 +394,6 @@ public: #define uGetDlgItemInt GetDlgItemInt
#define uSetDlgItemInt SetDlgItemInt
-#define __uHookWindowProc(WND,PROC) ((WNDPROC)SetWindowLongPtr(WND,GWLP_WNDPROC,(LONG_PTR)(PROC)))
-static WNDPROC uHookWindowProc(HWND p_wnd,WNDPROC p_proc) {return __uHookWindowProc(p_wnd,p_proc);}
-
-#define uCreateToolbarEx CreateToolbarEx
-#define uIsBadStringPtr IsBadStringPtrA
#define uSendMessage SendMessage
#define uSendDlgItemMessage SendDlgItemMessage
#define uSendMessageTimeout SendMessageTimeout
@@ -393,16 +403,6 @@ static WNDPROC uHookWindowProc(HWND p_wnd,WNDPROC p_proc) {return __uHookWindowP #define uPostThreadMessage PostThreadMessage
-class string_print_crash
-{
- char block[uPrintCrashInfo_max_length];
-public:
- inline operator const char * () const {return block;}
- inline const char * get_ptr() const {return block;}
- inline t_size length() {return strlen(block);}
- inline string_print_crash(LPEXCEPTION_POINTERS param,const char * extrainfo = 0) {uPrintCrashInfo(param,extrainfo,block);}
-};
-
class uStringPrintf
{
public:
@@ -417,6 +417,7 @@ public: inline t_size length() const {return m_data.length();}
inline bool is_empty() const {return length() == 0;}
inline const char * get_ptr() const {return m_data.get_ptr();}
+ const char * toString() const {return get_ptr();}
private:
pfc::string8_fastalloc m_data;
};
@@ -438,6 +439,45 @@ extern "C" LPCSTR SHARED_EXPORT uGetCallStackPath();
}
+namespace pfc {
+ class formatBugCheck : public string_formatter {
+ public:
+ formatBugCheck(const char * msg) {
+ *this << msg;
+ const char * path = uGetCallStackPath();
+ if (*path) {
+ *this << " (at: " << path << ")";
+ }
+ }
+ };
+ class exception_bug_check_v2 : public exception_bug_check {
+ public:
+ exception_bug_check_v2(const char * msg = exception_bug_check::g_what()) : exception_bug_check(formatBugCheck(msg)) {
+ PFC_ASSERT(!"exception_bug_check_v2 triggered");
+ }
+ };
+}
+
+static int uExceptFilterProc_inline(LPEXCEPTION_POINTERS param) {
+ uDumpCrashInfo(param);
+ TerminateProcess(GetCurrentProcess(), 0);
+ return 0;// never reached
+}
+
+#if !defined(FOOBAR2000_TARGET_VERSION) || FOOBAR2000_TARGET_VERSION >= 76
+extern "C" {
+ LONG SHARED_EXPORT uExceptFilterProc(LPEXCEPTION_POINTERS param);
+ PFC_NORETURN void SHARED_EXPORT uBugCheck();
+}
+#else
+#define uExceptFilterProc uExceptFilterProc_inline
+#define uBugCheck() {throw pfc::exception_bug_check_v2(msg);}
+#endif
+
+#define __except_instacrash __except(uExceptFilterProc(GetExceptionInformation()))
+#define fb2k_instacrash_scope(X) __try { X; } __except_instacrash {}
+
+
#if 1
#define TRACK_CALL(X) uCallStackTracker TRACKER__##X(#X)
#define TRACK_CALL_TEXT(X) uCallStackTracker TRACKER__BLAH(X)
@@ -449,11 +489,11 @@ extern "C" #endif
extern "C" {
-int SHARED_EXPORT stricmp_utf8(const char * p1,const char * p2);
-int SHARED_EXPORT stricmp_utf8_ex(const char * p1,t_size len1,const char * p2,t_size len2);
-int SHARED_EXPORT stricmp_utf8_stringtoblock(const char * p1,const char * p2,t_size p2_bytes);
-int SHARED_EXPORT stricmp_utf8_partial(const char * p1,const char * p2,t_size num = ~0);
-int SHARED_EXPORT stricmp_utf8_max(const char * p1,const char * p2,t_size p1_bytes);
+int SHARED_EXPORT stricmp_utf8(const char * p1,const char * p2) throw();
+int SHARED_EXPORT stricmp_utf8_ex(const char * p1,t_size len1,const char * p2,t_size len2) throw();
+int SHARED_EXPORT stricmp_utf8_stringtoblock(const char * p1,const char * p2,t_size p2_bytes) throw();
+int SHARED_EXPORT stricmp_utf8_partial(const char * p1,const char * p2,t_size num = ~0) throw();
+int SHARED_EXPORT stricmp_utf8_max(const char * p1,const char * p2,t_size p1_bytes) throw();
t_size SHARED_EXPORT uReplaceStringAdd(pfc::string_base & out,const char * src,t_size src_len,const char * s1,t_size len1,const char * s2,t_size len2,bool casesens);
t_size SHARED_EXPORT uReplaceCharAdd(pfc::string_base & out,const char * src,t_size src_len,unsigned c1,unsigned c2,bool casesens);
//all lengths in uReplaceString functions are optional, set to -1 if parameters is a simple null-terminated string
@@ -463,7 +503,7 @@ void SHARED_EXPORT uAddStringUpper(pfc::string_base & out,const char * src,t_siz class comparator_stricmp_utf8 {
public:
- static int compare(const char * p_string1,const char * p_string2) {return stricmp_utf8(p_string1,p_string2);}
+ static int compare(const char * p_string1,const char * p_string2) throw() {return stricmp_utf8(p_string1,p_string2);}
};
inline void uStringLower(pfc::string_base & out,const char * src,t_size len = ~0) {out.reset();uAddStringLower(out,src,len);}
@@ -505,8 +545,6 @@ private: pfc::string8 m_data;
};
-inline UINT char_lower(UINT c) {return uCharLower(c);}
-inline UINT char_upper(UINT c) {return uCharUpper(c);}
inline BOOL uGetLongPathNameEx(const char * name,pfc::string_base & out)
{
@@ -528,12 +566,42 @@ struct t_font_description t_uint8 m_charset;
char m_facename[m_facename_length];
+ bool operator==(const t_font_description & other) const {return g_equals(*this, other);}
+ bool operator!=(const t_font_description & other) const {return !g_equals(*this, other);}
+
+ static bool g_equals(const t_font_description & v1, const t_font_description & v2) {
+ return v1.m_height == v2.m_height && v1.m_weight == v2.m_weight && v1.m_italic == v2.m_italic && v1.m_charset == v2.m_charset && pfc::strcmp_ex(v1.m_facename, m_facename_length, v2.m_facename, m_facename_length) == 0;
+ }
+
HFONT SHARED_EXPORT create() const;
bool SHARED_EXPORT popup_dialog(HWND p_parent);
void SHARED_EXPORT from_font(HFONT p_font);
static t_font_description SHARED_EXPORT g_from_font(HFONT p_font);
+ static t_font_description SHARED_EXPORT g_from_logfont(LOGFONT const & lf);
+ static t_font_description SHARED_EXPORT g_from_system(int id = TMT_MENUFONT);
+
+ template<typename t_stream,typename t_abort> void to_stream(t_stream p_stream,t_abort & p_abort) const;
+ template<typename t_stream,typename t_abort> void from_stream(t_stream p_stream,t_abort & p_abort);
};
+/* relevant types not yet defined here */ template<typename t_stream,typename t_abort> void t_font_description::to_stream(t_stream p_stream,t_abort & p_abort) const {
+ p_stream->write_lendian_t(m_height,p_abort);
+ p_stream->write_lendian_t(m_weight,p_abort);
+ p_stream->write_lendian_t(m_italic,p_abort);
+ p_stream->write_lendian_t(m_charset,p_abort);
+ p_stream->write_string(m_facename,PFC_TABSIZE(m_facename),p_abort);
+}
+
+/* relevant types not yet defined here */ template<typename t_stream,typename t_abort> void t_font_description::from_stream(t_stream p_stream,t_abort & p_abort) {
+ p_stream->read_lendian_t(m_height,p_abort);
+ p_stream->read_lendian_t(m_weight,p_abort);
+ p_stream->read_lendian_t(m_italic,p_abort);
+ p_stream->read_lendian_t(m_charset,p_abort);
+ pfc::string8 temp;
+ p_stream->read_string(temp,p_abort);
+ strncpy_s(m_facename,temp,PFC_TABSIZE(m_facename));
+}
+
struct t_modal_dialog_entry
{
@@ -550,23 +618,29 @@ extern "C" { void SHARED_EXPORT PokeWindow(HWND p_wnd);
};
+static bool ModalDialogPrologue() {
+ bool rv = ModalDialog_CanCreateNew();
+ if (!rv) ModalDialog_PokeExisting();
+ return rv;
+}
+
//! The purpose of modal_dialog_scope is to help to avoid the modal dialog recursion problem. Current toplevel modal dialog handle is stored globally, so when creation of a new modal dialog is blocked, it can be activated to indicate the reason for the task being blocked.
class modal_dialog_scope {
public:
//! This constructor initializes the modal dialog scope with specified dialog handle.
- inline modal_dialog_scope(HWND p_wnd) : m_initialized(false) {initialize(p_wnd);}
+ inline modal_dialog_scope(HWND p_wnd) throw() : m_initialized(false) {initialize(p_wnd);}
//! This constructor leaves the scope uninitialized (you can call initialize() later with your window handle).
- inline modal_dialog_scope() : m_initialized(false) {}
- inline ~modal_dialog_scope() {deinitialize();}
+ inline modal_dialog_scope() throw() : m_initialized(false) {}
+ inline ~modal_dialog_scope() throw() {deinitialize();}
//! Returns whether creation of a new modal dialog is allowed (false when there's another one active).\n
//! NOTE: when calling context is already inside a modal dialog that you own, you should not be checking this before creating a new modal dialog.
- inline static bool can_create() {return ModalDialog_CanCreateNew();}
+ inline static bool can_create() throw(){return ModalDialog_CanCreateNew();}
//! Activates the top-level modal dialog existing, if one exists.
- inline static void poke_existing() {ModalDialog_PokeExisting();}
+ inline static void poke_existing() throw() {ModalDialog_PokeExisting();}
//! Initializes the scope with specified window handle.
- void initialize(HWND p_wnd)
+ void initialize(HWND p_wnd) throw()
{
if (!m_initialized)
{
@@ -577,7 +651,7 @@ public: }
}
- void deinitialize()
+ void deinitialize() throw()
{
if (m_initialized)
{
@@ -597,10 +671,21 @@ private: bool m_initialized;
};
+class LastErrorRevertScope {
+public:
+ LastErrorRevertScope() : m_val(GetLastError()) {}
+ ~LastErrorRevertScope() {SetLastError(m_val);}
+
+private:
+ const DWORD m_val;
+};
+
class format_win32_error {
public:
format_win32_error(DWORD p_code) {
- if (!uFormatSystemErrorMessage(m_buffer,p_code)) m_buffer << "Unknown error code (" << (unsigned)p_code << ")";
+ LastErrorRevertScope revert;
+ if (p_code == 0) m_buffer = "Undefined error";
+ else if (!uFormatSystemErrorMessage(m_buffer,p_code)) m_buffer << "Unknown error code (" << (unsigned)p_code << ")";
}
const char * get_ptr() const {return m_buffer.get_ptr();}
@@ -609,6 +694,24 @@ private: pfc::string8 m_buffer;
};
+class format_hresult {
+public:
+ format_hresult(HRESULT p_code) {
+ if (!uFormatSystemErrorMessage(m_buffer,(DWORD)p_code)) m_buffer = "Unknown error code";
+ stamp_hex(p_code);
+ }
+ format_hresult(HRESULT p_code, const char * msgOverride) {
+ m_buffer = msgOverride;
+ stamp_hex(p_code);
+ }
+
+ const char * get_ptr() const {return m_buffer.get_ptr();}
+ operator const char*() const {return m_buffer.get_ptr();}
+private:
+ void stamp_hex(HRESULT p_code) {m_buffer << " (0x" << pfc::format_hex((t_uint32)p_code, 8) << ")";}
+ pfc::string_formatter m_buffer;
+};
+
struct exception_win32 : public std::exception {
exception_win32(DWORD p_code) : std::exception(format_win32_error(p_code)), m_code(p_code) {}
DWORD get_code() const {return m_code;}
@@ -616,7 +719,6 @@ private: DWORD m_code;
};
-
class uDebugLog : public pfc::string_formatter {
public:
~uDebugLog() {*this << "\n"; uOutputDebugString(get_ptr());}
@@ -649,7 +751,118 @@ static bool IsKeyPressed(unsigned vk) { return (GetKeyState(vk) & 0x8000) ? true : false;
}
+//! Returns current modifier keys pressed, using win32 MOD_* flags.
+static unsigned GetHotkeyModifierFlags() {
+ unsigned ret = 0;
+ if (IsKeyPressed(VK_CONTROL)) ret |= MOD_CONTROL;
+ if (IsKeyPressed(VK_SHIFT)) ret |= MOD_SHIFT;
+ if (IsKeyPressed(VK_MENU)) ret |= MOD_ALT;
+ if (IsKeyPressed(VK_LWIN) || IsKeyPressed(VK_RWIN)) ret |= MOD_WIN;
+ return ret;
+}
+
+class CClipboardOpenScope {
+public:
+ CClipboardOpenScope() : m_open(false) {}
+ ~CClipboardOpenScope() {Close();}
+ bool Open(HWND p_owner) {
+ Close();
+ if (OpenClipboard(p_owner)) {
+ m_open = true;
+ return true;
+ } else {
+ return false;
+ }
+ }
+ void Close() {
+ if (m_open) {
+ m_open = false;
+ CloseClipboard();
+ }
+ }
+private:
+ bool m_open;
+
+ PFC_CLASS_NOT_COPYABLE_EX(CClipboardOpenScope)
+};
+
+class CGlobalLockScope {
+public:
+ CGlobalLockScope(HGLOBAL p_handle) : m_handle(p_handle), m_ptr(GlobalLock(p_handle)) {
+ if (m_ptr == NULL) throw std::bad_alloc();
+ }
+ ~CGlobalLockScope() {
+ if (m_ptr != NULL) GlobalUnlock(m_handle);
+ }
+ void * GetPtr() const {return m_ptr;}
+ t_size GetSize() const {return GlobalSize(m_handle);}
+private:
+ void * m_ptr;
+ HGLOBAL m_handle;
+
+ PFC_CLASS_NOT_COPYABLE_EX(CGlobalLockScope)
+};
+
+template<typename TItem> class CGlobalLockScopeT {
+public:
+ CGlobalLockScopeT(HGLOBAL handle) : m_scope(handle) {}
+ TItem * GetPtr() const {return reinterpret_cast<TItem*>(m_scope.GetPtr());}
+ t_size GetSize() const {
+ const t_size val = m_scope.GetSize();
+ PFC_ASSERT( val % sizeof(TItem) == 0 );
+ return val / sizeof(TItem);
+ }
+private:
+ CGlobalLockScope m_scope;
+};
+
+
+static bool IsPointInsideControl(const POINT& pt, HWND wnd) {
+ HWND walk = WindowFromPoint(pt);
+ for(;;) {
+ if (walk == NULL) return false;
+ if (walk == wnd) return true;
+ if (GetWindowLong(walk,GWL_STYLE) & WS_POPUP) return false;
+ walk = GetParent(walk);
+ }
+}
+
+static bool IsWindowChildOf(HWND child, HWND parent) {
+ HWND walk = child;
+ while(walk != parent && walk != NULL && (GetWindowLong(walk,GWL_STYLE) & WS_CHILD) != 0) {
+ walk = GetParent(walk);
+ }
+ return walk == parent;
+}
+
+
#include "audio_math.h"
#include "win32_misc.h"
-#endif //_SHARED_DLL__SHARED_H_
\ No newline at end of file +template<typename TPtr>
+class CoTaskMemObject {
+public:
+ CoTaskMemObject() : m_ptr() {}
+
+ ~CoTaskMemObject() {CoTaskMemFree(m_ptr);}
+ void Reset() {CoTaskMemFree(pfc::replace_null_t(m_ptr));}
+ TPtr * Receive() {Reset(); return &m_ptr;}
+
+ TPtr m_ptr;
+ PFC_CLASS_NOT_COPYABLE(CoTaskMemObject, CoTaskMemObject<TPtr> );
+};
+
+
+
+static void __cdecl _OverrideCrtAbort_handler(int signal) {
+ const ULONG_PTR args[] = {signal};
+ RaiseException(0x6F8E1DC8 /* random GUID */, EXCEPTION_NONCONTINUABLE, _countof(args), args);
+}
+
+static void OverrideCrtAbort() {
+ const int signals[] = {SIGINT, SIGTERM, SIGBREAK, SIGABRT};
+ for(size_t i=0; i<_countof(signals); i++) signal(signals[i], _OverrideCrtAbort_handler);
+ _set_abort_behavior(0, ~0);
+}
+
+#endif //_SHARED_DLL__SHARED_H_
diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/shared/shared.lib b/Plugins/listeningto/players/foo_mlt/foobar2000/shared/shared.lib Binary files differindex eb23dce..cbd68ea 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/shared/shared.lib +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/shared/shared.lib diff --git a/Plugins/listeningto/players/foo_mlt/foobar2000/shared/win32_misc.h b/Plugins/listeningto/players/foo_mlt/foobar2000/shared/win32_misc.h index f5c42cf..b3baa47 100644 --- a/Plugins/listeningto/players/foo_mlt/foobar2000/shared/win32_misc.h +++ b/Plugins/listeningto/players/foo_mlt/foobar2000/shared/win32_misc.h @@ -98,7 +98,7 @@ public: //! Returns true when signaled, false on timeout
static bool g_wait_for(HANDLE p_event,double p_timeout_seconds) {
SetLastError(NO_ERROR);
- DWORD status = WaitForSingleObject(p_event,g_calculate_wait_time(p_timeout_seconds));
+ DWORD status = WaitForSingleObject(p_event,g_calculate_wait_time(p_timeout_seconds));
switch(status) {
case WAIT_FAILED:
throw exception_win32(GetLastError());
@@ -184,11 +184,70 @@ private: class SelectObjectScope {
public:
- SelectObjectScope(HDC p_dc,HGDIOBJ p_obj) : m_dc(p_dc), m_obj(SelectObject(p_dc,p_obj)) {}
- ~SelectObjectScope() {SelectObject(m_dc,m_obj);}
+ SelectObjectScope(HDC p_dc,HGDIOBJ p_obj) throw() : m_dc(p_dc), m_obj(SelectObject(p_dc,p_obj)) {}
+ ~SelectObjectScope() throw() {SelectObject(m_dc,m_obj);}
private:
- SelectObjectScope(const SelectObjectScope&) {throw pfc::exception_not_implemented();}
- const SelectObjectScope & operator=(const SelectObjectScope&) {throw pfc::exception_not_implemented();}
+ PFC_CLASS_NOT_COPYABLE_EX(SelectObjectScope)
HDC m_dc;
HGDIOBJ m_obj;
-};
\ No newline at end of file +};
+
+class OffsetWindowOrgScope {
+public:
+ OffsetWindowOrgScope(HDC dc, const POINT & pt) throw() : m_dc(dc), m_pt(pt) {
+ OffsetWindowOrgEx(m_dc, m_pt.x, m_pt.y, NULL);
+ }
+ ~OffsetWindowOrgScope() throw() {
+ OffsetWindowOrgEx(m_dc, -m_pt.x, -m_pt.y, NULL);
+ }
+
+private:
+ const HDC m_dc;
+ const POINT m_pt;
+};
+class DCStateScope {
+public:
+ DCStateScope(HDC p_dc) throw() : m_dc(p_dc) {
+ m_state = SaveDC(m_dc);
+ }
+ ~DCStateScope() throw() {
+ RestoreDC(m_dc,m_state);
+ }
+private:
+ const HDC m_dc;
+ int m_state;
+};
+
+
+class exception_com : public std::exception {
+public:
+ exception_com(HRESULT p_code) : std::exception(format_hresult(p_code)), m_code(p_code) {}
+ exception_com(HRESULT p_code, const char * msg) : std::exception(format_hresult(p_code, msg)), m_code(p_code) {}
+ HRESULT get_code() const {return m_code;}
+private:
+ HRESULT m_code;
+};
+
+// Same format as _WIN32_WINNT macro.
+static WORD GetWindowsVersionCode() throw() {
+ const DWORD ver = GetVersion();
+ return (WORD)HIBYTE(LOWORD(ver)) | ((WORD)LOBYTE(LOWORD(ver)) << 8);
+}
+
+//! Simple implementation of a COM reference counter. The initial reference count is zero, so it can be used with pfc::com_ptr_t<> with plain operator=/constructor rather than attach().
+template<typename TBase> class ImplementCOMRefCounter : public TBase {
+public:
+ TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(ImplementCOMRefCounter,TBase)
+ ULONG STDMETHODCALLTYPE AddRef() {
+ return ++m_refcounter;
+ }
+ ULONG STDMETHODCALLTYPE Release() {
+ long val = --m_refcounter;
+ if (val == 0) delete this;
+ return val;
+ }
+protected:
+ virtual ~ImplementCOMRefCounter() {}
+private:
+ pfc::refcounter m_refcounter;
+};
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/alloc.h b/Plugins/listeningto/players/foo_mlt/pfc/alloc.h index 218afa8..deb03b4 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/alloc.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/alloc.h @@ -66,6 +66,9 @@ namespace pfc { bool is_ptr_owned(const void * p_item) const {return false;}
+ //set to true when we prioritize speed over memory usage
+ enum { alloc_prioritizes_speed = false };
+
//not mandatory
const t_item * get_ptr() const {throw pfc::exception_not_implemented();}
t_item * get_ptr() {throw pfc::exception_not_implemented();}
@@ -107,6 +110,8 @@ namespace pfc { t_item & operator[](t_size p_index) {PFC_ASSERT(p_index < m_size); return m_data[p_index];}
bool is_ptr_owned(const void * p_item) const {return is_pointer_in_range(get_ptr(),get_size(),p_item);}
+ enum { alloc_prioritizes_speed = false };
+
t_item * get_ptr() {return m_data;}
const t_item * get_ptr() const {return m_data;}
@@ -221,6 +226,8 @@ namespace pfc { bool is_ptr_owned(const void * p_item) const {return m_content.is_ptr_owned(p_item);}
void prealloc(t_size p_size) {}
void force_reset() {set_size(0);}
+
+ enum { alloc_prioritizes_speed = false };
private:
alloc_standard(const t_self &) {throw pfc::exception_not_implemented();}
const t_self & operator=(const t_self&) {throw pfc::exception_not_implemented();}
@@ -254,6 +261,8 @@ namespace pfc { bool is_ptr_owned(const void * p_item) const {return m_data.is_ptr_owned(p_item);}
void prealloc(t_size) {}
void force_reset() {m_data.set_size(0,0);}
+
+ enum { alloc_prioritizes_speed = true };
private:
alloc_fast(const t_self &) {throw pfc::exception_not_implemented();}
const t_self & operator=(const t_self&) {throw pfc::exception_not_implemented();}
@@ -293,6 +302,8 @@ namespace pfc { t_item * get_ptr() {return m_data.get_ptr();}
bool is_ptr_owned(const void * p_item) const {return m_data.is_ptr_owned(p_item);}
void force_reset() {m_data.set_size(0,0);}
+
+ enum { alloc_prioritizes_speed = true };
private:
alloc_fast_aggressive(const t_self &) {throw pfc::exception_not_implemented();}
const t_self & operator=(const t_self&) {throw pfc::exception_not_implemented();}
@@ -333,6 +344,8 @@ namespace pfc { bool is_ptr_owned(const void * p_item) const {return is_pointer_in_range(get_ptr(),p_width,p_item);}
void prealloc(t_size) {}
void force_reset() {set_size(0);}
+
+ enum { alloc_prioritizes_speed = false };
private:
alloc(const t_self&) {throw pfc::exception_not_implemented();}
const t_self& operator=(const t_self&) {throw pfc::exception_not_implemented();}
@@ -379,6 +392,7 @@ namespace pfc { void force_reset() {
m_fixed.force_reset(); m_variable.force_reset();
}
+ enum { alloc_prioritizes_speed = t_alloc<t_item>::alloc_prioritizes_speed };
private:
alloc(const t_self&) {throw pfc::exception_not_implemented();}
const t_self& operator=(const t_self&) {throw pfc::exception_not_implemented();}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/array.h b/Plugins/listeningto/players/foo_mlt/pfc/array.h index fa296bc..9e5c103 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/array.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/array.h @@ -13,7 +13,7 @@ namespace pfc { private: typedef array_staticsize_t<t_item> t_self;
public:
array_staticsize_t() : m_size(0), m_array(NULL) {}
- array_staticsize_t(t_size p_size) : m_size(0), m_array(NULL) {set_size_discard(p_size);}
+ array_staticsize_t(t_size p_size) : m_array(new t_item[p_size]), m_size(p_size) {}
~array_staticsize_t() {__release();}
//! Copy constructor nonfunctional when data type is not copyable.
@@ -26,8 +26,8 @@ namespace pfc { __release();
//m_array = pfc::malloc_copy_t(p_source.get_size(),p_source.get_ptr());
- const t_size newsize = p_source.get_size()
- m_array = new t_item[newsize]
+ const t_size newsize = p_source.get_size();
+ m_array = new t_item[newsize];
m_size = newsize;
for(t_size n = 0; n < newsize; n++) m_array[n] = p_source[n];
return *this;
@@ -40,6 +40,13 @@ namespace pfc { m_size = p_size;
}
}
+ //! Warning: buffer pointer must not point to buffer allocated by this array (fixme).
+ template<typename t_source>
+ void set_data_fromptr(const t_source * p_buffer,t_size p_count) {
+ set_size_discard(p_count);
+ pfc::copy_array_loop_t(*this,p_buffer,p_count);
+ }
+
t_size get_size() const {return m_size;}
const t_item * get_ptr() const {return m_array;}
@@ -49,6 +56,8 @@ namespace pfc { t_item & operator[](t_size p_index) {PFC_ASSERT(p_index < get_size());return m_array[p_index];}
template<typename t_source> bool is_owned(const t_source & p_item) {return pfc::is_pointer_in_range(get_ptr(),get_size(),&p_item);}
+
+ template<typename t_out> void enumerate(t_out & out) const { for(t_size walk = 0; walk < m_size; ++walk) out(m_array[walk]); }
private:
void __release() {
m_size = 0;
@@ -90,6 +99,7 @@ namespace pfc { template<typename t_source> const t_self & operator=(const t_source & p_source) {copy_array_t(*this,p_source); return *this;}
void set_size(t_size p_size) {m_alloc.set_size(p_size);}
+ void set_size_discard(t_size p_size) {m_alloc.set_size(p_size);}
void set_count(t_size p_count) {m_alloc.set_size(p_count);}
t_size get_size() const {return m_alloc.get_size();}
t_size get_count() const {return m_alloc.get_size();}
@@ -101,7 +111,6 @@ namespace pfc { //! Warning: buffer pointer must not point to buffer allocated by this array (fixme).
template<typename t_source>
void set_data_fromptr(const t_source * p_buffer,t_size p_count) {
-
set_size(p_count);
pfc::copy_array_loop_t(*this,p_buffer,p_count);
}
@@ -117,6 +126,16 @@ namespace pfc { }
}
+ template<typename t_insert>
+ void insert_multi(const t_insert & value, t_size base, t_size count) {
+ const t_size oldSize = get_size();
+ if (base > oldSize) base = oldSize;
+ increase_size(count);
+ pfc::memmove_t(get_ptr() + base + count, get_ptr() + base, oldSize - base);
+ pfc::fill_ptr_t(get_ptr() + base, count, value);
+ }
+ template<typename t_append> void append_multi(const t_append & value, t_size count) {insert_multi(value,~0,count);}
+
//! Warning: buffer pointer must not point to buffer allocated by this array (fixme).
template<typename t_append>
void append_fromptr(const t_append * p_buffer,t_size p_count) {
@@ -151,7 +170,7 @@ namespace pfc { void fill_null() {
const t_size max = get_size();
for(t_size n=0;n<max;n++) m_alloc[n] = 0;
-}
+ }
void grow_size(t_size p_size) {
if (p_size > get_size()) set_size(p_size);
@@ -185,13 +204,7 @@ namespace pfc { (*this)[0] = p_item;
}
- template<typename t_callback>
- void enumerate(t_callback & p_callback) const {
- for(t_size n = 0; n < get_size(); n++ ) {
- p_callback((*this)[n]);
- }
- }
-
+ template<typename t_callback> void enumerate(t_callback & p_callback) const { for(t_size n = 0; n < get_size(); n++ ) { p_callback((*this)[n]); } }
private:
t_alloc<t_item> m_alloc;
};
@@ -223,6 +236,52 @@ namespace pfc { }
}
};
+
+ template<typename t_a1, typename t_a2>
+ static bool array_equals(const t_a1 & arr1, const t_a2 & arr2) {
+ const t_size s = array_size_t(arr1);
+ if (s != array_size_t(arr2)) return false;
+ for(t_size walk = 0; walk < s; ++walk) {
+ if (arr1[walk] != arr2[walk]) return false;
+ }
+ return true;
+ }
+
+
+
+ template<typename t_item, template<typename> class t_alloc = alloc_standard> class array_2d_t {
+ public:
+ array_2d_t() : m_d1(), m_d2() {}
+ void set_size(t_size d1, t_size d2) {
+ m_content.set_size(pfc::mul_safe_t<std::bad_alloc>(d1, d2));
+ m_d1 = d1; m_d2 = d2;
+ }
+ t_size get_dim1() const {return m_d1;}
+ t_size get_dim2() const {return m_d2;}
+
+ t_item & at(t_size i1, t_size i2) {
+ return * _transformPtr(m_content.get_ptr(), i1, i2);
+ }
+ const t_item & at(t_size i1, t_size i2) const {
+ return * _transformPtr(m_content.get_ptr(), i1, i2);
+ }
+ template<typename t_filler> void fill(const t_filler & p_filler) {m_content.fill(p_filler);}
+ void fill_null() {m_content.fill_null();}
+
+ t_item * rowPtr(t_size i1) {return _transformPtr(m_content.get_ptr(), i1, 0);}
+ const t_item * rowPtr(t_size i1) const {return _transformPtr(m_content.get_ptr(), i1, 0);}
+
+ const t_item * operator[](t_size i1) const {return rowPtr(i1);}
+ t_item * operator[](t_size i1) {return rowPtr(i1);}
+ private:
+ template<typename t_ptr> t_ptr _transformPtr(t_ptr ptr, t_size i1, t_size i2) const {
+ PFC_ASSERT( i1 < m_d1 ); PFC_ASSERT( i2 < m_d2 );
+ return ptr + i1 * m_d2 + i2;
+ }
+ pfc::array_t<t_item, t_alloc> m_content;
+ t_size m_d1, m_d2;
+ };
+
}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/avltree.h b/Plugins/listeningto/players/foo_mlt/pfc/avltree.h index 083ef3a..ff27371 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/avltree.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/avltree.h @@ -1,134 +1,202 @@ -#ifndef _AVLTREE_T_H_INCLUDED_
-#define _AVLTREE_T_H_INCLUDED_
-
namespace pfc {
+ template<typename t_storage>
+ class _avltree_node : public _list_node<t_storage> {
+ public:
+ typedef _list_node<t_storage> t_node;
+ typedef _avltree_node<t_storage> t_self;
+ template<typename t_param> _avltree_node(t_param const& param) : t_node(param), m_left(), m_right(), m_depth() {}
+
+ typedef refcounted_object_ptr_t<t_self> t_ptr;
+ typedef t_self* t_rawptr;
+
+ t_ptr m_left, m_right;
+ t_rawptr m_parent;
+
+ t_size m_depth;
+
+ void link_left(t_self* ptr) throw() {
+ m_left = ptr;
+ if (ptr != NULL) ptr->m_parent = this;
+ }
+ void link_right(t_self* ptr) throw() {
+ m_right = ptr;
+ if (ptr != NULL) ptr->m_parent = this;
+ }
+
+ void link_child(bool which,t_self* ptr) throw() {
+ (which ? m_right : m_left) = ptr;
+ if (ptr != NULL) ptr->m_parent = this;
+ }
+
+ void unlink() throw() {
+ m_left.release(); m_right.release(); m_parent = NULL; m_depth = 0;
+ }
+
+ inline void add_ref() throw() {this->refcount_add_ref();}
+ inline void release() throw() {this->refcount_release();}
+
+ inline t_rawptr child(bool which) const throw() {return which ? &*m_right : &*m_left;}
+ inline bool which_child(const t_self* ptr) const throw() {return ptr == &*m_right;}
+
+
+
+ t_rawptr step(bool direction) throw() {
+ t_self* walk = this;
+ for(;;) {
+ t_self* t = walk->child(direction);
+ if (t != NULL) return t->peakchild(!direction);
+ for(;;) {
+ t = walk->m_parent;
+ if (t == NULL) return NULL;
+ if (t->which_child(walk) != direction) return t;
+ walk = t;
+ }
+ }
+ }
+ t_rawptr peakchild(bool direction) throw() {
+ t_self* walk = this;
+ for(;;) {
+ t_rawptr next = walk->child(direction);
+ if (next == NULL) return walk;
+ walk = next;
+ }
+ }
+ t_node * prev() throw() {return step(false);}
+ t_node * next() throw() {return step(true);}
+ private:
+ ~_avltree_node() throw() {}
+ };
+
+
template<typename t_storage,typename t_comparator = comparator_default>
class avltree_t {
+ public:
typedef avltree_t<t_storage,t_comparator> t_self;
+ typedef pfc::const_iterator<t_storage> const_iterator;
+ typedef pfc::iterator<t_storage> iterator;
+ typedef t_storage t_item;
+ private:
+ typedef _avltree_node<t_storage> t_node;
+#if 1//MSVC8 bug fix
+ typedef refcounted_object_ptr_t<t_node> t_nodeptr;
+ typedef t_node * t_noderawptr;
+#else
+ typedef typename t_node::t_ptr t_nodeptr;
+ typedef typename t_node::t_rawptr t_noderawptr;
+#endif
+
template<typename t_item1,typename t_item2>
inline static int compare(const t_item1 & p_item1, const t_item2 & p_item2) {
return t_comparator::compare(p_item1,p_item2);
}
- struct t_node {
- t_node *m_left,*m_right;
- t_size m_depth;
- t_storage m_data;
-
- template<bool p_which> t_node * & child() {return p_which ? m_right : m_left;}
- template<bool p_which> t_node * child() const {return p_which ? m_right : m_left;}
-
- ~t_node() {
- if (m_left != NULL) delete m_left;
- if (m_right != NULL) delete m_right;
- }
+ t_nodeptr m_root;
- template<typename T>
- t_node(T const & p_param) : m_data(p_param), m_left(NULL), m_right(NULL), m_depth(0) {}
- };
-
- t_node * m_root;
-
- static t_size calc_depth(const t_node * ptr)
+ static t_size calc_depth(const t_nodeptr & ptr)
{
- return ptr ? 1+ptr->m_depth : 0;
+ return ptr.is_valid() ? 1+ptr->m_depth : 0;
}
- static void recalc_depth(t_node * ptr) {
+ static void recalc_depth(t_nodeptr const& ptr) {
ptr->m_depth = pfc::max_t(calc_depth(ptr->m_left), calc_depth(ptr->m_right));
}
- static void assert_children(t_node * ptr)
- {
- #ifdef _DEBUG
+ static void assert_children(t_nodeptr ptr) {
PFC_ASSERT(ptr->m_depth == pfc::max_t(calc_depth(ptr->m_left),calc_depth(ptr->m_right)) );
- #endif
}
- static int test_depth(t_node * ptr)
+ static t_ssize test_depth(t_nodeptr const& ptr)
{
if (ptr==0) return 0;
else return calc_depth(ptr->m_right) - calc_depth(ptr->m_left);
}
- static t_node * extract_left_leaf(t_node * & p_base) {
+ static t_nodeptr extract_left_leaf(t_nodeptr & p_base) {
if (p_base->m_left != NULL) {
- t_node * ret = extract_left_leaf(p_base->m_left);
+ t_nodeptr ret = extract_left_leaf(p_base->m_left);
recalc_depth(p_base);
g_rebalance(p_base);
return ret;
} else {
- t_node * node = p_base;
+ t_nodeptr node = p_base;
p_base = node->m_right;
- node->m_right = 0;
+ if (p_base.is_valid()) p_base->m_parent = node->m_parent;
+ node->m_right.release();
node->m_depth = 0;
+ node->m_parent = NULL;
return node;
}
}
- static t_node * extract_right_leaf(t_node ** p_base) {
- t_node * node = *p_base;
- if (node->m_right != NULL) {
- t_node * ret = extract_right_leaf(&node->m_right);
- recalc_depth(node);
+ static t_nodeptr extract_right_leaf(t_nodeptr & p_base) {
+ if (p_base->m_right != NULL) {
+ t_nodeptr ret = extract_right_leaf(p_base->m_right);
+ recalc_depth(p_base);
g_rebalance(p_base);
return ret;
} else {
- *p_base = node->m_left;
- node->m_left = 0;
+ t_nodeptr node = p_base;
+ p_base = node->m_left;
+ if (p_base.is_valid()) p_base->m_parent = node->m_parent;
+ node->m_left.release();
node->m_depth = 0;
+ node->m_parent = NULL;
return node;
}
}
- static void remove_internal(t_node* & p_node) {
- t_node * deleteme = p_node;
- if (p_node->m_left==0)
+ static void remove_internal(t_nodeptr & p_node) {
+ t_nodeptr oldval = p_node;
+ if (p_node->m_left.is_empty()) {
p_node = p_node->m_right;
- else if (p_node->m_right==0)
+ if (p_node.is_valid()) p_node->m_parent = oldval->m_parent;
+ } else if (p_node->m_right.is_empty()) {
p_node = p_node->m_left;
- else {
- t_node * swap = extract_left_leaf(p_node->m_right);
- swap->m_left = deleteme->m_left;
- swap->m_right = deleteme->m_right;
+ if (p_node.is_valid()) p_node->m_parent = oldval->m_parent;
+ } else {
+ t_nodeptr swap = extract_left_leaf(p_node->m_right);
+
+ swap->link_left(&*oldval->m_left);
+ swap->link_right(&*oldval->m_right);
+ swap->m_parent = oldval->m_parent;
recalc_depth(swap);
p_node = swap;
}
- deleteme->m_left = deleteme->m_right = NULL;
- deleteme->m_depth = 0;
- delete deleteme;
+ oldval->unlink();
}
template<typename t_nodewalk,typename t_callback>
static void __enum_items_recur(t_nodewalk * p_node,t_callback & p_callback) {
if (p_node != NULL) {
- __enum_items_recur<t_nodewalk>(p_node->m_left,p_callback);
- p_callback (p_node->m_data);
- __enum_items_recur<t_nodewalk>(p_node->m_right,p_callback);
+ __enum_items_recur<t_nodewalk>(&*p_node->m_left,p_callback);
+ p_callback (p_node->m_content);
+ __enum_items_recur<t_nodewalk>(&*p_node->m_right,p_callback);
}
}
-
template<typename t_search>
- static t_storage * g_find_or_add(t_node * & p_base,t_search const & p_search,bool & p_new)
+ static t_node * g_find_or_add_node(t_nodeptr & p_base,t_node * parent,t_search const & p_search,bool & p_new)
{
- if (p_base == NULL) {
+ if (p_base.is_empty()) {
p_base = new t_node(p_search);
+ p_base->m_parent = parent;
p_new = true;
- return &p_base->m_data;
+ return p_base.get_ptr();
}
- int result = compare(p_base->m_data,p_search);
+ PFC_ASSERT( p_base->m_parent == parent );
+
+ int result = compare(p_base->m_content,p_search);
if (result > 0) {
- t_storage * ret = g_find_or_add<t_search>(p_base->m_left,p_search,p_new);
+ t_node * ret = g_find_or_add_node<t_search>(p_base->m_left,&*p_base,p_search,p_new);
if (p_new) {
recalc_depth(p_base);
g_rebalance(p_base);
}
return ret;
} else if (result < 0) {
- t_storage * ret = g_find_or_add<t_search>(p_base->m_right,p_search,p_new);
+ t_node * ret = g_find_or_add_node<t_search>(p_base->m_right,&*p_base,p_search,p_new);
if (p_new) {
recalc_depth(p_base);
g_rebalance(p_base);
@@ -136,68 +204,76 @@ namespace pfc { return ret;
} else {
p_new = false;
- return &p_base->m_data;
+ return p_base.get_ptr();
}
}
- static void g_rotate_right(t_node * & p_node) {
- t_node * oldroot = p_node;
- t_node * newroot = oldroot->m_right;
- PFC_ASSERT(newroot != NULL);
- oldroot->m_right = newroot->m_left;
- newroot->m_left = oldroot;
+
+ template<typename t_search>
+ static t_storage * g_find_or_add(t_nodeptr & p_base,t_node * parent,t_search const & p_search,bool & p_new) {
+ return &g_find_or_add_node(p_base,parent,p_search,p_new)->m_content;
+ }
+
+
+ static void g_rotate_right(t_nodeptr & p_node) {
+ t_nodeptr oldroot = p_node;
+ t_nodeptr newroot = oldroot->m_right;
+ oldroot->link_child(true, &*newroot->m_left);
+ newroot->m_left = oldroot;
+ newroot->m_parent = oldroot->m_parent;
+ oldroot->m_parent = &*newroot;
recalc_depth(oldroot);
recalc_depth(newroot);
p_node = newroot;
}
- static void g_rotate_left(t_node * & p_node) {
- t_node * oldroot = p_node;
- t_node * newroot = oldroot->m_left;
- PFC_ASSERT(newroot != NULL);
- oldroot->m_left = newroot->m_right;
- newroot->m_right = oldroot;
+ static void g_rotate_left(t_nodeptr & p_node) {
+ t_nodeptr oldroot = p_node;
+ t_nodeptr newroot = oldroot->m_left;
+ oldroot->link_child(false, &*newroot->m_right);
+ newroot->m_right = oldroot;
+ newroot->m_parent = oldroot->m_parent;
+ oldroot->m_parent = &*newroot;
recalc_depth(oldroot);
recalc_depth(newroot);
p_node = newroot;
}
- static void g_rebalance(t_node * & p_node) {
- int balance = test_depth(p_node);
+ static void g_rebalance(t_nodeptr & p_node) {
+ t_ssize balance = test_depth(p_node);
if (balance > 1) {
//right becomes root
- if (test_depth((p_node)->m_right) < 0) {
- g_rotate_left((p_node)->m_right);
+ if (test_depth(p_node->m_right) < 0) {
+ g_rotate_left(p_node->m_right);
}
g_rotate_right(p_node);
} else if (balance < -1) {
//left becomes root
- if (test_depth((p_node)->m_left) > 0) {
- g_rotate_right((p_node)->m_left);
+ if (test_depth(p_node->m_left) > 0) {
+ g_rotate_right(p_node->m_left);
}
g_rotate_left(p_node);
}
+ selftest(p_node);
}
template<typename t_search>
- static bool g_remove(t_node * & p_node,t_search const & p_search) {
- if (p_node == NULL) return false;
+ static bool g_remove(t_nodeptr & p_node,t_search const & p_search) {
+ if (p_node.is_empty()) return false;
- int result = compare(p_node->m_data,p_search);
+ int result = compare(p_node->m_content,p_search);
if (result == 0) {
remove_internal(p_node);
if (p_node != NULL) {
recalc_depth(p_node);
g_rebalance(p_node);
- selftest(p_node);
}
return true;
} else {
if (g_remove<t_search>(result > 0 ? p_node->m_left : p_node->m_right,p_search)) {
recalc_depth(p_node);
g_rebalance(p_node);
- selftest(p_node);
return true;
} else {
return false;
@@ -205,56 +281,79 @@ namespace pfc { }
}
- static void selftest(t_node * p_node) {
- #if 0 //def _DEBUG
+ static void selftest(t_nodeptr const& p_node) {
+ #if 0 //def _DEBUG//SLOW!
if (p_node != NULL) {
selftest(p_node->m_left);
selftest(p_node->m_right);
assert_children(p_node);
- int delta = test_depth(p_node);
- assert(delta >= -1 && delta <= 1);
+ t_ssize delta = test_depth(p_node);
+ PFC_ASSERT(delta >= -1 && delta <= 1);
+
+ if (p_node->m_left.is_valid()) {
+ PFC_ASSERT( p_node.get_ptr() == p_node->m_left->m_parent );
+ }
+ if (p_node->m_right.is_valid()) {
+ PFC_ASSERT( p_node.get_ptr() == p_node->m_right->m_parent );
+ }
+
+ if (p_node->m_parent != NULL) {
+ PFC_ASSERT(p_node == p_node->m_parent->m_left || p_node == p_node->m_parent->m_right);
+ }
}
#endif
}
- static t_size calc_count(const t_node * p_node) {
+ static t_size calc_count(const t_node * p_node) throw() {
if (p_node != NULL) {
- return 1 + calc_count(p_node->m_left) + calc_count(p_node->m_right);
+ return 1 + calc_count(&*p_node->m_left) + calc_count(&*p_node->m_right);
} else {
return 0;
}
}
- template<typename t_item>
- t_storage * __find_item_ptr(t_item const & p_item) const {
- t_node* ptr = m_root;
+ template<typename t_param>
+ t_storage * _find_item_ptr(t_param const & p_item) const {
+ t_node* ptr = &*m_root;
while(ptr != NULL) {
- int result = compare(ptr->m_data,p_item);
- if (result > 0) ptr=ptr->m_left;
- else if (result < 0) ptr=ptr->m_right;
- else return &ptr->m_data;
+ int result = compare(ptr->m_content,p_item);
+ if (result > 0) ptr=&*ptr->m_left;
+ else if (result < 0) ptr=&*ptr->m_right;
+ else return &ptr->m_content;
+ }
+ return NULL;
+ }
+
+ template<typename t_param>
+ t_node * _find_node_ptr(t_param const & p_item) const {
+ t_node* ptr = &*m_root;
+ while(ptr != NULL) {
+ int result = compare(ptr->m_content,p_item);
+ if (result > 0) ptr=&*ptr->m_left;
+ else if (result < 0) ptr=&*ptr->m_right;
+ else return ptr;
}
return NULL;
}
template<bool inclusive,bool above,typename t_search> t_storage * __find_nearest(const t_search & p_search) const {
- t_node * ptr = m_root;
+ t_node * ptr = &*m_root;
t_storage * found = NULL;
while(ptr != NULL) {
- int result = compare(ptr->m_data,p_search);
+ int result = compare(ptr->m_content,p_search);
if (above) result = -result;
if (inclusive && result == 0) {
//direct hit
- found = &ptr->m_data;
+ found = &ptr->m_content;
break;
} else if (result < 0) {
//match
- found = &ptr->m_data;
- ptr = ptr->child<!above>();
+ found = &ptr->m_content;
+ ptr = ptr->child(!above);
} else {
//mismatch
- ptr = ptr->child<above>();
+ ptr = ptr->child(above);
}
}
return found;
@@ -263,10 +362,10 @@ namespace pfc { avltree_t() : m_root(NULL) {}
~avltree_t() {reset();}
const t_self & operator=(const t_self & p_other) {__copy(p_other);return *this;}
- avltree_t(const t_self & p_other) : m_root(NULL) {__copy(p_other);}
+ avltree_t(const t_self & p_other) : m_root(NULL) {try{__copy(p_other);} catch(...) {remove_all(); throw;}}
template<typename t_other> const t_self & operator=(const t_other & p_other) {copy_list_enumerated(*this,p_other);return *this;}
- template<typename t_other> avltree_t(const t_other & p_other) : m_root(NULL) {copy_list_enumerated(*this,p_other);}
+ template<typename t_other> avltree_t(const t_other & p_other) : m_root(NULL) {try{copy_list_enumerated(*this,p_other);}catch(...){remove_all(); throw;}}
template<bool inclusive,bool above,typename t_search> const t_storage * find_nearest_item(const t_search & p_search) const {
@@ -277,93 +376,172 @@ namespace pfc { return __find_nearest<inclusive,above>(p_search);
}
- template<typename t_item>
- t_storage & add_item(t_item const & p_item) {
+ template<typename t_param>
+ t_storage & add_item(t_param const & p_item) {
bool dummy;
return add_item_ex(p_item,dummy);
}
- template<typename t_item>
- t_storage & add_item_ex(t_item const & p_item,bool & p_isnew) {
- t_storage * ret = g_find_or_add(m_root,p_item,p_isnew);
+ template<typename t_param>
+ t_self & operator+=(const t_param & p_item) {add_item(p_item);return *this;}
+
+ template<typename t_param>
+ t_self & operator-=(const t_param & p_item) {remove_item(p_item);return *this;}
+
+ //! Returns true when the list has been altered, false when the item was already present before.
+ template<typename t_param>
+ bool add_item_check(t_param const & item) {
+ bool isNew = false;
+ g_find_or_add(m_root,NULL,item,isNew);
+ selftest(m_root);
+ return isNew;
+ }
+ template<typename t_param>
+ t_storage & add_item_ex(t_param const & p_item,bool & p_isnew) {
+ t_storage * ret = g_find_or_add(m_root,NULL,p_item,p_isnew);
selftest(m_root);
return *ret;
}
- template<typename t_item>
- void set_item(const t_item & p_item) {
+ template<typename t_param>
+ void set_item(const t_param & p_item) {
bool isnew;
t_storage & found = add_item_ex(p_item,isnew);
if (isnew) found = p_item;
}
- template<typename t_item>
- const t_storage * find_item_ptr(t_item const & p_item) const {
- return __find_item_ptr(p_item);
- }
+ template<typename t_param>
+ const t_storage * find_item_ptr(t_param const & p_item) const {return _find_item_ptr(p_item);}
- //! WARNING: caller must not alter the item in a way that changes the sort order.
- template<typename t_item>
- t_storage * find_item_ptr(t_item const & p_item) {
- return __find_item_ptr(p_item);
- }
+ //! Unsafe! Caller must not modify items in a way that changes sort order!
+ template<typename t_param>
+ t_storage * find_item_ptr(t_param const & p_item) { return _find_item_ptr(p_item); }
+
+ template<typename t_param> const_iterator find(t_param const & item) const { return _find_node_ptr(item);}
- template<typename t_item>
- bool have_item(const t_item & p_item) const {
+ //! Unsafe! Caller must not modify items in a way that changes sort order!
+ template<typename t_param> iterator find(t_param const & item) { return _find_node_ptr(item);}
+
+
+ template<typename t_param>
+ bool contains(const t_param & p_item) const {
return find_item_ptr(p_item) != NULL;
}
+
+ //! Same as contains().
+ template<typename t_param>
+ bool have_item(const t_param & p_item) const {return contains(p_item);}
+
+ void remove_all() throw() {
+ _unlink_recur(m_root);
+ m_root.release();
+ }
- void remove_all() {
- delete pfc::replace_null_t(m_root);
+ bool remove(const_iterator const& iter) {
+ PFC_ASSERT(iter.is_valid());
+ return remove_item(*iter);//OPTIMIZEME
+ //should never return false unless there's a bug in calling code
}
- template<typename t_item>
- void remove_item(t_item const & p_item) {
- g_remove<t_item>(m_root,p_item);
+ template<typename t_param>
+ bool remove_item(t_param const & p_item) {
+ bool ret = g_remove<t_param>(m_root,p_item);
selftest(m_root);
+ return ret;
}
- t_size get_count() const {
- return calc_count(m_root);
+ t_size get_count() const throw() {
+ return calc_count(&*m_root);
}
template<typename t_callback>
void enumerate(t_callback & p_callback) const {
- __enum_items_recur<const t_node>(m_root,p_callback);
+ __enum_items_recur<const t_node>(&*m_root,p_callback);
}
//! Allows callback to modify the tree content.
- //! WARNING: items must not be altered in a way that changes their sort order.
+ //! Unsafe! Caller must not modify items in a way that changes sort order!
template<typename t_callback>
- void __enumerate(t_callback & p_callback) {
- __enum_items_recur<t_node>(m_root,p_callback);
+ void _enumerate_var(t_callback & p_callback) { __enum_items_recur<t_node>(&*m_root,p_callback); }
+
+ template<typename t_param> iterator insert(const t_param & p_item) {
+ bool isNew;
+ t_node * ret = g_find_or_add_node(m_root,NULL,p_item,isNew);
+ selftest(m_root);
+ return ret;
}
//deprecated backwards compatibility method wrappers
- template<typename t_item> t_storage & add(const t_item & p_item) {return add_item(p_item);}
- template<typename t_item> t_storage & add_ex(const t_item & p_item,bool & p_isnew) {return add_item_ex(p_item,p_isnew);}
- template<typename t_item> const t_storage * find_ptr(t_item const & p_item) const {return find_item_ptr(p_item);}
- template<typename t_item> t_storage * find_ptr(t_item const & p_item) {return find_item_ptr(p_item);}
- template<typename t_item> bool exists(t_item const & p_item) const {return have_item(p_item);}
+ template<typename t_param> t_storage & add(const t_param & p_item) {return add_item(p_item);}
+ template<typename t_param> t_storage & add_ex(const t_param & p_item,bool & p_isnew) {return add_item_ex(p_item,p_isnew);}
+ template<typename t_param> const t_storage * find_ptr(t_param const & p_item) const {return find_item_ptr(p_item);}
+ template<typename t_param> t_storage * find_ptr(t_param const & p_item) {return find_item_ptr(p_item);}
+ template<typename t_param> bool exists(t_param const & p_item) const {return have_item(p_item);}
void reset() {remove_all();}
- template<typename t_item> void remove(t_item const & p_item) {remove_item(p_item);}
+
+
+
+
+ const_iterator first() const throw() {return _firstlast(false);}
+ const_iterator last() const throw() {return _firstlast(true);}
+ //! Unsafe! Caller must not modify items in a way that changes sort order!
+ iterator _first_var() { return _firstlast(false); }
+ //! Unsafe! Caller must not modify items in a way that changes sort order!
+ iterator _last_var() { return _firstlast(true); }
+
+ template<typename t_param> bool get_first(t_param & p_item) const throw() {
+ const_iterator iter = first();
+ if (!iter.is_valid()) return false;
+ p_item = *iter;
+ return true;
+ }
+ template<typename t_param> bool get_last(t_param & p_item) const throw() {
+ const_iterator iter = last();
+ if (!iter.is_valid()) return false;
+ p_item = *iter;
+ return true;
+ }
+
+ static bool equals(const t_self & v1, const t_self & v2) {
+ return listEquals(v1,v2);
+ }
+ bool operator==(const t_self & other) const {return equals(*this,other);}
+ bool operator!=(const t_self & other) const {return !equals(*this,other);}
private:
- static t_node * __copy_recur(const t_node * p_source) {
+ static void _unlink_recur(t_nodeptr & node) {
+ if (node.is_valid()) {
+ _unlink_recur(node->m_left);
+ _unlink_recur(node->m_right);
+ node->unlink();
+ }
+ }
+ t_node* _firstlast(bool which) const throw() {
+ if (m_root.is_empty()) return NULL;
+ for(t_node * walk = &*m_root; ; ) {
+ t_node * next = walk->child(which);
+ if (next == NULL) return walk;
+ PFC_ASSERT( next->m_parent == walk );
+ walk = next;
+ }
+ }
+ static t_nodeptr __copy_recur(t_node * p_source,t_node * parent) {
if (p_source == NULL) {
return NULL;
} else {
- pfc::ptrholder_t<t_node> newnode = new t_node(p_source->m_data);
+ t_nodeptr newnode = new t_node(p_source->m_content);
newnode->m_depth = p_source->m_depth;
- newnode->m_left = __copy_recur(p_source->m_left);
- newnode->m_right = __copy_recur(p_source->m_right);
- return newnode.detach();
+ newnode->m_left = __copy_recur(&*p_source->m_left,&*newnode);
+ newnode->m_right = __copy_recur(&*p_source->m_right,&*newnode);
+ newnode->m_parent = parent;
+ return newnode;
}
}
void __copy(const t_self & p_other) {
reset();
- m_root = __copy_recur(p_other.m_root);
+ m_root = __copy_recur(&*p_other.m_root,NULL);
+ selftest(m_root);
}
};
@@ -371,4 +549,3 @@ namespace pfc { template<typename t_storage,typename t_comparator>
class traits_t<avltree_t<t_storage,t_comparator> > : public traits_default_movable {};
}
-#endif //_AVLTREE_T_H_INCLUDED_
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/base64.cpp b/Plugins/listeningto/players/foo_mlt/pfc/base64.cpp new file mode 100644 index 0000000..ce1c36e --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/base64.cpp @@ -0,0 +1,99 @@ +#include "pfc.h"
+
+namespace bitWriter {
+ static void set_bit(t_uint8 * p_stream,size_t p_offset, bool state) {
+ t_uint8 mask = 1 << (7-(p_offset&7));
+ t_uint8 & byte = p_stream[p_offset>>3];
+ byte = (byte & ~mask) | (state ? mask : 0);
+ }
+ static void set_bits(t_uint8 * stream, t_size offset, t_size word, t_size bits) {
+ for(t_size walk = 0; walk < bits; ++walk) {
+ t_uint8 bit = (t_uint8)((word >> (bits - walk - 1))&1);
+ set_bit(stream, offset+walk, bit != 0);
+ }
+ }
+};
+
+namespace pfc {
+ t_size base64_decode_estimate(const char * text) {
+ t_size textLen = strlen(text);
+ if (textLen % 4 != 0) throw pfc::exception_invalid_params();
+ t_size outLen = (textLen / 4) * 3;
+
+ if (textLen >= 4) {
+ if (text[textLen-1] == '=') {
+ textLen--; outLen--;
+ if (text[textLen-1] == '=') {
+ textLen--; outLen--;
+ }
+ }
+ }
+ return outLen;
+ }
+
+
+
+ void base64_decode(const char * text, void * out) {
+ static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ t_uint8 alphabetRev[256];
+ for(t_size walk = 0; walk < PFC_TABSIZE(alphabetRev); ++walk) alphabetRev[walk] = 0xFF;
+ for(t_size walk = 0; walk < PFC_TABSIZE(alphabet); ++walk) alphabetRev[alphabet[walk]] = (t_uint8)walk;
+ const t_size textLen = strlen(text);
+
+ if (textLen % 4 != 0) throw pfc::exception_invalid_params();
+ if (textLen == 0) return;
+
+ t_size outWritePtr = 0;
+
+ {
+ const t_size max = textLen - 4;
+ t_size textWalk = 0;
+ for(; textWalk < max; textWalk ++) {
+ const t_uint8 v = alphabetRev[(t_uint8)text[textWalk]];
+ if (v == 0xFF) throw pfc::exception_invalid_params();
+ bitWriter::set_bits(reinterpret_cast<t_uint8*>(out),outWritePtr,v,6);
+ outWritePtr += 6;
+ }
+
+ t_uint8 temp[3];
+ t_size tempWritePtr = 0;
+ for(; textWalk < textLen; textWalk ++) {
+ const char c = text[textWalk];
+ if (c == '=') break;
+ const t_uint8 v = alphabetRev[(t_uint8)c];
+ if (v == 0xFF) throw pfc::exception_invalid_params();
+ bitWriter::set_bits(temp,tempWritePtr,v,6);
+ tempWritePtr += 6;
+ }
+ for(; textWalk < textLen; textWalk ++) {
+ if (text[textWalk] != '=') throw pfc::exception_invalid_params();
+ }
+ memcpy(reinterpret_cast<t_uint8*>(out) + (outWritePtr/8), temp, tempWritePtr/8);
+ }
+ }
+ void base64_encode(pfc::string_base & out, const void * in, t_size inSize) {
+ out.reset(); base64_encode_append(out, in, inSize);
+ }
+ void base64_encode_append(pfc::string_base & out, const void * in, t_size inSize) {
+ static const char alphabet[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+ int shift = 0;
+ int accum = 0;
+ const t_uint8 * inPtr = reinterpret_cast<const t_uint8*>(in);
+
+ for(t_size walk = 0; walk < inSize; ++walk) {
+ accum <<= 8;
+ shift += 8;
+ accum |= inPtr[walk];
+ while ( shift >= 6 ) {
+ shift -= 6;
+ out << format_char( alphabet[(accum >> shift) & 0x3F] );
+ }
+ }
+ if (shift == 4) {
+ out << format_char( alphabet[(accum & 0xF)<<2] ) << "=";
+ } else if (shift == 2) {
+ out << format_char( alphabet[(accum & 0x3)<<4] ) << "==";
+ }
+ }
+
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/base64.h b/Plugins/listeningto/players/foo_mlt/pfc/base64.h new file mode 100644 index 0000000..fae66ab --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/base64.h @@ -0,0 +1,12 @@ +namespace pfc {
+ void base64_encode(pfc::string_base & out, const void * in, t_size inSize);
+ void base64_encode_append(pfc::string_base & out, const void * in, t_size inSize);
+ t_size base64_decode_estimate(const char * text);
+ void base64_decode(const char * text, void * out);
+
+ template<typename t_buffer> void base64_decode_array(t_buffer & out, const char * text) {
+ PFC_STATIC_ASSERT( sizeof(out[0]) == 1 );
+ out.set_size_discard( base64_decode_estimate(text) );
+ base64_decode(text, out.get_ptr());
+ }
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/binary_search.h b/Plugins/listeningto/players/foo_mlt/pfc/binary_search.h new file mode 100644 index 0000000..5b15889 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/binary_search.h @@ -0,0 +1,81 @@ +namespace pfc {
+ class comparator_default;
+
+ template<typename t_comparator = comparator_default>
+ class binarySearch {
+ public:
+
+ template<typename t_container,typename t_param>
+ static bool run(const t_container & p_container,t_size p_base,t_size p_count,const t_param & p_param,t_size & p_result) {
+ t_size max = p_base + p_count;
+ t_size min = p_base;
+ while(min<max) {
+ t_size ptr = min + ( (max-min) >> 1);
+ int state = t_comparator::compare(p_param,p_container[ptr]);
+ if (state > 0) min = ptr + 1;
+ else if (state < 0) max = ptr;
+ else {
+ p_result = ptr;
+ return true;
+ }
+ }
+ p_result = min;
+ return false;
+ }
+
+
+ template<typename t_container,typename t_param>
+ static bool runGroupBegin(const t_container & p_container,t_size p_base,t_size p_count,const t_param & p_param,t_size & p_result) {
+ t_size max = p_base + p_count;
+ t_size min = p_base;
+ bool found = false;
+ while(min<max) {
+ t_size ptr = min + ( (max-min) >> 1);
+ int state = t_comparator::compare(p_param,p_container[ptr]);
+ if (state > 0) min = ptr + 1;
+ else if (state < 0) max = ptr;
+ else {
+ found = true; max = ptr;
+ }
+ }
+ p_result = min;
+ return found;
+ }
+
+ template<typename t_container,typename t_param>
+ static bool runGroupEnd(const t_container & p_container,t_size p_base,t_size p_count,const t_param & p_param,t_size & p_result) {
+ t_size max = p_base + p_count;
+ t_size min = p_base;
+ bool found = false;
+ while(min<max) {
+ t_size ptr = min + ( (max-min) >> 1);
+ int state = t_comparator::compare(p_param,p_container[ptr]);
+ if (state > 0) min = ptr + 1;
+ else if (state < 0) max = ptr;
+ else {
+ found = true; min = ptr + 1;
+ }
+ }
+ p_result = min;
+ return found;
+ }
+
+ template<typename t_container,typename t_param>
+ static bool runGroup(const t_container & p_container,t_size p_base,t_size p_count,const t_param & p_param,t_size & p_result,t_size & p_resultCount) {
+ if (!runGroupBegin(p_container,p_base,p_count,p_param,p_result)) {
+ p_resultCount = 0;
+ return false;
+ }
+ t_size groupEnd;
+ if (!runGroupEnd(p_container,p_result,p_count - p_result,p_param,groupEnd)) {
+ //should not happen..
+ PFC_ASSERT(0);
+ p_resultCount = 0;
+ return false;
+ }
+ PFC_ASSERT(groupEnd > p_result);
+ p_resultCount = groupEnd - p_result;
+ return true;
+ }
+ };
+};
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/bit_array.h b/Plugins/listeningto/players/foo_mlt/pfc/bit_array.h index 3dcc13f..d8e0626 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/bit_array.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/bit_array.h @@ -1,44 +1,67 @@ #ifndef _PFC_BIT_ARRAY_H_
#define _PFC_BIT_ARRAY_H_
+namespace pfc {
+ //! Bit array interface class, constant version (you can only retrieve values). \n
+ //! Range of valid indexes depends on the context. When passing a bit_array as a parameter to some code, valid index range must be signaled independently.
+ class NOVTABLE bit_array {
+ public:
+ virtual bool get(t_size n) const = 0;
+ //! Returns the first occurance of val between start and start+count (excluding start+count), or start+count if not found; count may be negative to search back rather than forward. \n
+ //! Can be overridden by bit_array implementations for improved speed in specific cases.
+ virtual t_size find(bool val,t_size start,t_ssize count) const
+ {
+ t_ssize d, todo, ptr = start;
+ if (count==0) return start;
+ else if (count<0) {d = -1; todo = -count;}
+ else {d = 1; todo = count;}
+ while(todo>0 && get(ptr)!=val) {ptr+=d;todo--;}
+ return ptr;
+ }
+ inline bool operator[](t_size n) const {return get(n);}
-class NOVTABLE bit_array {
-public:
- virtual bool get(t_size n) const = 0;
- virtual t_size find(bool val,t_size start,t_ssize count) const//can be overridden for improved speed; returns first occurance of val between start and start+count (excluding start+count), or start+count if not found; count may be negative if we're searching back
- {
- t_ssize d, todo, ptr = start;
- if (count==0) return start;
- else if (count<0) {d = -1; todo = -count;}
- else {d = 1; todo = count;}
- while(todo>0 && get(ptr)!=val) {ptr+=d;todo--;}
- return ptr;
- }
- inline bool operator[](t_size n) const {return get(n);}
+ t_size calc_count(bool val,t_size start,t_size count,t_size count_max = ~0) const//counts number of vals for start<=n<start+count
+ {
+ t_size found = 0;
+ t_size max = start+count;
+ t_size ptr;
+ for(ptr=find(val,start,count);found<count_max && ptr<max;ptr=find(val,ptr+1,max-ptr-1)) found++;
+ return found;
+ }
- t_size calc_count(bool val,t_size start,t_size count,t_size count_max = ~0) const//counts number of vals for start<=n<start+count
- {
- t_size found = 0;
- t_size max = start+count;
- t_size ptr;
- for(ptr=find(val,start,count);found<count_max && ptr<max;ptr=find(val,ptr+1,max-ptr-1)) found++;
- return found;
- }
+ inline t_size find_first(bool val,t_size start,t_size max) const {return find(val,start,max-start);}
+ inline t_size find_next(bool val,t_size previous,t_size max) const {return find(val,previous+1,max-(previous+1));}
+ protected:
+ bit_array() {}
+ ~bit_array() {}
+ };
- inline t_size find_first(bool val,t_size start,t_size max) const {return find(val,start,max-start);}
- inline t_size find_next(bool val,t_size previous,t_size max) const {return find(val,previous+1,max-(previous+1));}
- //for(n = mask.find_first(true,0,m); n < m; n = mask.find_next(true,n,m) )
-protected:
- bit_array() {}
- ~bit_array() {}
-};
+ //! Bit array interface class, variable version (you can both set and retrieve values). \n
+ //! As with the constant version, valid index range depends on the context.
+ class NOVTABLE bit_array_var : public bit_array {
+ public:
+ virtual void set(t_size n,bool val)=0;
+ protected:
+ bit_array_var() {}
+ ~bit_array_var() {}
+ };
+}
-class NOVTABLE bit_array_var : public bit_array {
+typedef pfc::bit_array bit_array; //for compatibility
+typedef pfc::bit_array_var bit_array_var; //for compatibility
+
+class bit_array_wrapper_permutation : public bit_array {
public:
- virtual void set(t_size n,bool val)=0;
-protected:
- bit_array_var() {}
- ~bit_array_var() {}
+ bit_array_wrapper_permutation(const t_size * p_permutation, t_size p_size) : m_permutation(p_permutation), m_size(p_size) {}
+ bool get(t_size n) const {
+ if (n < m_size) {
+ return m_permutation[n] != n;
+ } else {
+ return false;
+ }
+ }
+private:
+ const t_size * const m_permutation;
+ const t_size m_size;
};
-
#endif
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/bit_array_impl.h b/Plugins/listeningto/players/foo_mlt/pfc/bit_array_impl.h index 828761d..0c2e98a 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/bit_array_impl.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/bit_array_impl.h @@ -61,6 +61,8 @@ public: }
};
+//! Combines two arrays using the AND logical operator. \n
+//! Valid index range is an intersection of valid index ranges of the parameter arrays.
class bit_array_and : public bit_array
{
const bit_array & a1, & a2;
@@ -69,6 +71,8 @@ public: bool get(t_size n) const {return a1.get(n) && a2.get(n);}
};
+//! Combines two arrays using the OR logical operator. \n
+//! Valid index range is an intersection of valid index ranges of the parameter arrays.
class bit_array_or : public bit_array
{
const bit_array & a1, & a2;
@@ -77,6 +81,8 @@ public: bool get(t_size n) const {return a1.get(n) || a2.get(n);}
};
+//! Combines two arrays using the XOR logical operator. \n
+//! Valid index range is an intersection of valid index ranges of the parameter arrays.
class bit_array_xor : public bit_array
{
const bit_array & a1, & a2;
@@ -89,6 +95,8 @@ public: }
};
+//! Negation of another array. \n
+//! Valid index range is the same as valid index range of the parameter array.
class bit_array_not : public bit_array
{
const bit_array & a1;
@@ -151,6 +159,8 @@ public: }
};
+//! Generic variable bit_array implementation. \n
+//! Needs to be initialized with requested array size before use.
class bit_array_bittable : public bit_array_var
{
pfc::array_t<t_uint8> m_data;
@@ -183,6 +193,7 @@ public: }
bit_array_bittable(t_size p_count) : m_count(0) {resize(p_count);}
+ bit_array_bittable() : m_count() {}
void set(t_size n,bool val)
{
@@ -203,8 +214,9 @@ public: };
-class bit_array_order_changed : public bit_array
-{
+//! Bit array that takes a permutation and signals indexes reordered by the permutation. \n
+//! Valid index range same as length of the permutation.
+class bit_array_order_changed : public bit_array {
public:
bit_array_order_changed(const t_size * p_order) : m_order(p_order) {}
bool get(t_size n) const
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/bit_array_impl_part2.h b/Plugins/listeningto/players/foo_mlt/pfc/bit_array_impl_part2.h new file mode 100644 index 0000000..fa5212e --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/bit_array_impl_part2.h @@ -0,0 +1,32 @@ +namespace pfc {
+ //! Generic variable bit array implementation. \n
+ //! Not very efficient to handle lots of items set to true but offers fast searches for true values and accepts arbitrary indexes, contrary to bit_array_bittable. Note that searches for false values are relatively inefficient.
+ class bit_array_var_impl : public bit_array_var {
+ public:
+ bool get(t_size n) const {
+ return m_data.have_item(n);
+ }
+ t_size find(bool val,t_size start,t_ssize count) const {
+ if (!val) {
+ return bit_array::find(false, start, count); //optimizeme.
+ } else if (count > 0) {
+ const t_size * v = m_data.find_nearest_item<true, true>(start);
+ if (v == NULL || *v > start+count) return start + count;
+ return *v;
+ } else if (count < 0) {
+ const t_size * v = m_data.find_nearest_item<true, false>(start);
+ if (v == NULL || *v < start+count) return start + count;
+ return *v;
+ } else return start;
+ }
+ void set(t_size n,bool val) {
+ if (val) m_data += n;
+ else m_data -= n;
+ }
+ void set(t_size n) {m_data += n;}
+ void unset(t_size n) {m_data -= n;}
+ t_size get_true_count() const {return m_data.get_count();}
+ private:
+ avltree_t<t_size> m_data;
+ };
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/bsearch.cpp b/Plugins/listeningto/players/foo_mlt/pfc/bsearch.cpp index 29718e5..b49f07e 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/bsearch.cpp +++ b/Plugins/listeningto/players/foo_mlt/pfc/bsearch.cpp @@ -1,6 +1,6 @@ #include "pfc.h"
-
+//deprecated
/*
class NOVTABLE bsearch_callback
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/bsearch.h b/Plugins/listeningto/players/foo_mlt/pfc/bsearch.h index 9b3f77d..2c147e4 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/bsearch.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/bsearch.h @@ -1,12 +1,14 @@ namespace pfc {
+ //deprecated
+
class NOVTABLE bsearch_callback
{
public:
virtual int test(t_size n) const = 0;
};
- PFC_DLL_EXPORT bool bsearch(t_size p_count, bsearch_callback const & p_callback,t_size & p_result);
+ bool bsearch(t_size p_count, bsearch_callback const & p_callback,t_size & p_result);
template<typename t_container,typename t_compare, typename t_param>
class bsearch_callback_impl_simple_t : public bsearch_callback {
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/bsearch_inline.h b/Plugins/listeningto/players/foo_mlt/pfc/bsearch_inline.h index 4358bde..272a275 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/bsearch_inline.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/bsearch_inline.h @@ -1,5 +1,7 @@ namespace pfc {
+ //deprecated
+
template<typename t_callback>
inline bool bsearch_inline_t(t_size p_count, const t_callback & p_callback,t_size & p_result)
{
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/byte_order_helper.h b/Plugins/listeningto/players/foo_mlt/pfc/byte_order_helper.h index 75f3a18..4ff1400 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/byte_order_helper.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/byte_order_helper.h @@ -85,9 +85,9 @@ namespace pfc { #include <endian.h>
#if __BYTE_ORDER == __LITTLE_ENDIAN
-#define PFC_BYTE_ORDER_IS_BIG_ENDIAN 1
-#else
#define PFC_BYTE_ORDER_IS_BIG_ENDIAN 0
+#else
+#define PFC_BYTE_ORDER_IS_BIG_ENDIAN 1
#endif
#endif//_MSC_VER
@@ -100,10 +100,8 @@ namespace pfc { namespace pfc {
- enum {
- byte_order_is_big_endian = PFC_BYTE_ORDER_IS_BIG_ENDIAN,
- byte_order_is_little_endian = PFC_BYTE_ORDER_IS_LITTLE_ENDIAN,
- };
+ static const bool byte_order_is_big_endian = !!PFC_BYTE_ORDER_IS_BIG_ENDIAN;
+ static const bool byte_order_is_little_endian = !!PFC_BYTE_ORDER_IS_LITTLE_ENDIAN;
template<typename T> T byteswap_if_be_t(T p_param) {return byte_order_is_big_endian ? byteswap_t(p_param) : p_param;}
template<typename T> T byteswap_if_le_t(T p_param) {return byte_order_is_little_endian ? byteswap_t(p_param) : p_param;}
@@ -202,6 +200,29 @@ namespace pfc { decode_big_endian(temp,p_buffer);
return temp;
}
+
+ template<bool IsBigEndian,typename TInt>
+ inline void decode_endian(TInt & p_out,const t_uint8 * p_buffer) {
+ if (IsBigEndian) decode_big_endian(p_out,p_buffer);
+ else decode_little_endian(p_out,p_buffer);
+ }
+ template<bool IsBigEndian,typename TInt>
+ inline void encode_endian(t_uint8 * p_buffer,TInt p_in) {
+ if (IsBigEndian) encode_big_endian(p_in,p_value);
+ else encode_little_endian(p_in,p_value);
+ }
+
+
+
+ template<unsigned width>
+ inline static void reverse_bytes(t_uint8 * p_buffer) {
+ pfc::swap_t(p_buffer[0],p_buffer[width-1]);
+ reverse_bytes<width-2>(p_buffer+1);
+ }
+
+ template<> inline static void reverse_bytes<1>(t_uint8 * p_buffer) { }
+ template<> inline static void reverse_bytes<0>(t_uint8 * p_buffer) { }
+
}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/chain_list_v2.h b/Plugins/listeningto/players/foo_mlt/pfc/chain_list_v2.h new file mode 100644 index 0000000..a6d6b64 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/chain_list_v2.h @@ -0,0 +1,264 @@ +namespace pfc {
+
+ template<typename t_item>
+ class __chain_list_elem : public _list_node<t_item> {
+ public:
+ typedef _list_node<t_item> t_node;
+ TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD_WITH_INITIALIZER(__chain_list_elem,t_node, {m_prev = m_next = NULL;});
+
+ typedef __chain_list_elem<t_item> t_self;
+
+ t_self * m_prev, * m_next;
+
+ t_node * prev() throw() {return m_prev;}
+ t_node * next() throw() {return m_next;}
+
+ //helper wrappers
+ void add_ref() throw() {this->refcount_add_ref();}
+ void release() throw() {this->refcount_release();}
+ //workaround for cross-list-relinking case - never actually deletes p_elem
+ void __release_temporary() throw() {this->_refcount_release_temporary();}
+ };
+
+ //! Differences between chain_list_v2_t<> and old chain_list_t<>: \n
+ //! Iterators pointing to removed items as well as to items belonging to no longer existing list objects remain valid but they're no longer walkable - as if the referenced item was the only item in the list. The old class invalidated iterators on deletion instead.
+ template<typename _t_item>
+ class chain_list_v2_t {
+ public:
+ typedef _t_item t_item;
+ typedef chain_list_v2_t<t_item> t_self;
+ typedef ::pfc::iterator<t_item> iterator;
+ typedef ::pfc::const_iterator<t_item> const_iterator;
+ typedef __chain_list_elem<t_item> t_elem;
+
+ chain_list_v2_t() : m_first(), m_last(), m_count() {}
+ chain_list_v2_t(const t_self & p_source) : m_first(), m_last(), m_count() {
+ try {
+ *this = p_source;
+ } catch(...) {
+ remove_all();
+ throw;
+ }
+ }
+ const t_self & operator=(const t_self & p_other) {
+ remove_all();
+ for(t_elem * walk = p_other.m_first; walk != NULL; walk = walk->m_next) {
+ add_item(walk->m_content);
+ }
+ return *this;
+ }
+
+ t_size get_count() const {return m_count;}
+
+ iterator first() {return iterator(m_first);}
+ iterator last() {return iterator(m_last);}
+ const_iterator first() const {return const_iterator(m_first);}
+ const_iterator last() const {return const_iterator(m_last);}
+
+ void remove_single(const_iterator const & p_iter) {
+ PFC_ASSERT(p_iter.is_valid());
+ __unlink(_elem(p_iter));
+ }
+
+ void remove(const_iterator const & p_iter) {
+ PFC_ASSERT(p_iter.is_valid());
+ __unlink(_elem(p_iter));
+ }
+
+ void remove_all() throw() {
+ while(m_first != NULL) __unlink(m_first);
+ PFC_ASSERT(m_count == 0);
+ }
+ void remove_range(const_iterator const & p_from,const_iterator const & p_to) {
+ for(t_elem * walk = _elem(p_from);;) {
+ if (walk == NULL) {PFC_ASSERT(!"Should not get here"); break;}//should not happen unless there is a bug in calling code
+ t_elem * next = walk->m_next;
+ __unlink(walk);
+ if (walk == _elem(p_to)) break;
+ walk = next;
+ }
+ }
+
+ template<typename t_callback> void enumerate(t_callback & p_callback) const {__enumerate_chain<const t_elem>(m_first,p_callback);}
+ template<typename t_callback> void enumerate(t_callback & p_callback) {__enumerate_chain<t_elem>(m_first,p_callback);}
+
+ template<typename t_source> bool remove_item(const t_source & p_item) {
+ t_elem * elem;
+ if (__find(elem,p_item)) {
+ __unlink(elem);
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ ~chain_list_v2_t() {remove_all();}
+
+ template<typename t_source>
+ inline void add_item(const t_source & p_source) {
+ __link_last(new t_elem(p_source));
+ }
+ template<typename t_source>
+ inline t_self & operator+=(const t_source & p_source) {
+ add_item(p_source); return *this;
+ }
+ iterator insert_last() {return __link_last(new t_elem);}
+ iterator insert_first() {return __link_first(new t_elem);}
+ iterator insert_after(const_iterator const & p_iter) {return __link_next(_elem(p_iter),new t_elem);}
+ iterator insert_before(const_iterator const & p_iter) {return __link_prev(_elem(p_iter),new t_elem);}
+ template<typename t_source> iterator insert_last(const t_source & p_source) {return __link_last(new t_elem(p_source));}
+ template<typename t_source> iterator insert_first(const t_source & p_source) {return __link_first(new t_elem(p_source));}
+ template<typename t_source> iterator insert_after(const_iterator const & p_iter,const t_source & p_source) {return __link_next(_elem(p_iter),new t_elem(p_source));}
+ template<typename t_source> iterator insert_before(const_iterator const & p_iter,const t_source & p_source) {return __link_prev(_elem(p_iter),new t_elem(p_source));}
+
+ template<typename t_source> const_iterator find_item(const t_source & p_item) const {
+ t_elem * elem;
+ if (!__find(elem,p_item)) return const_iterator();
+ return const_iterator(elem);
+ }
+
+ template<typename t_source> iterator find_item(const t_source & p_item) {
+ t_elem * elem;
+ if (!__find(elem,p_item)) return iterator();
+ return iterator(elem);
+ }
+
+ template<typename t_source> bool have_item(const t_source & p_item) const {
+ t_elem * dummy;
+ return __find(dummy,p_item);
+ }
+ template<typename t_source> void set_single(const t_source & p_item) {
+ remove_all(); add_item(p_item);
+ }
+
+ //! Slow!
+ const_iterator by_index(t_size p_index) const {return __by_index(p_index);}
+ //! Slow!
+ iterator by_index(t_size p_index) {return __by_index(p_index);}
+
+ t_self & operator<<(t_self & p_other) {
+ while(p_other.m_first != NULL) {
+ __link_last( p_other.__unlink_temporary(p_other.m_first) );
+ }
+ return *this;
+ }
+ t_self & operator>>(t_self & p_other) {
+ while(m_last != NULL) {
+ p_other.__link_first(__unlink_temporary(m_last));
+ }
+ return p_other;
+ }
+ //! Links an object that has been unlinked from another list. Unsafe.
+ void _link_last(const_iterator const& iter) {
+ PFC_ASSERT(iter.is_valid());
+ PFC_ASSERT( _elem(iter)->m_prev == NULL && _elem(iter)->m_next == NULL );
+ __link_last(_elem(iter));
+ }
+ //! Links an object that has been unlinked from another list. Unsafe.
+ void _link_first(const_iterator const& iter) {
+ PFC_ASSERT(iter.is_valid());
+ PFC_ASSERT( _elem(iter)->m_prev == NULL && _elem(iter)->m_next == NULL );
+ __link_first(_elem(iter));
+ }
+ private:
+ static t_elem * _elem(const_iterator const & iter) {
+ return static_cast<t_elem*>(iter._node());
+ }
+ t_elem * __by_index(t_size p_index) const {
+ t_elem * walk = m_first;
+ while(p_index > 0 && walk != NULL) {
+ p_index--;
+ walk = walk->m_next;
+ }
+ return walk;
+ }
+ template<typename t_elemwalk,typename t_callback>
+ static void __enumerate_chain(t_elemwalk * p_elem,t_callback & p_callback) {
+ t_elemwalk * walk = p_elem;
+ while(walk != NULL) {
+ p_callback(walk->m_content);
+ walk = walk->m_next;
+ }
+ }
+
+ template<typename t_source> bool __find(t_elem * & p_elem,const t_source & p_item) const {
+ for(t_elem * walk = m_first; walk != NULL; walk = walk->m_next) {
+ if (walk->m_content == p_item) {
+ p_elem = walk; return true;
+ }
+ }
+ return false;
+ }
+
+ void __unlink_helper(t_elem * p_elem) throw() {
+ (p_elem->m_prev == NULL ? m_first : p_elem->m_prev->m_next) = p_elem->m_next;
+ (p_elem->m_next == NULL ? m_last : p_elem->m_next->m_prev) = p_elem->m_prev;
+ p_elem->m_next = p_elem->m_prev = NULL;
+ }
+
+ //workaround for cross-list-relinking case - never actually deletes p_elem
+ t_elem * __unlink_temporary(t_elem * p_elem) throw() {
+ __unlink_helper(p_elem);
+ --m_count; p_elem->__release_temporary();
+ return p_elem;
+ }
+
+ t_elem * __unlink(t_elem * p_elem) throw() {
+ __unlink_helper(p_elem);
+ --m_count; p_elem->release();
+ return p_elem;
+ }
+ void __on_link(t_elem * p_elem) throw() {
+ p_elem->add_ref(); ++m_count;
+ }
+ t_elem * __link_first(t_elem * p_elem) throw() {
+ __on_link(p_elem);
+ p_elem->m_next = m_first;
+ p_elem->m_prev = NULL;
+ (m_first == NULL ? m_last : m_first->m_prev) = p_elem;
+ m_first = p_elem;
+ return p_elem;
+ }
+ t_elem * __link_last(t_elem * p_elem) throw() {
+ __on_link(p_elem);
+ p_elem->m_prev = m_last;
+ p_elem->m_next = NULL;
+ (m_last == NULL ? m_first : m_last->m_next) = p_elem;
+ m_last = p_elem;
+ return p_elem;
+ }
+ t_elem * __link_next(t_elem * p_prev,t_elem * p_elem) throw() {
+ __on_link(p_elem);
+ p_elem->m_prev = p_prev;
+ p_elem->m_next = p_prev->m_next;
+ (p_prev->m_next != NULL ? p_prev->m_next->m_prev : m_last) = p_elem;
+ p_prev->m_next = p_elem;
+ return p_elem;
+ }
+ t_elem * __link_prev(t_elem * p_next,t_elem * p_elem) throw() {
+ __on_link(p_elem);
+ p_elem->m_next = p_next;
+ p_elem->m_prev = p_next->m_prev;
+ (p_next->m_prev != NULL ? p_next->m_prev->m_next : m_first) = p_elem;
+ p_next->m_prev = p_elem;
+ return p_elem;
+ }
+ t_elem * m_first, * m_last;
+ t_size m_count;
+ };
+
+
+ template<typename t_item> class traits_t<chain_list_v2_t<t_item> > : public traits_default_movable {};
+
+ class __chain_list_iterator_traits : public traits_default_movable {
+ public:
+ enum {
+ constructor_may_fail = false
+ };
+ };
+
+ template<typename t_item> class traits_t<const_iterator<t_item> > : public traits_t<refcounted_object_ptr_t<_list_node<t_item> > > {};
+
+ template<typename t_item> class traits_t<iterator<t_item> > : public traits_t<const_iterator<t_item> > {};
+
+}//namespace pfc
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/com_ptr_t.h b/Plugins/listeningto/players/foo_mlt/pfc/com_ptr_t.h index 6f4b58b..3f5d279 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/com_ptr_t.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/com_ptr_t.h @@ -1,75 +1,82 @@ +#ifdef _WIN32
namespace pfc {
-
-//this is windows-only
-//update me to new conventions
-template<class T>
-class com_ptr_t
-{
-public:
- inline com_ptr_t() : m_ptr(0) {}
- inline com_ptr_t(T* p_ptr) : m_ptr(p_ptr) {if (m_ptr) m_ptr->AddRef();}
- inline com_ptr_t(const com_ptr_t<T> & p_source) : m_ptr(p_source.m_ptr) {if (m_ptr) m_ptr->AddRef();}
-
- inline ~com_ptr_t() {if (m_ptr) m_ptr->Release();}
-
- inline void copy(T * p_ptr)
- {
- if (m_ptr) m_ptr->Release();
- m_ptr = p_ptr;
- if (m_ptr) m_ptr->AddRef();
+ template<typename what> static void _COM_AddRef(what * ptr) {
+ if (ptr != NULL) ptr->AddRef();
+ }
+ template<typename what> static void _COM_Release(what * ptr) {
+ if (ptr != NULL) ptr->Release();
}
- inline void copy(const com_ptr_t<T> & p_source) {copy(p_source.m_ptr);}
+ template<class T>
+ class com_ptr_t {
+ public:
+ typedef com_ptr_t<T> t_self;
- inline void set(T * p_ptr)//should not be used ! temporary !
- {
- if (m_ptr) m_ptr->Release();
- m_ptr = p_ptr;
- }
+ inline com_ptr_t() throw() : m_ptr() {}
+ template<typename source> inline com_ptr_t(source * p_ptr) throw() : m_ptr(p_ptr) {_COM_AddRef(m_ptr);}
+ inline com_ptr_t(const t_self & p_source) throw() : m_ptr(p_source.m_ptr) {_COM_AddRef(m_ptr);}
+ template<typename source> inline com_ptr_t(const com_ptr_t<source> & p_source) throw() : m_ptr(p_source.get_ptr()) {_COM_AddRef(m_ptr);}
- inline const com_ptr_t<T> & operator=(const com_ptr_t<T> & p_source) {copy(p_source); return *this;}
- inline const com_ptr_t<T> & operator=(T * p_ptr) {copy(p_ptr); return *this;}
+ inline ~com_ptr_t() throw() {_COM_Release(m_ptr);}
+
+ inline void copy(T * p_ptr) throw() {
+ _COM_Release(m_ptr);
+ m_ptr = p_ptr;
+ _COM_AddRef(m_ptr);
+ }
- inline void release()
- {
- if (m_ptr) m_ptr->Release();
- m_ptr = 0;
- }
+ template<typename source> inline void copy(const com_ptr_t<source> & p_source) throw() {copy(p_source.get_ptr());}
+ inline void attach(T * p_ptr) throw() {
+ _COM_Release(m_ptr);
+ m_ptr = p_ptr;
+ }
- inline T* operator->() const {assert(m_ptr);return m_ptr;}
+ inline const t_self & operator=(const t_self & p_source) throw() {copy(p_source); return *this;}
+ inline const t_self & operator=(T* p_source) throw() {copy(p_source); return *this;}
+ template<typename source> inline const t_self & operator=(const com_ptr_t<source> & p_source) throw() {copy(p_source); return *this;}
+ template<typename source> inline const t_self & operator=(source * p_ptr) throw() {copy(p_ptr); return *this;}
- inline T* get_ptr() const {return m_ptr;}
-
- inline T* duplicate_ptr() const//should not be used ! temporary !
- {
- if (m_ptr) m_ptr->AddRef();
- return m_ptr;
- }
+ inline void release() throw() {
+ _COM_Release(m_ptr);
+ m_ptr = NULL;
+ }
- inline T* duplicate_ptr_release() {
- T* ret = m_ptr;
- m_ptr = 0;
- return ret;
- }
- inline bool is_valid() const {return m_ptr != 0;}
- inline bool is_empty() const {return m_ptr == 0;}
+ inline T* operator->() const throw() {assert(m_ptr);return m_ptr;}
- inline bool operator==(const com_ptr_t<T> & p_item) const {return m_ptr == p_item.m_ptr;}
- inline bool operator!=(const com_ptr_t<T> & p_item) const {return m_ptr != p_item.m_ptr;}
- inline bool operator>(const com_ptr_t<T> & p_item) const {return m_ptr > p_item.m_ptr;}
- inline bool operator<(const com_ptr_t<T> & p_item) const {return m_ptr < p_item.m_ptr;}
+ inline T* get_ptr() const throw() {return m_ptr;}
+
+ inline T* duplicate_ptr() const throw() //should not be used ! temporary !
+ {
+ _COM_AddRef(m_ptr);
+ return m_ptr;
+ }
- inline static void g_swap(com_ptr_t<T> & item1, com_ptr_t<T> & item2) {
- pfc::swap_t(item1.m_ptr,item2.m_ptr);
- }
+ inline T* detach() throw() {
+ return replace_null_t(m_ptr);
+ }
+
+ inline bool is_valid() const throw() {return m_ptr != 0;}
+ inline bool is_empty() const throw() {return m_ptr == 0;}
+
+ inline bool operator==(const com_ptr_t<T> & p_item) const throw() {return m_ptr == p_item.m_ptr;}
+ inline bool operator!=(const com_ptr_t<T> & p_item) const throw() {return m_ptr != p_item.m_ptr;}
+ inline bool operator>(const com_ptr_t<T> & p_item) const throw() {return m_ptr > p_item.m_ptr;}
+ inline bool operator<(const com_ptr_t<T> & p_item) const throw() {return m_ptr < p_item.m_ptr;}
+
+ inline static void g_swap(com_ptr_t<T> & item1, com_ptr_t<T> & item2) throw() {
+ pfc::swap_t(item1.m_ptr,item2.m_ptr);
+ }
- inline T** receive_ptr() {release();return &m_ptr;}
+ inline T** receive_ptr() throw() {release();return &m_ptr;}
-private:
- T* m_ptr;
-};
+ inline t_self & operator<<(t_self & p_source) throw() {attach(p_source.detach());return *this;}
+ inline t_self & operator>>(t_self & p_dest) throw() {p_dest.attach(detach());return *this;}
+ private:
+ T* m_ptr;
+ };
}
+#endif
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/guid.cpp b/Plugins/listeningto/players/foo_mlt/pfc/guid.cpp index 54e5938..ed0fc02 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/guid.cpp +++ b/Plugins/listeningto/players/foo_mlt/pfc/guid.cpp @@ -128,7 +128,7 @@ print_guid::print_guid(const GUID & p_guid) }
-PFC_DLL_EXPORT void print_hex_raw(const void * buffer,unsigned bytes,char * p_out)
+void print_hex_raw(const void * buffer,unsigned bytes,char * p_out)
{
char * out = p_out;
const unsigned char * in = (const unsigned char *) buffer;
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/guid.h b/Plugins/listeningto/players/foo_mlt/pfc/guid.h index f2b3d77..9a09095 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/guid.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/guid.h @@ -32,7 +32,26 @@ namespace pfc { extern const GUID guid_null;
- PFC_DLL_EXPORT void print_hex_raw(const void * buffer,unsigned bytes,char * p_out);
+ void print_hex_raw(const void * buffer,unsigned bytes,char * p_out);
+
+ static GUID makeGUID(t_uint32 Data1, t_uint16 Data2, t_uint16 Data3, t_uint8 Data4_1, t_uint8 Data4_2, t_uint8 Data4_3, t_uint8 Data4_4, t_uint8 Data4_5, t_uint8 Data4_6, t_uint8 Data4_7, t_uint8 Data4_8) {
+ GUID guid = { Data1, Data2, Data3, {Data4_1, Data4_2, Data4_3, Data4_4, Data4_5, Data4_6, Data4_7, Data4_8 } };
+ return guid;
+ }
+ static GUID xorGUID(const GUID & v1, const GUID & v2) {
+ GUID temp; memxor(&temp, &v1, &v1, sizeof(GUID)); return temp;
+ }
+
+ class format_guid_cpp : public pfc::string_formatter {
+ public:
+ format_guid_cpp(const GUID & guid) {
+ *this << "{0x" << pfc::format_hex(guid.Data1,8) << ", 0x" << pfc::format_hex(guid.Data2, 4) << ", 0x" << pfc::format_hex(guid.Data3,4) << ", {0x" << pfc::format_hex(guid.Data4[0],2);
+ for(int n = 1; n < 8; ++n) {
+ *this << ", 0x" << pfc::format_hex(guid.Data4[n],2);
+ }
+ *this << "}}";
+ }
+ };
}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/int_types.h b/Plugins/listeningto/players/foo_mlt/pfc/int_types.h index 4d2c4af..219f5c4 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/int_types.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/int_types.h @@ -68,12 +68,6 @@ typedef pfc::sized_int_t<sizeof(void*)>::t_unsigned __PFC_WP64 t_size; typedef pfc::sized_int_t<sizeof(void*)>::t_signed __PFC_WP64 t_ssize;
-#define infinite (~0)
-
-const t_uint16 infinite16 = (t_uint16)(~0);
-const t_uint32 infinite32 = (t_uint32)(~0);
-const t_uint64 infinite64 = (t_uint64)(~0);
-const t_size infinite_size = (t_size)(~0);
#if defined(_WIN32) && !defined(_WIN64)
@@ -84,8 +78,14 @@ inline t_size MulDiv_Size(t_size x,t_size y,t_size z) {return (x*y)/z;} #error portme
#endif
+#define pfc_infinite (~0)
namespace pfc {
+ const t_uint16 infinite16 = (t_uint16)(~0);
+ const t_uint32 infinite32 = (t_uint32)(~0);
+ const t_uint64 infinite64 = (t_uint64)(~0);
+ const t_size infinite_size = (t_size)(~0);
+
template<typename T> class int_specs_t;
template<typename T>
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/iterators.h b/Plugins/listeningto/players/foo_mlt/pfc/iterators.h new file mode 100644 index 0000000..5455990 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/iterators.h @@ -0,0 +1,113 @@ +namespace pfc {
+ //! Base class for list nodes. Implemented by list implementers.
+ template<typename t_item> class _list_node : public refcounted_object_root {
+ public:
+ typedef _list_node<t_item> t_self;
+
+ TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(_list_node,m_content)
+
+ t_item m_content;
+
+ virtual t_self * prev() throw() {return NULL;}
+ virtual t_self * next() throw() {return NULL;}
+
+ t_self * walk(bool forward) throw() {return forward ? next() : prev();}
+ };
+
+ template<typename t_item> class const_iterator {
+ public:
+ typedef _list_node<t_item> t_node;
+ typedef refcounted_object_ptr_t<t_node> t_nodeptr;
+ typedef const_iterator<t_item> t_self;
+
+ bool is_empty() const throw() {return m_content.is_empty();}
+ bool is_valid() const throw() {return m_content.is_valid();}
+ void invalidate() throw() {m_content = NULL;}
+
+ void walk(bool forward) throw() {m_content = m_content->walk(forward);}
+ void prev() throw() {m_content = m_content->prev();}
+ void next() throw() {m_content = m_content->next();}
+
+ //! For internal use / list implementations only! Do not call!
+ t_node* _node() const throw() {return m_content.get_ptr();}
+
+ const_iterator() {}
+ const_iterator(t_node* source) : m_content(source) {}
+ const_iterator(t_nodeptr const & source) : m_content(source) {}
+
+ const t_item& operator*() const throw() {return m_content->m_content;}
+ const t_item* operator->() const throw() {return &m_content->m_content;}
+
+ const t_self & operator++() throw() {this->next(); return *this;}
+ const t_self & operator--() throw() {this->prev(); return *this;}
+ t_self operator++(int) throw() {t_self old = *this; this->next(); return old;}
+ t_self operator--(int) throw() {t_self old = *this; this->prev(); return old;}
+
+ bool operator==(const t_self & other) const throw() {return this->m_content == other.m_content;}
+ bool operator!=(const t_self & other) const throw() {return this->m_content != other.m_content;}
+ bool operator> (const t_self & other) const throw() {return this->m_content > other.m_content;}
+ bool operator< (const t_self & other) const throw() {return this->m_content < other.m_content;}
+ bool operator>=(const t_self & other) const throw() {return this->m_content >= other.m_content;}
+ bool operator<=(const t_self & other) const throw() {return this->m_content <= other.m_content;}
+ protected:
+ t_nodeptr m_content;
+ };
+ template<typename t_item> class iterator : public const_iterator<t_item> {
+ public:
+ typedef const_iterator<t_item> t_selfConst;
+ typedef iterator<t_item> t_self;
+ typedef _list_node<t_item> t_node;
+ typedef refcounted_object_ptr_t<t_node> t_nodeptr;
+
+ iterator() {}
+ iterator(t_node* source) : t_selfConst(source) {}
+ iterator(t_nodeptr const & source) : t_selfConst(source) {}
+
+ t_item& operator*() const throw() {return this->m_content->m_content;}
+ t_item* operator->() const throw() {return &this->m_content->m_content;}
+
+ const t_self & operator++() throw() {this->next(); return *this;}
+ const t_self & operator--() throw() {this->prev(); return *this;}
+ t_self operator++(int) throw() {t_self old = *this; this->next(); return old;}
+ t_self operator--(int) throw() {t_self old = *this; this->prev(); return old;}
+
+ bool operator==(const t_self & other) const throw() {return this->m_content == other.m_content;}
+ bool operator!=(const t_self & other) const throw() {return this->m_content != other.m_content;}
+ bool operator> (const t_self & other) const throw() {return this->m_content > other.m_content;}
+ bool operator< (const t_self & other) const throw() {return this->m_content < other.m_content;}
+ bool operator>=(const t_self & other) const throw() {return this->m_content >= other.m_content;}
+ bool operator<=(const t_self & other) const throw() {return this->m_content <= other.m_content;}
+ };
+
+ template<typename t_comparator = comparator_default>
+ class comparator_list {
+ public:
+ template<typename t_list1, typename t_list2>
+ static int compare(const t_list1 & p_list1, const t_list2 p_list2) {
+ typename t_list1::const_iterator iter1 = p_list1.first();
+ typename t_list2::const_iterator iter2 = p_list2.first();
+ for(;;) {
+ if (iter1.is_empty() && iter2.is_empty()) return 0;
+ else if (iter1.is_empty()) return -1;
+ else if (iter2.is_empty()) return 1;
+ else {
+ int state = t_comparator::compare(*iter1,*iter2);
+ if (state != 0) return state;
+ }
+ ++iter1; ++iter2;
+ }
+ }
+ };
+
+ template<typename t_list1, typename t_list2>
+ static bool listEquals(const t_list1 & p_list1, const t_list2 & p_list2) {
+ typename t_list1::const_iterator iter1 = p_list1.first();
+ typename t_list2::const_iterator iter2 = p_list2.first();
+ for(;;) {
+ if (iter1.is_empty() && iter2.is_empty()) return true;
+ else if (iter1.is_empty() || iter2.is_empty()) return false;
+ else if (*iter1 != *iter2) return false;
+ ++iter1; ++iter2;
+ }
+ }
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/license.txt b/Plugins/listeningto/players/foo_mlt/pfc/license.txt index 6046d8f..51ebcad 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/license.txt +++ b/Plugins/listeningto/players/foo_mlt/pfc/license.txt @@ -1,4 +1,4 @@ -Copyright (c) 2001-2006, Peter Pawlowski
+Copyright (c) 2001-2010, Peter Pawlowski
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
@@ -7,4 +7,4 @@ Redistributions of source code must retain the above copyright notice, this list Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of the author nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/list.h b/Plugins/listeningto/players/foo_mlt/pfc/list.h index a89f6a4..c503f53 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/list.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/list.h @@ -7,6 +7,7 @@ template<typename T> class NOVTABLE list_base_const_t {
private: typedef list_base_const_t<T> t_self;
public:
+ typedef T t_item;
virtual t_size get_count() const = 0;
virtual void get_item_ex(T& p_out, t_size n) const = 0;
@@ -46,7 +47,7 @@ public: }
template<typename t_compare,typename t_param,typename t_permutation>
- bool bsearch_permutation_t(t_compare p_compare,t_param const & p_param,const t_permutation & p_permutation,t_size & p_index) {
+ bool bsearch_permutation_t(t_compare p_compare,t_param const & p_param,const t_permutation & p_permutation,t_size & p_index) const {
return pfc::bsearch_permutation_t(get_count(),*this,p_compare,p_param,p_permutation,p_index);
}
@@ -66,6 +67,15 @@ public: p_callback( (*this)[n] );
}
}
+
+ static bool g_equals(const t_self & item1, const t_self & item2) {
+ const t_size count = item1.get_count();
+ if (count != item2.get_count()) return false;
+ for(t_size walk = 0; walk < count; ++walk) if (item1[walk] != item2[walk]) return false;
+ return true;
+ }
+ bool operator==(const t_self & item2) const {return g_equals(*this,item2);}
+ bool operator!=(const t_self & item2) const {return !g_equals(*this,item2);}
protected:
list_base_const_t() {}
@@ -116,6 +126,15 @@ private: A m_data;
t_size m_count;
};
+template<typename t_array>
+class list_const_array_ref_t : public list_base_const_t<typename t_array::t_item> {
+public:
+ list_const_array_ref_t(const t_array & data) : m_data(data) {}
+ t_size get_count() const {return m_data.get_size();}
+ void get_item_ex(typename t_array::t_item & out, t_size n) const {out = m_data[n];}
+private:
+ const t_array & m_data;
+};
template<typename to,typename from>
class list_const_cast_t : public list_base_const_t<to>
@@ -160,6 +179,7 @@ template<typename T> class NOVTABLE list_base_t : public list_base_const_t<T> {
private:
typedef list_base_t<T> t_self;
+ typedef const list_base_const_t<T> t_self_const;
public:
class NOVTABLE sort_callback
{
@@ -180,12 +200,12 @@ public: inline t_size insert_item(const T & item,t_size base) {return insert_items(list_single_ref_t<T>(item),base);}
t_size insert_items_repeat(const T & item,t_size num,t_size base) {return insert_items(list_single_ref_t<T>(item,num),base);}
- inline t_size add_items_repeat(T item,t_size num) {return insert_items_repeat(item,num,this->get_count());}
+ inline t_size add_items_repeat(T item,t_size num) {return insert_items_repeat(item,num,~0);}
t_size insert_items_fromptr(const T* source,t_size num,t_size base) {return insert_items(list_const_ptr_t<T>(source,num),base);}
- inline t_size add_items_fromptr(const T* source,t_size num) {return insert_items_fromptr(source,num,this->get_count());}
+ inline t_size add_items_fromptr(const T* source,t_size num) {return insert_items_fromptr(source,num,~0);}
- inline t_size add_items(const list_base_const_t<T> & items) {return insert_items(items,this->get_count());}
- inline t_size add_item(const T& item) {return insert_item(item,this->get_count());}
+ inline t_size add_items(const list_base_const_t<T> & items) {return insert_items(items,~0);}
+ inline t_size add_item(const T& item) {return insert_item(item,~0);}
inline void remove_mask(const bit_array & mask) {filter_mask(bit_array_not(mask));}
inline void remove_all() {filter_mask(bit_array_false());}
@@ -267,7 +287,10 @@ public: remove_all();
}
- const t_self & operator=(const t_self & p_source) {remove_all(); add_items(p_source);return *this;}
+ template<typename t_in> t_self & operator=(t_in const & source) {remove_all(); add_items(source); return *this;}
+ template<typename t_in> t_self & operator+=(t_in const & p_source) {add_item(p_source); return *this;}
+ template<typename t_in> t_self & operator|=(t_in const & p_source) {add_items(p_source); return *this;}
+
protected:
list_base_t() {}
~list_base_t() {}
@@ -286,17 +309,17 @@ public: void set_count(t_size p_count) {m_buffer.set_size(p_count);}
void set_size(t_size p_count) {m_buffer.set_size(p_count);}
- t_size insert_item(const T& item,t_size idx)
- {
- t_size max = m_buffer.get_size();
- if (idx > max) idx = max;
- max++;
- m_buffer.set_size(max);
- t_size n;
- for(n=max-1;n>idx;n--)
- m_buffer[n]=m_buffer[n-1];
- m_buffer[idx]=item;
- return idx;
+ template<typename t_in>
+ t_size _insert_item_t(const t_in & item, t_size idx) {
+ return pfc::insert_t(m_buffer, item, idx);
+ }
+ template<typename t_in>
+ t_size insert_item(const t_in & item, t_size idx) {
+ return _insert_item_t(item, idx);
+ }
+
+ t_size insert_item(const T& item,t_size idx) {
+ return _insert_item_t(item, idx);
}
T remove_by_idx(t_size idx)
@@ -304,9 +327,8 @@ public: T ret = m_buffer[idx];
t_size n;
t_size max = m_buffer.get_size();
- for(n=idx+1;n<max;n++)
- {
- pfc::swap_t(m_buffer[n-1],m_buffer[n]);
+ for(n=idx+1;n<max;n++) {
+ pfc::move_t(m_buffer[n-1],m_buffer[n]);
}
m_buffer.set_size(max-1);
return ret;
@@ -316,31 +338,31 @@ public: inline void get_item_ex(T& p_out,t_size n) const
{
PFC_ASSERT(n>=0);
- PFC_ASSERT(n<get_count());
+ PFC_ASSERT(n<get_size());
p_out = m_buffer[n];
}
inline const T& get_item_ref(t_size n) const
{
PFC_ASSERT(n>=0);
- PFC_ASSERT(n<get_count());
+ PFC_ASSERT(n<get_size());
return m_buffer[n];
}
inline T get_item(t_size n) const
{
PFC_ASSERT(n >= 0);
- PFC_ASSERT(n < get_count() );
+ PFC_ASSERT(n < get_size() );
return m_buffer[n];
};
inline t_size get_count() const {return m_buffer.get_size();}
- inline t_size get_size() const {return get_count();}
+ inline t_size get_size() const {return m_buffer.get_size();}
inline const T & operator[](t_size n) const
{
PFC_ASSERT(n>=0);
- PFC_ASSERT(n<get_count());
+ PFC_ASSERT(n<get_size());
return m_buffer[n];
}
@@ -354,49 +376,63 @@ public: remove_mask(bit_array_range(idx,num));
}
- t_size insert_items(const list_base_const_t<T> & source,t_size base)
- {
- t_size count = get_count();
+ t_size _insert_items_v(const list_base_const_t<T> & source,t_size base) { //workaround for inefficient operator[] on virtual-interface-accessed lists
+ t_size count = get_size();
if (base>count) base = count;
t_size num = source.get_count();
m_buffer.set_size(count+num);
- if (count > base)
- {
- t_size n;
- for(n=count-1;(int)n>=(int)base;n--)
- {
- pfc::swap_t(m_buffer[n+num],m_buffer[n]);
+ if (count > base) {
+ for(t_size n=count-1;(int)n>=(int)base;n--) {
+ pfc::move_t(m_buffer[n+num],m_buffer[n]);
}
}
- {
- t_size n;
- for(n=0;n<num;n++)
- {
- source.get_item_ex(m_buffer[n+base],n);
- }
+ for(t_size n=0;n<num;n++) {
+ source.get_item_ex(m_buffer[n+base],n);
}
return base;
+ }
+ // use _insert_items_v where it's more efficient
+ t_size insert_items(const list_base_const_t<T> & source,t_size base) {return _insert_items_v(source, base);}
+ t_size insert_items(const list_base_t<T> & source,t_size base) {return _insert_items_v(source, base);}
+
+ template<typename t_in>
+ t_size insert_items(const t_in & source,t_size base) {
+ t_size count = get_size();
+ if (base>count) base = count;
+ t_size num = array_size_t(source);
+ m_buffer.set_size(count+num);
+ if (count > base) {
+ for(t_size n=count-1;(int)n>=(int)base;n--) {
+ pfc::move_t(m_buffer[n+num],m_buffer[n]);
+ }
+ }
+ for(t_size n=0;n<num;n++) {
+ m_buffer[n+base] = source[n];
+ }
+ return base;
}
+ template<typename t_in>
+ void add_items(const t_in & in) {insert_items(in, ~0);}
+
void get_items_mask(list_impl_t<T,t_storage> & out,const bit_array & mask)
{
- t_size n,count = get_count();
+ t_size n,count = get_size();
for_each_bit_array(n,mask,true,0,count)
out.add_item(m_buffer[n]);
}
void filter_mask(const bit_array & mask)
{
- t_size n,count = get_count(), total = 0;
+ t_size n,count = get_size(), total = 0;
n = total = mask.find(false,0,count);
- if (n<count)
- {
+ if (n<count) {
for(n=mask.find(true,n+1,count-n-1);n<count;n=mask.find(true,n+1,count-n-1))
- pfc::swap_t(m_buffer[total++],m_buffer[n]);
+ pfc::move_t(m_buffer[total++],m_buffer[n]);
m_buffer.set_size(total);
}
@@ -405,45 +441,45 @@ public: void replace_item(t_size idx,const T& item)
{
PFC_ASSERT(idx>=0);
- PFC_ASSERT(idx<get_count());
+ PFC_ASSERT(idx<get_size());
m_buffer[idx] = item;
}
void sort()
{
pfc::sort_callback_impl_auto_wrap_t<t_storage> wrapper(m_buffer);
- pfc::sort(wrapper,get_count());
+ pfc::sort(wrapper,get_size());
}
template<typename t_compare>
void sort_t(t_compare p_compare)
{
pfc::sort_callback_impl_simple_wrap_t<t_storage,t_compare> wrapper(m_buffer,p_compare);
- pfc::sort(wrapper,get_count());
+ pfc::sort(wrapper,get_size());
}
template<typename t_compare>
void sort_stable_t(t_compare p_compare)
{
pfc::sort_callback_impl_simple_wrap_t<t_storage,t_compare> wrapper(m_buffer,p_compare);
- pfc::sort_stable(wrapper,get_count());
+ pfc::sort_stable(wrapper,get_size());
}
inline void reorder_partial(t_size p_base,const t_size * p_order,t_size p_count)
{
- PFC_ASSERT(p_base+p_count<=get_count());
+ PFC_ASSERT(p_base+p_count<=get_size());
pfc::reorder_partial_t(m_buffer,p_base,p_order,p_count);
}
template<typename t_compare>
t_size find_duplicates_sorted_t(t_compare p_compare,bit_array_var & p_out) const
{
- return pfc::find_duplicates_sorted_t<list_impl_t<T,t_storage> const &,t_compare>(*this,get_count(),p_compare,p_out);
+ return pfc::find_duplicates_sorted_t<list_impl_t<T,t_storage> const &,t_compare>(*this,get_size(),p_compare,p_out);
}
template<typename t_compare,typename t_permutation>
t_size find_duplicates_sorted_permutation_t(t_compare p_compare,t_permutation p_permutation,bit_array_var & p_out)
{
- return pfc::find_duplicates_sorted_permutation_t<list_impl_t<T,t_storage> const &,t_compare,t_permutation>(*this,get_count(),p_compare,p_permutation,p_out);
+ return pfc::find_duplicates_sorted_permutation_t<list_impl_t<T,t_storage> const &,t_compare,t_permutation>(*this,get_size(),p_compare,p_permutation,p_out);
}
@@ -469,21 +505,22 @@ public: void remove_mask(const bit_array & mask) {filter_mask(bit_array_not(mask));}
- void remove_mask(const bool * mask) {remove_mask(bit_array_table(mask,get_count()));}
- void filter_mask(const bool * mask) {filter_mask(bit_array_table(mask,get_count()));}
+ void remove_mask(const bool * mask) {remove_mask(bit_array_table(mask,get_size()));}
+ void filter_mask(const bool * mask) {filter_mask(bit_array_table(mask,get_size()));}
- t_size add_item(const T& item)
- {
- t_size idx = get_count();
- insert_item(item,idx);
- return idx;
+ t_size add_item(const T& item) {
+ return insert_item(item, ~0);
+ }
+
+ template<typename t_in> t_size add_item(const t_in & item) {
+ return insert_item(item, ~0);
}
void remove_all() {remove_mask(bit_array_true());}
void remove_item(const T& item)
{
- t_size n,max = get_count();
+ t_size n,max = get_size();
bit_array_bittable mask(max);
for(n=0;n<max;n++)
mask.set(n,get_item(n)==item);
@@ -492,14 +529,14 @@ public: void swap_item_with(t_size p_index,T & p_item)
{
- PFC_ASSERT(p_index < get_count());
+ PFC_ASSERT(p_index < get_size());
pfc::swap_t(m_buffer[p_index],p_item);
}
void swap_items(t_size p_index1,t_size p_index2)
{
- PFC_ASSERT(p_index1 < get_count());
- PFC_ASSERT(p_index1 < get_count());
+ PFC_ASSERT(p_index1 < get_size());
+ PFC_ASSERT(p_index2 < get_size());
pfc::swap_t(m_buffer[p_index1],m_buffer[p_index2]);
}
@@ -511,7 +548,7 @@ public: template<typename t_search>
t_size find_item(const t_search & p_item) const//returns index of first occurance, infinite if not found
{
- t_size n,max = get_count();
+ t_size n,max = get_size();
for(n=0;n<max;n++)
if (m_buffer[n]==p_item) return n;
return ~0;
@@ -520,15 +557,28 @@ public: template<typename t_search>
inline bool have_item(const t_search & p_item) const {return this->template find_item<t_search>(p_item)!=~0;}
+ template<typename t_in> t_self & operator=(t_in const & source) {remove_all(); add_items(source); return *this;}
+ template<typename t_in> t_self & operator+=(t_in const & p_source) {add_item(p_source); return *this;}
+ template<typename t_in> t_self & operator|=(t_in const & p_source) {add_items(p_source); return *this;}
protected:
t_storage m_buffer;
};
template<typename t_item, template<typename> class t_alloc = pfc::alloc_fast >
-class list_t : public list_impl_t<t_item,pfc::array_t<t_item,t_alloc> > { };
+class list_t : public list_impl_t<t_item,pfc::array_t<t_item,t_alloc> > {
+public:
+ template<typename t_in> t_self & operator=(t_in const & source) {remove_all(); add_items(source); return *this;}
+ template<typename t_in> t_self & operator+=(t_in const & p_source) {add_item(p_source); return *this;}
+ template<typename t_in> t_self & operator|=(t_in const & p_source) {add_items(p_source); return *this;}
+};
template<typename t_item, t_size p_fixed_count, template<typename> class t_alloc = pfc::alloc_fast >
-class list_hybrid_t : public list_impl_t<t_item,pfc::array_hybrid_t<t_item,p_fixed_count,t_alloc> > {};
+class list_hybrid_t : public list_impl_t<t_item,pfc::array_hybrid_t<t_item,p_fixed_count,t_alloc> > {
+public:
+ template<typename t_in> t_self & operator=(t_in const & source) {remove_all(); add_items(source); return *this;}
+ template<typename t_in> t_self & operator+=(t_in const & p_source) {add_item(p_source); return *this;}
+ template<typename t_in> t_self & operator|=(t_in const & p_source) {add_items(p_source); return *this;}
+};
template<typename T>
class ptr_list_const_cast_t : public list_base_const_t<const T *>
@@ -573,5 +623,7 @@ private: t_size m_count;
};
+template<typename item, template<typename> class alloc> class traits_t<list_t<item, alloc> > : public traits_combined<alloc<item>, traits_vtable> {};
+
}
#endif //_PFC_LIST_H_
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/map.h b/Plugins/listeningto/players/foo_mlt/pfc/map.h index e37025b..010efc6 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/map.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/map.h @@ -2,92 +2,123 @@ #define _MAP_T_H_INCLUDED_
namespace pfc {
+ PFC_DECLARE_EXCEPTION(exception_map_entry_not_found,exception,"Map entry not found");
template<typename t_destination> class __map_overwrite_wrapper {
public:
__map_overwrite_wrapper(t_destination & p_destination) : m_destination(p_destination) {}
- template<typename t_from,typename t_to> void operator() (const t_from & p_from,const t_to & p_to) {m_destination.set(p_from,p_to);}
+ template<typename t_key,typename t_value> void operator() (const t_key & p_key,const t_value & p_value) {m_destination.set(p_key,p_value);}
private:
t_destination & m_destination;
};
- template<typename t_storage_from, typename t_storage_to, typename t_comparator = comparator_default>
+ template<typename t_storage_key, typename t_storage_value, typename t_comparator = comparator_default>
class map_t {
private:
- typedef map_t<t_storage_from,t_storage_to,t_comparator> t_self;
+ typedef map_t<t_storage_key,t_storage_value,t_comparator> t_self;
public:
- template<typename t_from,typename t_to>
- void set(const t_from & p_from, const t_to & p_to) {
+ typedef t_storage_key t_key; typedef t_storage_value t_value;
+ template<typename _t_key,typename _t_value>
+ void set(const _t_key & p_key, const _t_value & p_value) {
bool isnew;
- t_storage & storage = m_data.add_ex(t_search_set<t_from,t_to>(p_from,p_to), isnew);
- if (!isnew) storage.m_to = p_to;
+ t_storage & storage = m_data.add_ex(t_search_set<_t_key,_t_value>(p_key,p_value), isnew);
+ if (!isnew) storage.m_value = p_value;
}
- template<typename t_from>
- t_storage_to & find_or_add(t_from const & p_from) {
- return m_data.add(t_search_query<t_from>(p_from)).m_to;
+ template<typename _t_key>
+ t_storage_value & find_or_add(_t_key const & p_key) {
+ return m_data.add(t_search_query<_t_key>(p_key)).m_value;
}
- template<typename t_from>
- t_storage_to & find_or_add_ex(t_from const & p_from,bool & p_isnew) {
- return m_data.add_ex(t_search_query<t_from>(p_from),p_isnew).m_to;
+ template<typename _t_key>
+ t_storage_value & find_or_add_ex(_t_key const & p_key,bool & p_isnew) {
+ return m_data.add_ex(t_search_query<_t_key>(p_key),p_isnew).m_value;
}
- template<typename t_from>
- bool have_item(const t_from & p_from) const {
- return m_data.have_item(t_search_query<t_from>(p_from));
+ template<typename _t_key>
+ bool have_item(const _t_key & p_key) const {
+ return m_data.have_item(t_search_query<_t_key>(p_key));
}
- template<typename t_from,typename t_to>
- bool query(const t_from & p_from,t_to & p_to) const {
- const t_storage * storage = m_data.find_ptr(t_search_query<t_from>(p_from));
+ template<typename _t_key,typename _t_value>
+ bool query(const _t_key & p_key,_t_value & p_value) const {
+ const t_storage * storage = m_data.find_ptr(t_search_query<_t_key>(p_key));
if (storage == NULL) return false;
- p_to = storage->m_to;
+ p_value = storage->m_value;
return true;
}
- template<typename t_from>
- const t_storage_to * query_ptr(const t_from & p_from) const {
- const t_storage * storage = m_data.find_ptr(t_search_query<t_from>(p_from));
+ template<typename _t_key>
+ const t_storage_value & operator[] (const _t_key & p_key) const {
+ const t_storage_value * ptr = query_ptr(p_key);
+ if (ptr == NULL) throw exception_map_entry_not_found();
+ return *ptr;
+ }
+
+ template<typename _t_key>
+ t_storage_value & operator[] (const _t_key & p_key) {
+ return find_or_add(p_key);
+ }
+
+ template<typename _t_key>
+ const t_storage_value * query_ptr(const _t_key & p_key) const {
+ const t_storage * storage = m_data.find_ptr(t_search_query<_t_key>(p_key));
if (storage == NULL) return NULL;
- return &storage->m_to;
+ return &storage->m_value;
}
- template<typename t_from>
- t_storage_to * query_ptr(const t_from & p_from) {
- t_storage * storage = m_data.find_ptr(t_search_query<t_from>(p_from));
+ template<typename _t_key>
+ t_storage_value * query_ptr(const _t_key & p_key) {
+ t_storage * storage = m_data.find_ptr(t_search_query<_t_key>(p_key));
if (storage == NULL) return NULL;
- return &storage->m_to;
+ return &storage->m_value;
}
- template<bool inclusive,bool above,typename t_from>
- const t_storage_to * query_nearest_ptr(t_from & p_from) const {
- const t_storage * storage = m_data.find_nearest_item<inclusive,above>(t_search_query<t_from>(p_from));
+ template<typename _t_key>
+ bool query_ptr(const _t_key & p_key, const t_storage_value * & out) const {
+ const t_storage * storage = m_data.find_ptr(t_search_query<_t_key>(p_key));
+ if (storage == NULL) return false;
+ out = &storage->m_value;
+ return true;
+ }
+
+ template<typename _t_key>
+ bool query_ptr(const _t_key & p_key, t_storage_value * & out) {
+ t_storage * storage = m_data.find_ptr(t_search_query<_t_key>(p_key));
+ if (storage == NULL) return false;
+ out = &storage->m_value;
+ return true;
+ }
+
+ template<bool inclusive,bool above,typename _t_key>
+ const t_storage_value * query_nearest_ptr(_t_key & p_key) const {
+ const t_storage * storage = m_data.find_nearest_item<inclusive,above>(t_search_query<_t_key>(p_key));
if (storage == NULL) return NULL;
- p_from = storage->m_from;
- return &storage->m_to;
+ p_key = storage->m_key;
+ return &storage->m_value;
}
- template<bool inclusive,bool above,typename t_from>
- t_storage_to * query_nearest_ptr(t_from & p_from) {
- t_storage * storage = m_data.find_nearest_item<inclusive,above>(t_search_query<t_from>(p_from));
+ template<bool inclusive,bool above,typename _t_key>
+ t_storage_value * query_nearest_ptr(_t_key & p_key) {
+ t_storage * storage = m_data.find_nearest_item<inclusive,above>(t_search_query<_t_key>(p_key));
if (storage == NULL) return NULL;
- p_from = storage->m_from;
- return &storage->m_to;
+ p_key = storage->m_key;
+ return &storage->m_value;
}
- template<bool inclusive,bool above,typename t_from,typename t_to>
- bool query_nearest(t_from & p_from,t_to & p_to) const {
- const t_storage * storage = m_data.find_nearest_item<inclusive,above>(t_search_query<t_from>(p_from));
+ template<bool inclusive,bool above,typename _t_key,typename _t_value>
+ bool query_nearest(_t_key & p_key,_t_value & p_value) const {
+ const t_storage * storage = m_data.find_nearest_item<inclusive,above>(t_search_query<_t_key>(p_key));
if (storage == NULL) return false;
- p_from = storage->m_from;
- p_to = storage->m_to;
+ p_key = storage->m_key;
+ p_value = storage->m_value;
return true;
}
- template<typename t_from>
- void remove(const t_from & p_from) {
- m_data.remove_item(t_search_query<t_from>(p_from));
+
+ template<typename _t_key>
+ bool remove(const _t_key & p_key) {
+ return m_data.remove_item(t_search_query<_t_key>(p_key));
}
template<typename t_callback>
@@ -97,13 +128,13 @@ namespace pfc { template<typename t_callback>
void enumerate(t_callback & p_callback) {
- m_data.__enumerate(enumeration_wrapper_var<t_callback>(p_callback));
+ m_data._enumerate_var(enumeration_wrapper_var<t_callback>(p_callback));
}
- t_size get_count() const {return m_data.get_count();}
+ t_size get_count() const throw() {return m_data.get_count();}
- void remove_all() {m_data.remove_all();}
+ void remove_all() throw() {m_data.remove_all();}
template<typename t_source>
void overwrite(const t_source & p_source) {
@@ -112,40 +143,58 @@ namespace pfc { }
//backwards compatibility method wrappers
- template<typename t_from> bool exists(const t_from & p_from) const {return have_item(p_from);}
+ template<typename _t_key> bool exists(const _t_key & p_key) const {return have_item(p_key);}
+
+
+ template<typename _t_key> bool get_first(_t_key & p_out) const {
+ return m_data.get_first(t_retrieve_key<_t_key>(p_out));
+ }
+
+ template<typename _t_key> bool get_last(_t_key & p_out) const {
+ return m_data.get_last(t_retrieve_key<_t_key>(p_out));
+ }
private:
- template<typename t_from>
+ template<typename _t_key>
+ struct t_retrieve_key {
+ typedef t_retrieve_key<_t_key> t_self;
+ t_retrieve_key(_t_key & p_key) : m_key(p_key) {}
+ template<typename t_what> const t_self & operator=(const t_what & p_what) {m_key = p_what.m_key; return *this;}
+ _t_key & m_key;
+ };
+ template<typename _t_key>
struct t_search_query {
- t_search_query(const t_from & p_from) : m_from(p_from) {}
- t_from const & m_from;
+ t_search_query(const _t_key & p_key) : m_key(p_key) {}
+ _t_key const & m_key;
};
- template<typename t_from,typename t_to>
+ template<typename _t_key,typename _t_value>
struct t_search_set {
- t_search_set(const t_from & p_from, const t_to & p_to) : m_from(p_from), m_to(p_to) {}
+ t_search_set(const _t_key & p_key, const _t_value & p_value) : m_key(p_key), m_value(p_value) {}
- t_from const & m_from;
- t_to const & m_to;
+ _t_key const & m_key;
+ _t_value const & m_value;
};
struct t_storage {
- t_storage_from m_from;
- t_storage_to m_to;
-
-
+ const t_storage_key m_key;
+ t_storage_value m_value;
- template<typename t_from>
- t_storage(t_search_query<t_from> const & p_source) : m_from(p_source.m_from), m_to() {}
+ template<typename _t_key>
+ t_storage(t_search_query<_t_key> const & p_source) : m_key(p_source.m_key), m_value() {}
- template<typename t_from,typename t_to>
- t_storage(t_search_set<t_from,t_to> const & p_source) : m_from(p_source.m_from), m_to(p_source.m_to) {}
+ template<typename _t_key,typename _t_value>
+ t_storage(t_search_set<_t_key,_t_value> const & p_source) : m_key(p_source.m_key), m_value(p_source.m_value) {}
+
+ static bool equals(const t_storage & v1, const t_storage & v2) {return v1.m_key == v2.m_key && v1.m_value == v2.m_value;}
+ bool operator==(const t_storage & other) const {return equals(*this,other);}
+ bool operator!=(const t_storage & other) const {return !equals(*this,other);}
};
class comparator_wrapper {
public:
- template<typename t_other>
- inline static int compare(const t_storage & p_item1,const t_other & p_item2) {
- return t_comparator::compare(p_item1.m_from,p_item2.m_from);
+ template<typename t1,typename t2>
+ inline static int compare(const t1 & p_item1,const t2 & p_item2) {
+ return t_comparator::compare(p_item1.m_key,p_item2.m_key);
}
};
@@ -153,7 +202,7 @@ namespace pfc { class enumeration_wrapper {
public:
enumeration_wrapper(t_callback & p_callback) : m_callback(p_callback) {}
- void operator()(const t_storage & p_item) {m_callback(p_item.m_from,p_item.m_to);}
+ void operator()(const t_storage & p_item) {m_callback(p_item.m_key,p_item.m_value);}
private:
t_callback & m_callback;
};
@@ -162,7 +211,7 @@ namespace pfc { class enumeration_wrapper_var {
public:
enumeration_wrapper_var(t_callback & p_callback) : m_callback(p_callback) {}
- void operator()(t_storage & p_item) {m_callback(safe_cast<t_storage_from const&>(p_item.m_from),p_item.m_to);}
+ void operator()(t_storage & p_item) {m_callback(implicit_cast<t_storage_key const&>(p_item.m_key),p_item.m_value);}
private:
t_callback & m_callback;
};
@@ -172,12 +221,34 @@ namespace pfc { t_content m_data;
public:
typedef traits_t<t_content> traits;
- };
+ typedef typename t_content::const_iterator const_iterator;
+ typedef typename t_content::iterator iterator;
- template<typename t_storage_from, typename t_storage_to, typename t_comparator>
- class traits_t<map_t<t_storage_from,t_storage_to,t_comparator> > : public map_t<t_storage_from,t_storage_to,t_comparator>::traits {};
+ iterator first() throw() {return m_data._first_var();}
+ iterator last() throw() {return m_data._last_var();}
+ const_iterator first() const throw() {return m_data.first();}
+ const_iterator last() const throw() {return m_data.last();}
+ template<typename _t_key> iterator find(const _t_key & key) {return m_data.find(t_search_query<_t_key>(key));}
+ template<typename _t_key> const_iterator find(const _t_key & key) const {return m_data.find(t_search_query<_t_key>(key));}
+ static bool equals(const t_self & v1, const t_self & v2) {
+ return t_content::equals(v1.m_data,v2.m_data);
+ }
+ bool operator==(const t_self & other) const {return equals(*this,other);}
+ bool operator!=(const t_self & other) const {return !equals(*this,other);}
+
+ bool remove(iterator const& iter) {
+ PFC_ASSERT(iter.is_valid());
+ return m_data.remove(iter);
+ //should never return false unless there's a bug in calling code
+ }
+ bool remove(const_iterator const& iter) {
+ PFC_ASSERT(iter.is_valid());
+ return m_data.remove(iter);
+ //should never return false unless there's a bug in calling code
+ }
+ };
}
#endif //_MAP_T_H_INCLUDED_
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/order_helper.h b/Plugins/listeningto/players/foo_mlt/pfc/order_helper.h index 019f8ba..869623e 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/order_helper.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/order_helper.h @@ -1,3 +1,16 @@ +namespace pfc {
+ PFC_DECLARE_EXCEPTION( exception_invalid_permutation, exception_invalid_params, "Invalid permutation" );
+ t_size permutation_find_reverse(t_size const * order, t_size count, t_size value);
+
+ //! For critical sanity checks. Speed: O(n), allocates memory.
+ bool permutation_is_valid(t_size const * order, t_size count);
+ //! For critical sanity checks. Speed: O(n), allocates memory.
+ void permutation_validate(t_size const * order, t_size count);
+
+ //! Creates a permutation that moves selected items in a list box by the specified delta-offset.
+ void create_move_items_permutation(t_size * p_output,t_size p_count,const class bit_array & p_selection,int p_delta);
+}
+
class order_helper
{
pfc::array_t<t_size> m_data;
@@ -9,6 +22,17 @@ public: order_helper(const order_helper & p_order) {*this = p_order;}
+ static bool g_is_identity(const t_size * order, t_size count) {
+ for(t_size walk = 0; walk < count; ++walk) {
+ if (order[walk] != walk) return false;
+ }
+ return true;
+ }
+ template<typename t_array> static bool g_is_identity(const t_array & p_array) {
+ const t_size count = pfc::array_size_t(p_array);
+ for(t_size walk = 0; walk < count; ++walk) if (p_array[walk] != walk) return false;
+ return true;
+ }
template<typename t_int>
static void g_fill(t_int * p_order,const t_size p_count) {
@@ -32,7 +56,9 @@ public: const t_size * get_ptr() const {return m_data.get_ptr();}
+ //! Insecure - may deadlock or crash on invalid permutation content. In theory faster than walking the permutation, but still O(n).
static t_size g_find_reverse(const t_size * order,t_size val);
+ //! Insecure - may deadlock or crash on invalid permutation content. In theory faster than walking the permutation, but still O(n).
inline t_size find_reverse(t_size val) {return g_find_reverse(m_data.get_ptr(),val);}
static void g_reverse(t_size * order,t_size base,t_size count);
@@ -40,3 +66,29 @@ public: t_size get_count() const {return m_data.get_size();}
};
+
+
+namespace pfc {
+ template<typename t_list>
+ static bool guess_reorder_pattern(pfc::array_t<t_size> & out, const t_list & from, const t_list & to) {
+ typedef typename t_list::t_item t_item;
+ const t_size count = from.get_size();
+ if (count != to.get_size()) return false;
+ out.set_size(count);
+ for(t_size walk = 0; walk < count; ++walk) out[walk] = walk;
+ //required output: to[n] = from[out[n]];
+ typedef pfc::chain_list_v2_t<t_size> t_queue;
+ pfc::map_t<t_item, t_queue > content;
+ for(t_size walk = 0; walk < count; ++walk) {
+ content.find_or_add(from[walk]).add_item(walk);
+ }
+ for(t_size walk = 0; walk < count; ++walk) {
+ t_queue * q = content.query_ptr(to[walk]);
+ if (q == NULL) return false;
+ if (q->get_count() == 0) return false;
+ out[walk] = *q->first();
+ q->remove(q->first());
+ }
+ return true;
+ }
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/other.cpp b/Plugins/listeningto/players/foo_mlt/pfc/other.cpp index c883002..4db4b59 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/other.cpp +++ b/Plugins/listeningto/players/foo_mlt/pfc/other.cpp @@ -2,6 +2,71 @@ #include <intrin.h>
+namespace pfc {
+ bool permutation_is_valid(t_size const * order, t_size count) {
+ bit_array_bittable found(count);
+ for(t_size walk = 0; walk < count; ++walk) {
+ if (order[walk] >= count) return false;
+ if (found[walk]) return false;
+ found.set(walk,true);
+ }
+ return true;
+ }
+ void permutation_validate(t_size const * order, t_size count) {
+ if (!permutation_is_valid(order,count)) throw exception_invalid_permutation();
+ }
+
+ t_size permutation_find_reverse(t_size const * order, t_size count, t_size value) {
+ if (value >= count) return ~0;
+ for(t_size walk = 0; walk < count; ++walk) {
+ if (order[walk] == value) return walk;
+ }
+ return ~0;
+ }
+
+ void create_move_items_permutation(t_size * p_output,t_size p_count,const bit_array & p_selection,int p_delta) {
+ t_size * const order = p_output;
+ const t_size count = p_count;
+
+ pfc::array_t<bool> selection; selection.set_size(p_count);
+
+ for(t_size walk = 0; walk < count; ++walk) {
+ order[walk] = walk;
+ selection[walk] = p_selection[walk];
+ }
+
+ if (p_delta<0)
+ {
+ for(;p_delta<0;p_delta++)
+ {
+ t_size idx;
+ for(idx=1;idx<count;idx++)
+ {
+ if (selection[idx] && !selection[idx-1])
+ {
+ pfc::swap_t(order[idx],order[idx-1]);
+ pfc::swap_t(selection[idx],selection[idx-1]);
+ }
+ }
+ }
+ }
+ else
+ {
+ for(;p_delta>0;p_delta--)
+ {
+ t_size idx;
+ for(idx=count-2;(int)idx>=0;idx--)
+ {
+ if (selection[idx] && !selection[idx+1])
+ {
+ pfc::swap_t(order[idx],order[idx+1]);
+ pfc::swap_t(selection[idx],selection[idx+1]);
+ }
+ }
+ }
+ }
+ }
+}
void order_helper::g_swap(t_size * data,t_size ptr1,t_size ptr2)
{
@@ -34,7 +99,7 @@ void order_helper::g_reverse(t_size * order,t_size base,t_size count) void pfc::crash() {
-#if 0 //def _MSC_VER
+#ifdef _MSC_VER
__debugbreak();
#else
*(char*)NULL = 0;
@@ -53,4 +118,20 @@ void pfc::myassert(const wchar_t * _Message, const wchar_t *_File, unsigned _Lin if (IsDebuggerPresent()) pfc::crash();
_wassert(_Message,_File,_Line);
}
-#endif
\ No newline at end of file +#endif
+
+
+t_uint64 pfc::pow_int(t_uint64 base, t_uint64 exp) {
+ t_uint64 mul = base;
+ t_uint64 val = 1;
+ t_uint64 mask = 1;
+ while(exp != 0) {
+ if (exp & mask) {
+ val *= mul;
+ exp ^= mask;
+ }
+ mul = mul * mul;
+ mask <<= 1;
+ }
+ return val;
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/other.h b/Plugins/listeningto/players/foo_mlt/pfc/other.h index d5dd877..ace7e26 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/other.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/other.h @@ -74,20 +74,6 @@ public: #endif
namespace pfc {
- class refcounter {
- public:
- refcounter(long p_val = 0) : m_val(p_val) {}
-#ifdef _WINDOWS
- long operator++() {return InterlockedIncrement(&m_val);}
- long operator--() {return InterlockedDecrement(&m_val);}
-#else
- long operator++() {return ++m_val;}
- long operator--() {return --m_val;}
-#pragma message("PORTME")
-#endif
- private:
- long m_val;
- };
class releaser_delete {
public:
@@ -165,6 +151,57 @@ namespace pfc { };
void crash();
+
+ template<typename t_type,t_type p_initval>
+ class int_container_helper {
+ public:
+ int_container_helper() : m_val(p_initval) {}
+ t_type m_val;
+ };
+
+
+
+ //warning: not multi-thread-safe
+ template<typename t_base>
+ class instanceTracker : public t_base {
+ private:
+ typedef instanceTracker<t_base> t_self;
+ public:
+ TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD_WITH_INITIALIZER(instanceTracker,t_base,{g_list += this;});
+
+ instanceTracker(const t_self & p_other) : t_base( (const t_base &)p_other) {g_list += this;}
+ ~instanceTracker() {g_list -= this;}
+
+ typedef pfc::avltree_t<t_self*> t_list;
+ static const t_list & instanceList() {return g_list;}
+ template<typename t_callback> static void forEach(t_callback & p_callback) {instanceList().enumerate(p_callback);}
+ private:
+ static t_list g_list;
+ };
+
+ template<typename t_base>
+ typename instanceTracker<t_base>::t_list instanceTracker<t_base>::g_list;
+
+
+ //warning: not multi-thread-safe
+ template<typename TClass>
+ class instanceTrackerV2 {
+ private:
+ typedef instanceTrackerV2<TClass> t_self;
+ public:
+ instanceTrackerV2(const t_self & p_other) {g_list += static_cast<TClass*>(this);}
+ instanceTrackerV2() {g_list += static_cast<TClass*>(this);}
+ ~instanceTrackerV2() {g_list -= static_cast<TClass*>(this);}
+
+ typedef pfc::avltree_t<TClass*> t_instanceList;
+ static const t_instanceList & instanceList() {return g_list;}
+ template<typename t_callback> static void forEach(t_callback & p_callback) {instanceList().enumerate(p_callback);}
+ private:
+ static t_instanceList g_list;
+ };
+
+ template<typename TClass>
+ typename instanceTrackerV2<TClass>::t_instanceList instanceTrackerV2<TClass>::g_list;
}
#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/pfc/pathUtils.cpp b/Plugins/listeningto/players/foo_mlt/pfc/pathUtils.cpp new file mode 100644 index 0000000..84e5156 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/pathUtils.cpp @@ -0,0 +1,182 @@ +#include "pfc.h"
+
+namespace pfc { namespace io { namespace path {
+
+static const string g_pathSeparators ("\\/|");
+
+string getFileName(string path) {
+ t_size split = path.lastIndexOfAnyChar(g_pathSeparators);
+ if (split == ~0) return path;
+ else return path.subString(split+1);
+}
+string getFileNameWithoutExtension(string path) {
+ string fn = getFileName(path);
+ t_size split = fn.lastIndexOf('.');
+ if (split == ~0) return fn;
+ else return fn.subString(0,split);
+}
+string getFileExtension(string path) {
+ string fn = getFileName(path);
+ t_size split = fn.lastIndexOf('.');
+ if (split == ~0) return "";
+ else return fn.subString(split);
+}
+string getDirectory(string filePath) {return getParent(filePath);}
+
+string getParent(string filePath) {
+ t_size split = filePath.lastIndexOfAnyChar(g_pathSeparators);
+ if (split == ~0) return "";
+#ifdef _WINDOWS
+ if (split > 0 && getIllegalNameChars().contains(filePath[split-1])) {
+ if (split + 1 < filePath.length()) return filePath.subString(0,split+1);
+ else return "";
+ }
+#endif
+ return filePath.subString(0,split);
+}
+string combine(string basePath,string fileName) {
+ if (basePath.length() > 0) {
+ if (!isSeparator(basePath.lastChar())) {
+ basePath += getDefaultSeparator();
+ }
+ return basePath + fileName;
+ } else {
+ //todo?
+ return fileName;
+ }
+}
+
+bool isSeparator(char c) {
+ return g_pathSeparators.indexOf(c) != ~0;
+}
+string getSeparators() {
+ return g_pathSeparators;
+}
+
+static string replaceIllegalChar(char c) {
+ switch(c) {
+ case '*':
+ return "x";
+ case '\"':
+ return "\'\'";
+ case ':':
+ case '/':
+ case '\\':
+ return "-";
+ default:
+ return "_";
+ }
+}
+string replaceIllegalPathChars(string fn) {
+ string illegal = getIllegalNameChars();
+ string separators = getSeparators();
+ string_formatter output;
+ for(t_size walk = 0; walk < fn.length(); ++walk) {
+ const char c = fn[walk];
+ if (separators.contains(c)) {
+ output.add_byte(getDefaultSeparator());
+ } else if (string::isNonTextChar(c) || illegal.contains(c)) {
+ string replacement = replaceIllegalChar(c);
+ if (replacement.containsAnyChar(illegal)) /*per-OS weirdness security*/ replacement = "_";
+ output << replacement.ptr();
+ } else {
+ output.add_byte(c);
+ }
+ }
+ return output.toString();
+}
+
+string replaceIllegalNameChars(string fn, bool allowWC) {
+ const string illegal = getIllegalNameChars(allowWC);
+ string_formatter output;
+ for(t_size walk = 0; walk < fn.length(); ++walk) {
+ const char c = fn[walk];
+ if (string::isNonTextChar(c) || illegal.contains(c)) {
+ string replacement = replaceIllegalChar(c);
+ if (replacement.containsAnyChar(illegal)) /*per-OS weirdness security*/ replacement = "_";
+ output << replacement.ptr();
+ } else {
+ output.add_byte(c);
+ }
+ }
+ return output.toString();
+}
+
+bool isInsideDirectory(pfc::string directory, pfc::string inside) {
+ //not very efficient
+ string walk = inside;
+ for(;;) {
+ walk = getParent(walk);
+ if (walk == "") return false;
+ if (equals(directory,walk)) return true;
+ }
+}
+bool isDirectoryRoot(string path) {
+ return getParent(path).isEmpty();
+}
+//OS-dependant part starts here
+
+
+char getDefaultSeparator() {
+#ifdef _WINDOWS
+ return '\\';
+#else
+#error PORTME
+#endif
+}
+
+static const string g_illegalNameChars(g_pathSeparators +
+#ifdef _WINDOWS
+ ":<>*?\""
+#else
+#error PORTME
+#endif
+ );
+static const string g_illegalNameChars_noWC(g_pathSeparators +
+#ifdef _WINDOWS
+ ":<>?\""
+#else
+#error PORTME
+#endif
+ );
+string getIllegalNameChars(bool allowWC) {
+ return allowWC ? g_illegalNameChars_noWC : g_illegalNameChars;
+}
+
+static bool isIllegalTrailingChar(char c) {
+ return c == ' ' || c == '.';
+}
+
+string validateFileName(string name, bool allowWC) {
+ for(t_size walk = 0; name[walk];) {
+ if (name[walk] == '?') {
+ t_size end = walk;
+ do { ++end; } while(name[end] == '?');
+ name = name.subString(0, walk) + name.subString(end);
+ } else {
+ ++walk;
+ }
+ }
+#ifdef _WINDOWS
+ name = replaceIllegalNameChars(name, allowWC);
+ if (name.length() > 0) {
+ t_size end = name.length();
+ while(end > 0) {
+ if (!isIllegalTrailingChar(name[end-1])) break;
+ --end;
+ }
+ t_size begin = 0;
+ while(begin < end) {
+ if (!isIllegalTrailingChar(name[begin])) break;
+ ++begin;
+ }
+ if (end < name.length() || begin > 0) name = name.subString(begin,end - begin);
+ }
+ if (name.isEmpty()) name = "_";
+ return name;
+#else
+ return replaceIllegalNameChars(name);
+#endif
+}
+
+}}}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/pathUtils.h b/Plugins/listeningto/players/foo_mlt/pfc/pathUtils.h new file mode 100644 index 0000000..c6a886b --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/pathUtils.h @@ -0,0 +1,29 @@ +namespace pfc {
+ namespace io {
+ namespace path {
+ string getFileName(string path);
+ string getFileNameWithoutExtension(string path);
+ string getFileExtension(string path);
+ string getParent(string filePath);
+ string getDirectory(string filePath);//same as getParent()
+ string combine(string basePath,string fileName);
+ char getDefaultSeparator();
+ string getSeparators();
+ bool isSeparator(char c);
+ string getIllegalNameChars(bool allowWC = false);
+ string replaceIllegalNameChars(string fn, bool allowWC = false);
+ string replaceIllegalPathChars(string fn);
+ bool isInsideDirectory(pfc::string directory, pfc::string inside);
+ bool isDirectoryRoot(string path);
+ string validateFileName(string name, bool allowWC = false);//removes various illegal things from the name, exact effect depends on the OS, includes removal of the invalid characters
+
+ template<typename t1, typename t2> bool equals(const t1 & v1, const t2 & v2) {return comparator::compare(v1,v2) == 0;}
+
+#ifdef _WINDOWS
+ typedef string::comparatorCaseInsensitive comparator;
+#else
+#error PORTME
+#endif
+ }
+ }
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/pfc.h b/Plugins/listeningto/players/foo_mlt/pfc/pfc.h index 3f6a7c0..408fcd5 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/pfc.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/pfc.h @@ -8,7 +8,7 @@ #define PFC_DLL_EXPORT
-#if defined(_WIN32) || defined(_WIN32_WCE)
+#ifdef _WINDOWS
#ifndef STRICT
#define STRICT
@@ -86,16 +86,25 @@ inline bool operator!=(const GUID & p_item1,const GUID & p_item2) { #include <math.h>
#include <float.h>
+#define _PFC_WIDESTRING(_String) L ## _String
+#define PFC_WIDESTRING(_String) _PFC_WIDESTRING(_String)
#ifndef _DEBUG
#define PFC_ASSERT(_Expression) ((void)0)
+#define PFC_ASSERT_SUCCESS(_Expression) (void)( (_Expression), 0)
+#define PFC_ASSERT_NO_EXCEPTION(_Expression) { _Expression; }
#else
+
#ifdef _WIN32
namespace pfc { void myassert(const wchar_t * _Message, const wchar_t *_File, unsigned _Line); }
-#define PFC_ASSERT(_Expression) (void)( (!!(_Expression)) || (pfc::myassert(_CRT_WIDE(#_Expression), _CRT_WIDE(__FILE__), __LINE__), 0) )
+#define PFC_ASSERT(_Expression) (void)( (!!(_Expression)) || (pfc::myassert(PFC_WIDESTRING(#_Expression), PFC_WIDESTRING(__FILE__), __LINE__), 0) )
+#define PFC_ASSERT_SUCCESS(_Expression) PFC_ASSERT(_Expression)
#else
#define PFC_ASSERT(_Expression) assert(_Expression)
+#define PFC_ASSERT_SUCCESS(_Expression) (void)( (_Expression), 0) //FIXME
#endif
+
+#define PFC_ASSERT_NO_EXCEPTION(_Expression) { try { _Expression; } catch(...) { PFC_ASSERT(!"Should not get here - unexpected exception"); } }
#endif
#ifdef _MSC_VER
@@ -113,11 +122,15 @@ namespace pfc { void myassert(const wchar_t * _Message, const wchar_t *_File, un #endif
#define PFC_DEPRECATE(X) __declspec(deprecated(X))
+#define PFC_NORETURN __declspec(noreturn)
+#define PFC_NOINLINE __declspec(noinline)
#else
#define NOVTABLE
-#define ASSUME(X) assert(X)
+#define ASSUME(X) PFC_ASSERT(X)
#define PFC_DEPRECATE(X)
+#define PFC_NORETURN
+#define PFC_NOINLINE
#endif
@@ -128,6 +141,7 @@ namespace pfc { void myassert(const wchar_t * _Message, const wchar_t *_File, un #include "alloc.h"
#include "array.h"
#include "bit_array_impl.h"
+#include "binary_search.h"
#include "bsearch_inline.h"
#include "bsearch.h"
#include "sort.h"
@@ -136,16 +150,23 @@ namespace pfc { void myassert(const wchar_t * _Message, const wchar_t *_File, un #include "ptr_list.h"
#include "string.h"
#include "string_list.h"
+#include "ref_counter.h"
+#include "iterators.h"
#include "avltree.h"
#include "map.h"
+#include "bit_array_impl_part2.h"
#include "profiler.h"
#include "guid.h"
#include "byte_order_helper.h"
#include "other.h"
-#include "chainlist.h"
-#include "ref_counter.h"
+#include "chain_list_v2.h"
#include "rcptr.h"
#include "com_ptr_t.h"
#include "string_conv.h"
+#include "stringNew.h"
+#include "pathUtils.h"
#include "instance_tracker.h"
-#endif //___PFC_H___
\ No newline at end of file +#include "threads.h"
+#include "base64.h"
+
+#endif //___PFC_H___
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/pfc.vcproj b/Plugins/listeningto/players/foo_mlt/pfc/pfc.vcproj index 2e09a74..e3d380a 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/pfc.vcproj +++ b/Plugins/listeningto/players/foo_mlt/pfc/pfc.vcproj @@ -1,10 +1,11 @@ <?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
- Version="8.00"
+ Version="9.00"
Name="pfc"
ProjectGUID="{EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}"
RootNamespace="pfc"
+ TargetFrameworkVersion="131072"
>
<Platforms>
<Platform
@@ -180,14 +181,17 @@ />
<Tool
Name="VCCLCompilerTool"
+ Optimization="2"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;PFC_DLL_EXPORTS"
StringPooling="true"
+ BufferSecurityCheck="false"
FloatingPointModel="2"
RuntimeTypeInfo="false"
UsePrecompiledHeader="2"
PrecompiledHeaderThrough="pfc.h"
WarningLevel="3"
SuppressStartupBanner="true"
+ DebugInformationFormat="3"
/>
<Tool
Name="VCManagedResourceCompilerTool"
@@ -305,6 +309,18 @@ >
</File>
<File
+ RelativePath=".\base64.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\base64.h"
+ >
+ </File>
+ <File
+ RelativePath=".\binary_search.h"
+ >
+ </File>
+ <File
RelativePath="bit_array.h"
>
</File>
@@ -313,6 +329,10 @@ >
</File>
<File
+ RelativePath=".\bit_array_impl_part2.h"
+ >
+ </File>
+ <File
RelativePath="bsearch.cpp"
>
<FileConfiguration
@@ -367,7 +387,7 @@ >
</File>
<File
- RelativePath="chainlist.h"
+ RelativePath=".\chain_list_v2.h"
>
</File>
<File
@@ -429,6 +449,10 @@ >
</File>
<File
+ RelativePath=".\iterators.h"
+ >
+ </File>
+ <File
RelativePath="list.h"
>
</File>
@@ -487,6 +511,14 @@ >
</File>
<File
+ RelativePath=".\pathUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\pathUtils.h"
+ >
+ </File>
+ <File
RelativePath="pfc.h"
>
</File>
@@ -715,6 +747,22 @@ >
</File>
<File
+ RelativePath=".\stringNew.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\stringNew.h"
+ >
+ </File>
+ <File
+ RelativePath=".\threads.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\threads.h"
+ >
+ </File>
+ <File
RelativePath=".\traits.h"
>
</File>
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcproj b/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcproj new file mode 100644 index 0000000..be2c7f9 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcproj @@ -0,0 +1,820 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="listeningto_foo2kSDK_pfc"
+ ProjectGUID="{EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}"
+ RootNamespace="pfc"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;PFC_DLL_EXPORTS;_CRT_SECURE_NO_WARNINGS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="pfc.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996;4995"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS,PFC_DLL_EXPORTS"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="pfc.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;PFC_DLL_EXPORTS;_CRT_SECURE_NO_WARNINGS"
+ StringPooling="true"
+ BufferSecurityCheck="false"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="pfc.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ DisableSpecificWarnings="4996;4995"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|x64"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)64/foobar2000/SDK"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)64/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="4"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ TargetEnvironment="3"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;PFC_DLL_EXPORTS"
+ StringPooling="true"
+ FloatingPointModel="2"
+ RuntimeTypeInfo="false"
+ UsePrecompiledHeader="2"
+ PrecompiledHeaderThrough="pfc.h"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLibrarianTool"
+ OutputFile="$(OutDir)\$(RootNamespace).lib"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\alloc.h"
+ >
+ </File>
+ <File
+ RelativePath="array.h"
+ >
+ </File>
+ <File
+ RelativePath=".\avltree.h"
+ >
+ </File>
+ <File
+ RelativePath=".\base64.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\base64.h"
+ >
+ </File>
+ <File
+ RelativePath=".\binary_search.h"
+ >
+ </File>
+ <File
+ RelativePath="bit_array.h"
+ >
+ </File>
+ <File
+ RelativePath=".\bit_array_impl.h"
+ >
+ </File>
+ <File
+ RelativePath=".\bit_array_impl_part2.h"
+ >
+ </File>
+ <File
+ RelativePath="bsearch.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="bsearch.h"
+ >
+ </File>
+ <File
+ RelativePath=".\bsearch_inline.h"
+ >
+ </File>
+ <File
+ RelativePath="byte_order_helper.h"
+ >
+ </File>
+ <File
+ RelativePath=".\chain_list_v2.h"
+ >
+ </File>
+ <File
+ RelativePath=".\com_ptr_t.h"
+ >
+ </File>
+ <File
+ RelativePath="guid.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="guid.h"
+ >
+ </File>
+ <File
+ RelativePath=".\instance_tracker.h"
+ >
+ </File>
+ <File
+ RelativePath=".\int_types.h"
+ >
+ </File>
+ <File
+ RelativePath=".\iterators.h"
+ >
+ </File>
+ <File
+ RelativePath="list.h"
+ >
+ </File>
+ <File
+ RelativePath=".\map.h"
+ >
+ </File>
+ <File
+ RelativePath=".\order_helper.h"
+ >
+ </File>
+ <File
+ RelativePath="other.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="other.h"
+ >
+ </File>
+ <File
+ RelativePath=".\pathUtils.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\pathUtils.h"
+ >
+ </File>
+ <File
+ RelativePath="pfc.h"
+ >
+ </File>
+ <File
+ RelativePath="primitives.h"
+ >
+ </File>
+ <File
+ RelativePath=".\printf.cpp"
+ >
+ </File>
+ <File
+ RelativePath="profiler.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="profiler.h"
+ >
+ </File>
+ <File
+ RelativePath="ptr_list.h"
+ >
+ </File>
+ <File
+ RelativePath=".\rcptr.h"
+ >
+ </File>
+ <File
+ RelativePath="ref_counter.h"
+ >
+ </File>
+ <File
+ RelativePath=".\selftest.cpp"
+ >
+ </File>
+ <File
+ RelativePath="sort.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="sort.h"
+ >
+ </File>
+ <File
+ RelativePath="stdafx.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ UsePrecompiledHeader="1"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="string.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="string.h"
+ >
+ </File>
+ <File
+ RelativePath=".\string8_impl.h"
+ >
+ </File>
+ <File
+ RelativePath=".\string_conv.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\string_conv.h"
+ >
+ </File>
+ <File
+ RelativePath=".\string_list.h"
+ >
+ </File>
+ <File
+ RelativePath=".\stringNew.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\stringNew.h"
+ >
+ </File>
+ <File
+ RelativePath=".\threads.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\threads.h"
+ >
+ </File>
+ <File
+ RelativePath=".\traits.h"
+ >
+ </File>
+ <File
+ RelativePath="utf8.cpp"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions=""
+ BasicRuntimeChecks="3"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcxproj b/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcxproj new file mode 100644 index 0000000..1744a49 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcxproj @@ -0,0 +1,319 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>listeningto_foo2kSDK_pfc</ProjectName>
+ <ProjectGuid>{EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}</ProjectGuid>
+ <RootNamespace>pfc</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>StaticLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/foobar2000/SDK\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)$(Configuration)64/Obj/listeningto/$(ProjectName)\</IntDir>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;PFC_DLL_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>pfc.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;PFC_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>pfc.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;PFC_DLL_EXPORTS;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <BufferSecurityCheck>false</BufferSecurityCheck>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>pfc.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;4995;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <Midl>
+ <TargetEnvironment>X64</TargetEnvironment>
+ </Midl>
+ <ClCompile>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;PFC_DLL_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <FloatingPointModel>Fast</FloatingPointModel>
+ <RuntimeTypeInfo>false</RuntimeTypeInfo>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <PrecompiledHeaderFile>pfc.h</PrecompiledHeaderFile>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0409</Culture>
+ </ResourceCompile>
+ <Lib>
+ <OutputFile>$(OutDir)$(RootNamespace).lib</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </Lib>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClInclude Include="alloc.h" />
+ <ClInclude Include="array.h" />
+ <ClInclude Include="avltree.h" />
+ <ClInclude Include="base64.h" />
+ <ClInclude Include="binary_search.h" />
+ <ClInclude Include="bit_array.h" />
+ <ClInclude Include="bit_array_impl.h" />
+ <ClInclude Include="bit_array_impl_part2.h" />
+ <ClInclude Include="bsearch.h" />
+ <ClInclude Include="bsearch_inline.h" />
+ <ClInclude Include="byte_order_helper.h" />
+ <ClInclude Include="chain_list_v2.h" />
+ <ClInclude Include="com_ptr_t.h" />
+ <ClInclude Include="guid.h" />
+ <ClInclude Include="instance_tracker.h" />
+ <ClInclude Include="int_types.h" />
+ <ClInclude Include="iterators.h" />
+ <ClInclude Include="list.h" />
+ <ClInclude Include="map.h" />
+ <ClInclude Include="order_helper.h" />
+ <ClInclude Include="other.h" />
+ <ClInclude Include="pathUtils.h" />
+ <ClInclude Include="pfc.h" />
+ <ClInclude Include="primitives.h" />
+ <ClInclude Include="profiler.h" />
+ <ClInclude Include="ptr_list.h" />
+ <ClInclude Include="rcptr.h" />
+ <ClInclude Include="ref_counter.h" />
+ <ClInclude Include="sort.h" />
+ <ClInclude Include="string.h" />
+ <ClInclude Include="string8_impl.h" />
+ <ClInclude Include="string_conv.h" />
+ <ClInclude Include="string_list.h" />
+ <ClInclude Include="stringNew.h" />
+ <ClInclude Include="threads.h" />
+ <ClInclude Include="traits.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="base64.cpp" />
+ <ClCompile Include="bsearch.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="guid.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="other.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="pathUtils.cpp" />
+ <ClCompile Include="printf.cpp" />
+ <ClCompile Include="profiler.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="selftest.cpp" />
+ <ClCompile Include="sort.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="stdafx.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Create</PrecompiledHeader>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Create</PrecompiledHeader>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">Create</PrecompiledHeader>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="string.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <ClCompile Include="string_conv.cpp" />
+ <ClCompile Include="stringNew.cpp" />
+ <ClCompile Include="threads.cpp" />
+ <ClCompile Include="utf8.cpp">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <BasicRuntimeChecks Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">EnableFastChecks</BasicRuntimeChecks>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcxproj.user b/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/pfc_9.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/pfc/primitives.h b/Plugins/listeningto/players/foo_mlt/pfc/primitives.h index d9fc8c2..dbdc8bc 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/primitives.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/primitives.h @@ -1,14 +1,16 @@ #define tabsize(x) ((size_t)(sizeof(x)/sizeof(*x)))
+#define PFC_TABSIZE(x) ((size_t)(sizeof(x)/sizeof(*x)))
#define TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD_WITH_INITIALIZER(THISCLASS,MEMBER,INITIALIZER) \
- THISCLASS() INITIALIZER \
+ THISCLASS() : MEMBER() INITIALIZER \
template<typename t_param1> THISCLASS(const t_param1 & p_param1) : MEMBER(p_param1) INITIALIZER \
template<typename t_param1,typename t_param2> THISCLASS(const t_param1 & p_param1,const t_param2 & p_param2) : MEMBER(p_param1,p_param2) INITIALIZER \
template<typename t_param1,typename t_param2,typename t_param3> THISCLASS(const t_param1 & p_param1,const t_param2 & p_param2,const t_param3 & p_param3) : MEMBER(p_param1,p_param2,p_param3) INITIALIZER \
template<typename t_param1,typename t_param2,typename t_param3,typename t_param4> THISCLASS(const t_param1 & p_param1,const t_param2 & p_param2,const t_param3 & p_param3,const t_param4 & p_param4) : MEMBER(p_param1,p_param2,p_param3,p_param4) INITIALIZER \
template<typename t_param1,typename t_param2,typename t_param3,typename t_param4,typename t_param5> THISCLASS(const t_param1 & p_param1,const t_param2 & p_param2,const t_param3 & p_param3,const t_param4 & p_param4,const t_param5 & p_param5) : MEMBER(p_param1,p_param2,p_param3,p_param4,p_param5) INITIALIZER \
template<typename t_param1,typename t_param2,typename t_param3,typename t_param4,typename t_param5,typename t_param6> THISCLASS(const t_param1 & p_param1,const t_param2 & p_param2,const t_param3 & p_param3,const t_param4 & p_param4,const t_param5 & p_param5,const t_param6 & p_param6) : MEMBER(p_param1,p_param2,p_param3,p_param4,p_param5,p_param6) INITIALIZER \
- template<typename t_param1,typename t_param2,typename t_param3,typename t_param4,typename t_param5,typename t_param6, typename t_param7> THISCLASS(const t_param1 & p_param1,const t_param2 & p_param2,const t_param3 & p_param3,const t_param4 & p_param4,const t_param5 & p_param5,const t_param6 & p_param6,const t_param7 & p_param7) : MEMBER(p_param1,p_param2,p_param3,p_param4,p_param5,p_param6,p_param7) INITIALIZER
+ template<typename t_param1,typename t_param2,typename t_param3,typename t_param4,typename t_param5,typename t_param6, typename t_param7> THISCLASS(const t_param1 & p_param1,const t_param2 & p_param2,const t_param3 & p_param3,const t_param4 & p_param4,const t_param5 & p_param5,const t_param6 & p_param6,const t_param7 & p_param7) : MEMBER(p_param1,p_param2,p_param3,p_param4,p_param5,p_param6,p_param7) INITIALIZER \
+ template<typename t_param1,typename t_param2,typename t_param3,typename t_param4,typename t_param5,typename t_param6, typename t_param7, typename t_param8> THISCLASS(const t_param1 & p_param1,const t_param2 & p_param2,const t_param3 & p_param3,const t_param4 & p_param4,const t_param5 & p_param5,const t_param6 & p_param6,const t_param7 & p_param7, const t_param8 & p_param8) : MEMBER(p_param1,p_param2,p_param3,p_param4,p_param5,p_param6,p_param7, p_param8) INITIALIZER
#define TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD(THISCLASS,MEMBER) TEMPLATE_CONSTRUCTOR_FORWARD_FLOOD_WITH_INITIALIZER(THISCLASS,MEMBER,{})
@@ -28,7 +30,7 @@ public: \ };
namespace pfc {
- template<typename t_exception> inline void throw_exception_with_message(const char * p_message) {
+ template<typename t_exception> PFC_NORETURN inline void throw_exception_with_message(const char * p_message) {
throw t_exception(p_message);
}
}
@@ -68,7 +70,7 @@ namespace pfc { }
char * m_message;
};
- template<typename t_exception> void throw_exception_with_message(const char * p_message) {
+ PFC_NORETURN template<typename t_exception> void throw_exception_with_message(const char * p_message) {
throw __exception_with_message_t<t_exception>(p_message);
}
}
@@ -85,20 +87,21 @@ namespace pfc { template<typename p_type>
class is_same_type<p_type,p_type> { public: enum {value = true}; };
- template<bool p_val> class __static_assert_switcher_t;
- template<> class __static_assert_switcher_t<true> {
- public:
- typedef void t_assert_failed;
- };
+// template<bool val> class static_assert;
+// template<> class static_assert<true> {};
- //depreacted
- template<bool p_val> typename __static_assert_switcher_t<p_val>::t_assert_failed static_assert_t() {}
+ template<bool val> class static_assert_t;
+ template<> class static_assert_t<true> {};
- template<bool p_val> typename __static_assert_switcher_t<p_val>::t_assert_failed static_assert() {}
+#define PFC_STATIC_ASSERT(X) { pfc::static_assert_t<(X)>(); }
template<typename t_type>
void assert_raw_type() {static_assert_t< !traits_t<t_type>::needs_constructor && !traits_t<t_type>::needs_destructor >();}
+ template<typename t_type> class assert_byte_type;
+ template<> class assert_byte_type<t_uint8> {};
+ template<> class assert_byte_type<t_int8> {};
+
template<typename t_type> void __unsafe__memcpy_t(t_type * p_dst,const t_type * p_src,t_size p_count) {
::memcpy(reinterpret_cast<void*>(p_dst), reinterpret_cast<const void*>(p_src), p_count * sizeof(t_type));
@@ -173,10 +176,7 @@ namespace pfc { return p_items;
}
- template<typename t_ret,typename t_param>
- t_ret safe_cast(t_param const & p_param) {
- return p_param;
- }
+ template<typename t_ret> t_ret implicit_cast(t_ret val) {return val;}
template<typename t_ret,typename t_param>
t_ret * safe_ptr_cast(t_param * p_param) {
@@ -191,6 +191,7 @@ namespace pfc { PFC_DECLARE_EXCEPTION(exception_overflow,exception,"Overflow");
PFC_DECLARE_EXCEPTION(exception_bug_check,exception,"Bug check");
+ PFC_DECLARE_EXCEPTION(exception_invalid_params,exception_bug_check,"Invalid parameters");
PFC_DECLARE_EXCEPTION(exception_unexpected_recursion,exception_bug_check,"Unexpected recursion");
PFC_DECLARE_EXCEPTION(exception_not_implemented,exception_bug_check,"Feature not implemented");
PFC_DECLARE_EXCEPTION(exception_dynamic_assert,exception_bug_check,"dynamic_assert failure");
@@ -288,12 +289,33 @@ namespace pfc { }
}
+ //! This is similar to plain p_item1 = p_item2; assignment, but optimized for the case where p_item2 content is no longer needed later on. This can be overridden for specific classes for optimal performance. \n
+ //! p_item2 value is undefined after performing a move_t. For an example, in certain cases move_t will fall back to swap_t.
+ template<typename T>
+ inline void move_t(T & p_item1, T & p_item2) {
+ typedef traits_t<T> t;
+ if (t::needs_constructor || t::needs_destructor) {
+ if (t::realloc_safe) swap_t(p_item1, p_item2);
+ else p_item1 = p_item2;
+ } else {
+ p_item1 = p_item2;
+ }
+ }
+
template<typename t_array>
t_size array_size_t(const t_array & p_array) {return p_array.get_size();}
template<typename t_item, t_size p_width>
t_size array_size_t(const t_item (&p_array)[p_width]) {return p_width;}
+ template<typename t_array, typename t_item> static bool array_isLast(const t_array & arr, const t_item & item) {
+ const t_size size = pfc::array_size_t(arr);
+ return size > 0 && arr[size-1] == item;
+ }
+ template<typename t_array, typename t_item> static bool array_isFirst(const t_array & arr, const t_item & item) {
+ const t_size size = pfc::array_size_t(arr);
+ return size > 0 && arr[0] == item;
+ }
template<typename t_array,typename t_filler>
inline void fill_t(t_array & p_buffer,const t_size p_count, const t_filler & p_filler) {
@@ -321,11 +343,23 @@ namespace pfc { inline static int compare(const t_item1 & p_item1,const t_item2 & p_item2) {return pfc::compare_t(p_item1,p_item2);}
};
+ template<typename t_comparator = pfc::comparator_default> class comparator_pointer { public:
+ template<typename t_item1,typename t_item2> static int compare(const t_item1 & p_item1,const t_item2 & p_item2) {return t_comparator::compare(*p_item1,*p_item2);}
+ };
+
+ template<typename t_primary,typename t_secondary> class comparator_dual { public:
+ template<typename t_item1,typename t_item2> static int compare(const t_item1 & p_item1,const t_item2 & p_item2) {
+ int state = t_primary::compare(p_item1,p_item2);
+ if (state != 0) return state;
+ return t_secondary::compare(p_item1,p_item2);
+ }
+ };
+
class comparator_memcmp {
public:
template<typename t_item1,typename t_item2>
inline static int compare(const t_item1 & p_item1,const t_item2 & p_item2) {
- static_assert<sizeof(t_item1) == sizeof(t_item2)>();
+ static_assert_t<sizeof(t_item1) == sizeof(t_item2)>();
return memcmp(&p_item1,&p_item2,sizeof(t_item1));
}
};
@@ -450,21 +484,28 @@ namespace pfc { return old_count;
}
+ template<typename t_array>
+ inline t_size insert_uninitialized_t(t_array & p_array,t_size p_index) {
+ t_size old_count = p_array.get_size();
+ if (p_index > old_count) p_index = old_count;
+ p_array.set_size(old_count + 1);
+ for(t_size n=old_count;n>p_index;n--) move_t(p_array[n], p_array[n-1]);
+ return p_index;
+ }
+
template<typename t_array,typename T>
- inline t_size insert_t(t_array & p_array,const T & p_item,t_size p_index)
- {
+ inline t_size insert_t(t_array & p_array,const T & p_item,t_size p_index) {
t_size old_count = p_array.get_size();
if (p_index > old_count) p_index = old_count;
p_array.set_size(old_count + 1);
for(t_size n=old_count;n>p_index;n--)
- p_array[n] = p_array[n-1];
+ move_t(p_array[n], p_array[n-1]);
p_array[p_index] = p_item;
return p_index;
}
template<typename t_array,typename T>
- inline t_size insert_swap_t(t_array & p_array,T & p_item,t_size p_index)
- {
+ inline t_size insert_swap_t(t_array & p_array,T & p_item,t_size p_index) {
t_size old_count = p_array.get_size();
if (p_index > old_count) p_index = old_count;
p_array.set_size(old_count + 1);
@@ -512,9 +553,13 @@ namespace pfc { inline t_int mul_safe_t(t_int p_val1,t_int p_val2) {
if (p_val1 == 0 || p_val2 == 0) return 0;
t_int temp = (t_int) (p_val1 * p_val2);
- if (temp < p_val1 || temp < p_val2) throw t_exception();
+ if (temp / p_val1 != p_val2) throw t_exception();
return temp;
}
+ template<typename t_int>
+ t_int multiply_guarded(t_int v1, t_int v2) {
+ return mul_safe_t<exception_overflow>(v1, v2);
+ }
template<typename t_src,typename t_dst>
void memcpy_t(t_dst* p_dst,const t_src* p_src,t_size p_count) {
@@ -561,6 +606,13 @@ namespace pfc { else memcpy_t<T>(p_dst,p_src,p_count);
}
+ template<typename TVal> void memxor_t(TVal * out, const TVal * s1, const TVal * s2, t_size count) {
+ for(t_size walk = 0; walk < count; ++walk) out[walk] = s1[walk] ^ s2[walk];
+ }
+ static void memxor(void * target, const void * source1, const void * source2, t_size size) {
+ memxor_t( reinterpret_cast<t_uint8*>(target), reinterpret_cast<const t_uint8*>(source1), reinterpret_cast<const t_uint8*>(source2), size);
+ }
+
template<typename T>
T* new_ptr_check_t(T* p_ptr) {
if (p_ptr == NULL) throw std::bad_alloc();
@@ -627,7 +679,7 @@ namespace pfc { if (n<count)
{
for(n=p_mask.find(false,n+1,count-n-1);n<count;n=p_mask.find(false,n+1,count-n-1))
- swap_t(p_array[total++],p_array[n]);
+ move_t(p_array[total++],p_array[n]);
p_array.set_size(total);
@@ -670,7 +722,7 @@ namespace pfc { }
template<typename t_char>
- t_size strlen_t(const t_char * p_string,t_size p_length = infinite) {
+ t_size strlen_t(const t_char * p_string,t_size p_length = ~0) {
for(t_size walk = 0;;walk++) {
if (walk >= p_length || p_string[walk] == 0) return walk;
}
@@ -722,6 +774,22 @@ namespace pfc { p_receiver.remove_all();
overwrite_list_enumerated(p_receiver,p_giver);
}
+
+ inline bool lxor(bool p_val1,bool p_val2) {
+ return p_val1 == !p_val2;
+ }
+
+ template<typename t_val>
+ inline void min_acc(t_val & p_acc,const t_val & p_val) {
+ if (p_val < p_acc) p_acc = p_val;
+ }
+
+ template<typename t_val>
+ inline void max_acc(t_val & p_acc,const t_val & p_val) {
+ if (p_val > p_acc) p_acc = p_val;
+ }
+
+ t_uint64 pow_int(t_uint64 base, t_uint64 exp);
};
@@ -729,3 +797,5 @@ namespace pfc { private: \
THISCLASSNAME(const THISTYPE&) {throw pfc::exception_bug_check();} \
const THISTYPE & operator=(const THISTYPE &) {throw pfc::exception_bug_check();}
+
+#define PFC_CLASS_NOT_COPYABLE_EX(THISTYPE) PFC_CLASS_NOT_COPYABLE(THISTYPE,THISTYPE)
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/pfc/ptr_list.h b/Plugins/listeningto/players/foo_mlt/pfc/ptr_list.h index 8762799..60e8dcd 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/ptr_list.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/ptr_list.h @@ -39,6 +39,8 @@ namespace pfc { };
typedef ptr_list_t<void> ptr_list;
+
+ template<typename item, typename base> class traits_t<ptr_list_t<item, base> > : public traits_t<base> {};
}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/rcptr.h b/Plugins/listeningto/players/foo_mlt/pfc/rcptr.h index f533745..1e19337 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/rcptr.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/rcptr.h @@ -1,13 +1,18 @@ namespace pfc {
+ struct _rcptr_null;
+ typedef _rcptr_null* t_rcptr_null;
+
+ static const t_rcptr_null rcptr_null = NULL;
+
class rc_container_base {
public:
- long add_ref() {
+ long add_ref() throw() {
return ++m_counter;
}
- long release() {
+ long release() throw() {
long ret = --m_counter;
- if (ret == 0) delete this;
+ if (ret == 0) PFC_ASSERT_NO_EXCEPTION( delete this );
return ret;
}
protected:
@@ -25,103 +30,66 @@ namespace pfc { };
template<typename t_object>
- class rcptr_const_t {
- protected:
+ class rcptr_t {
+ private:
+ typedef rcptr_t<t_object> t_self;
typedef rc_container_base t_container;
typedef rc_container_t<t_object> t_container_impl;
- private:
- typedef rcptr_const_t<t_object> t_self;
public:
+ rcptr_t(t_rcptr_null) throw() {__init();}
+ rcptr_t() throw() {__init();}
+ rcptr_t(const t_self & p_source) throw() {__init(p_source);}
+ t_self const & operator=(const t_self & p_source) throw() {__copy(p_source); return *this;}
- rcptr_const_t() : m_container(NULL), m_ptr(NULL) {}
- rcptr_const_t(const t_self & p_source) : m_container(NULL), m_ptr(NULL) {*this = p_source;}
+ template<typename t_source>
+ rcptr_t(const rcptr_t<t_source> & p_source) throw() {__init(p_source);}
+ template<typename t_source>
+ const t_self & operator=(const rcptr_t<t_source> & p_source) throw() {__copy(p_source); return *this;}
- void __set_from_cast(t_container * p_container,t_object * p_ptr) {
- release();
- p_container->add_ref();
- m_container = p_container;
- m_ptr = p_ptr;
- }
+ const t_self & operator=(t_rcptr_null) throw() {release(); return *this;}
- bool is_valid() const {return m_container != NULL;}
- bool is_empty() const {return m_container == NULL;}
-
- t_self const & operator=(const t_self & p_source) {
- release();
- if (p_source.is_valid()) {
- p_source.m_container->add_ref();
- m_container = p_source.m_container;
- m_ptr = p_source.m_ptr;
- }
- return *this;
- }
-
- ~rcptr_const_t() {release();}
+/* template<typename t_object_cast>
+ operator rcptr_t<t_object_cast>() const throw() {
+ rcptr_t<t_object_cast> temp;
+ if (is_valid()) temp.__set_from_cast(this->m_container,this->m_ptr);
+ return temp;
+ }*/
- void release() {
- t_container * temp = m_container;
- m_ptr = NULL;
- m_container = NULL;
- if (temp != NULL) temp->release();
+
+ template<typename t_other>
+ bool operator==(const rcptr_t<t_other> & p_other) const throw() {
+ return m_container == p_other.__container();
}
- const t_object & operator*() const {return *m_ptr;}
- const t_object * operator->() const {return m_ptr;}
-
- template<typename t_object_cast>
- operator rcptr_const_t<t_object_cast>() const {
- rcptr_const_t<t_object_cast> temp;
- if (is_valid()) temp.__set_from_cast(m_container,m_ptr);
- return temp;
+ template<typename t_other>
+ bool operator!=(const rcptr_t<t_other> & p_other) const throw() {
+ return m_container != p_other.__container();
}
- template<typename t_object_cast>
- rcptr_const_t<t_object_cast> static_cast_t() const {
- rcptr_const_t<t_object_cast> temp;
- if (is_valid()) temp.__set_from_cast(m_container,static_cast<t_object_cast*>(m_ptr));
- return temp;
+ void __set_from_cast(t_container * p_container,t_object * p_ptr) throw() {
+ //addref first because in rare cases this is the same pointer as the one we currently own
+ if (p_container != NULL) p_container->add_ref();
+ release();
+ m_container = p_container;
+ m_ptr = p_ptr;
}
- bool operator==(const t_self & p_other) const {
- return m_container == p_other.m_container;
- }
+ bool is_valid() const throw() {return m_container != NULL;}
+ bool is_empty() const throw() {return m_container == NULL;}
- bool operator!=(const t_self & p_other) const {
- return m_container != p_other.m_container;
- }
- protected:
- t_container * m_container;
- t_object * m_ptr;
- };
+ ~rcptr_t() throw() {release();}
- template<typename t_object>
- class rcptr_t : public rcptr_const_t<t_object> {
- private:
- typedef rcptr_t<t_object> t_self;
- protected:
- typedef rc_container_base t_container;
- typedef rc_container_t<t_object> t_container_impl;
- public:
- t_self const & operator=(const t_self & p_source) {
- this->release();
- if (p_source.is_valid()) {
- p_source.m_container->add_ref();
- this->m_container = p_source.m_container;
- this->m_ptr = p_source.m_ptr;
- }
- return *this;
+ void release() throw() {
+ t_container * temp = m_container;
+ m_ptr = NULL;
+ m_container = NULL;
+ if (temp != NULL) temp->release();
}
- template<typename t_object_cast>
- operator rcptr_t<t_object_cast>() const {
- rcptr_t<t_object_cast> temp;
- if (is_valid()) temp.__set_from_cast(this->m_container,this->m_ptr);
- return temp;
- }
template<typename t_object_cast>
- rcptr_t<t_object_cast> static_cast_t() const {
+ rcptr_t<t_object_cast> static_cast_t() const throw() {
rcptr_t<t_object_cast> temp;
if (is_valid()) temp.__set_from_cast(this->m_container,static_cast<t_object_cast*>(this->m_ptr));
return temp;
@@ -202,17 +170,34 @@ namespace pfc { return temp;
}
- t_object & operator*() const {return *this->m_ptr;}
+ t_object & operator*() const throw() {return *this->m_ptr;}
- t_object * operator->() const {return this->m_ptr;}
+ t_object * operator->() const throw() {return this->m_ptr;}
+
+ t_container * __container() const throw() {return m_container;}
private:
- void on_new(t_container_impl * p_container) {
+ void __init() throw() {m_container = NULL; m_ptr = NULL;}
+
+ template<typename t_source>
+ void __init(const rcptr_t<t_source> & p_source) throw() {
+ m_container = p_source.__container();
+ m_ptr = &*p_source;
+ if (m_container != NULL) m_container->add_ref();
+ }
+ template<typename t_source>
+ void __copy(const rcptr_t<t_source> & p_source) throw() {
+ __set_from_cast(p_source.__container(),&*p_source);
+ }
+ void on_new(t_container_impl * p_container) throw() {
this->release();
p_container->add_ref();
this->m_ptr = &p_container->m_object;
this->m_container = p_container;
}
+
+ t_container * m_container;
+ t_object * m_ptr;
};
template<typename t_object>
@@ -269,6 +254,5 @@ namespace pfc { enum { realloc_safe = true, constructor_may_fail = false };
};
- template<typename T> class traits_t<rcptr_const_t<T> > : public traits_rcptr {};
template<typename T> class traits_t<rcptr_t<T> > : public traits_rcptr {};
}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/pfc/ref_counter.h b/Plugins/listeningto/players/foo_mlt/pfc/ref_counter.h index 0cb65d6..2036165 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/ref_counter.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/ref_counter.h @@ -1,10 +1,33 @@ namespace pfc {
+ class counter {
+ public:
+ counter(long p_val = 0) : m_val(p_val) {}
+#ifdef _WINDOWS
+ long operator++() throw() {return InterlockedIncrement(&m_val);}
+ long operator--() throw() {return InterlockedDecrement(&m_val);}
+ long operator++(int) throw() {return InterlockedIncrement(&m_val)-1;}
+ long operator--(int) throw() {return InterlockedDecrement(&m_val)+1;}
+#else
+ long operator++() {return ++m_val;}
+ long operator--() {return --m_val;}
+ long operator++(int) {return m_val++;}
+ long operator--(int) {return m_val--;}
+#pragma message("PORTME")
+#endif
+ operator long() const throw() {return m_val;}
+ typedef long t_val;
+ private:
+ volatile long m_val;
+ };
+
+ typedef counter refcounter;
class NOVTABLE refcounted_object_root
{
public:
- void refcount_add_ref() {++m_counter;}
- void refcount_release() {if (--m_counter == 0) delete this;}
+ void refcount_add_ref() throw() {++m_counter;}
+ void refcount_release() throw() {if (--m_counter == 0) delete this;}
+ void _refcount_release_temporary() throw() {--m_counter;}//for internal use only!
protected:
refcounted_object_root() {}
virtual ~refcounted_object_root() {}
@@ -17,20 +40,20 @@ namespace pfc { private:
typedef refcounted_object_ptr_t<T> t_self;
public:
- inline refcounted_object_ptr_t() : m_ptr(NULL) {}
- inline refcounted_object_ptr_t(T* p_ptr) : m_ptr(NULL) {copy(p_ptr);}
- inline refcounted_object_ptr_t(const t_self & p_source) : m_ptr(NULL) {copy(p_source);}
+ inline refcounted_object_ptr_t() throw() : m_ptr(NULL) {}
+ inline refcounted_object_ptr_t(T* p_ptr) throw() : m_ptr(NULL) {copy(p_ptr);}
+ inline refcounted_object_ptr_t(const t_self & p_source) throw() : m_ptr(NULL) {copy(p_source);}
template<typename t_source>
- inline refcounted_object_ptr_t(t_source * p_ptr) : m_ptr(NULL) {copy(p_ptr);}
+ inline refcounted_object_ptr_t(t_source * p_ptr) throw() : m_ptr(NULL) {copy(p_ptr);}
template<typename t_source>
- inline refcounted_object_ptr_t(const refcounted_object_ptr_t<t_source> & p_source) : m_ptr(NULL) {copy(p_source);}
+ inline refcounted_object_ptr_t(const refcounted_object_ptr_t<t_source> & p_source) throw() : m_ptr(NULL) {copy(p_source);}
- inline ~refcounted_object_ptr_t() {if (m_ptr != NULL) m_ptr->refcount_release();}
+ inline ~refcounted_object_ptr_t() throw() {if (m_ptr != NULL) m_ptr->refcount_release();}
template<typename t_source>
- inline void copy(t_source * p_ptr) {
+ inline void copy(t_source * p_ptr) throw() {
T* torel = pfc::replace_t(m_ptr,pfc::safe_ptr_cast<T>(p_ptr));
if (m_ptr != NULL) m_ptr->refcount_add_ref();
if (torel != NULL) torel->refcount_release();
@@ -38,50 +61,54 @@ namespace pfc { }
template<typename t_source>
- inline void copy(const refcounted_object_ptr_t<t_source> & p_source) {copy(p_source.get_ptr());}
+ inline void copy(const refcounted_object_ptr_t<t_source> & p_source) throw() {copy(p_source.get_ptr());}
- inline const t_self & operator=(const t_self & p_source) {copy(p_source); return *this;}
- inline const t_self & operator=(T * p_ptr) {copy(p_ptr); return *this;}
+ inline const t_self & operator=(const t_self & p_source) throw() {copy(p_source); return *this;}
+ inline const t_self & operator=(T * p_ptr) throw() {copy(p_ptr); return *this;}
- template<typename t_source> inline t_self & operator=(const refcounted_object_ptr_t<t_source> & p_source) {copy(p_source); return *this;}
- template<typename t_source> inline t_self & operator=(t_source * p_ptr) {copy(p_ptr); return *this;}
+ template<typename t_source> inline t_self & operator=(const refcounted_object_ptr_t<t_source> & p_source) throw() {copy(p_source); return *this;}
+ template<typename t_source> inline t_self & operator=(t_source * p_ptr) throw() {copy(p_ptr); return *this;}
- inline void release() {
+ inline void release() throw() {
T * temp = pfc::replace_t(m_ptr,(T*)NULL);
if (temp != NULL) temp->refcount_release();
}
- inline T* operator->() const {PFC_ASSERT(m_ptr != NULL);return m_ptr;}
+ inline T& operator*() const throw() {return *m_ptr;}
+
+ inline T* operator->() const throw() {PFC_ASSERT(m_ptr != NULL);return m_ptr;}
- inline T* get_ptr() const {return m_ptr;}
+ inline T* get_ptr() const throw() {return m_ptr;}
- inline bool is_valid() const {return m_ptr != NULL;}
- inline bool is_empty() const {return m_ptr == NULL;}
+ inline bool is_valid() const throw() {return m_ptr != NULL;}
+ inline bool is_empty() const throw() {return m_ptr == NULL;}
- inline bool operator==(const t_self & p_item) const {return m_ptr == p_item.get_ptr();}
- inline bool operator!=(const t_self & p_item) const {return m_ptr != p_item.get_ptr();}
- inline bool operator>(const t_self & p_item) const {return m_ptr > p_item.get_ptr();}
- inline bool operator<(const t_self & p_item) const {return m_ptr < p_item.get_ptr();}
+ inline bool operator==(const t_self & p_item) const throw() {return m_ptr == p_item.get_ptr();}
+ inline bool operator!=(const t_self & p_item) const throw() {return m_ptr != p_item.get_ptr();}
+ inline bool operator>(const t_self & p_item) const throw() {return m_ptr > p_item.get_ptr();}
+ inline bool operator<(const t_self & p_item) const throw() {return m_ptr < p_item.get_ptr();}
- inline T* __unsafe_duplicate() const//should not be used ! temporary !
+ inline T* _duplicate_ptr() const throw()//should not be used ! temporary !
{
if (m_ptr) m_ptr->refcount_add_ref();
return m_ptr;
}
- inline T* __unsafe_detach() {
+ inline T* detach() throw() {//should not be used ! temporary !
T* ret = m_ptr;
m_ptr = 0;
return ret;
}
- inline void __unsafe_set(T * p_ptr) {//should not be used ! temporary !
+ inline void attach(T * p_ptr) throw() {//should not be used ! temporary !
release();
m_ptr = p_ptr;
}
+ inline t_self & operator<<(t_self & p_source) throw() {attach(p_source.detach());return *this;}
+ inline t_self & operator>>(t_self & p_dest) throw() {p_dest.attach(detach());return *this;}
private:
T* m_ptr;
};
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/selftest.cpp b/Plugins/listeningto/players/foo_mlt/pfc/selftest.cpp index 39b2c05..8e6d26a 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/selftest.cpp +++ b/Plugins/listeningto/players/foo_mlt/pfc/selftest.cpp @@ -2,24 +2,29 @@ static void selftest() //never called, testing done at compile time
{
- pfc::static_assert_t<sizeof(t_uint8) == 1>();
- pfc::static_assert_t<sizeof(t_uint16) == 2>();
- pfc::static_assert_t<sizeof(t_uint32) == 4>();
- pfc::static_assert_t<sizeof(t_uint64) == 8>();
+ PFC_STATIC_ASSERT( sizeof(t_uint8) == 1 );
+ PFC_STATIC_ASSERT( sizeof(t_uint16) == 2 );
+ PFC_STATIC_ASSERT( sizeof(t_uint32) == 4 );
+ PFC_STATIC_ASSERT( sizeof(t_uint64) == 8 );
- pfc::static_assert_t<sizeof(t_int8) == 1>();
- pfc::static_assert_t<sizeof(t_int16) == 2>();
- pfc::static_assert_t<sizeof(t_int32) == 4>();
- pfc::static_assert_t<sizeof(t_int64) == 8>();
+ PFC_STATIC_ASSERT( sizeof(t_int8) == 1 );
+ PFC_STATIC_ASSERT( sizeof(t_int16) == 2 );
+ PFC_STATIC_ASSERT( sizeof(t_int32) == 4 );
+ PFC_STATIC_ASSERT( sizeof(t_int64) == 8 );
- pfc::static_assert_t<sizeof(t_float32) == 4>();
- pfc::static_assert_t<sizeof(t_float64) == 8>();
+ PFC_STATIC_ASSERT( sizeof(t_float32) == 4 );
+ PFC_STATIC_ASSERT( sizeof(t_float64) == 8 );
- pfc::static_assert_t<sizeof(t_size) == sizeof(void*)>();
- pfc::static_assert_t<sizeof(t_ssize) == sizeof(void*)>();
+ PFC_STATIC_ASSERT( sizeof(t_size) == sizeof(void*) );
+ PFC_STATIC_ASSERT( sizeof(t_ssize) == sizeof(void*) );
- pfc::static_assert_t<sizeof(wchar_t) == 2 || sizeof(wchar_t) == 4>();
+ PFC_STATIC_ASSERT( sizeof(wchar_t) == 2 || sizeof(wchar_t) == 4 );
- pfc::static_assert_t<sizeof(GUID) == 16>();
+ PFC_STATIC_ASSERT( sizeof(GUID) == 16 );
+
+ /*typedef pfc::avltree_t<int> t_asdf;
+ t_asdf asdf; asdf.add_item(1);
+ t_asdf::iterator iter = asdf._first_var();
+ t_asdf::const_iterator iter2 = asdf._first_var();*/
}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/pfc/sort.cpp b/Plugins/listeningto/players/foo_mlt/pfc/sort.cpp index 632c99f..68a8da4 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/sort.cpp +++ b/Plugins/listeningto/players/foo_mlt/pfc/sort.cpp @@ -1,8 +1,13 @@ #include "pfc.h"
+#if defined(_M_IX86) || defined(_M_IX64)
+#include <intrin.h>
+#define PFC_HAVE_RDTSC
+#endif
+
namespace pfc {
-PFC_DLL_EXPORT void swap_void(void * item1,void * item2,t_size width)
+void swap_void(void * item1,void * item2,t_size width)
{
unsigned char * ptr1 = (unsigned char*)item1, * ptr2 = (unsigned char*)item2;
t_size n;
@@ -17,7 +22,7 @@ PFC_DLL_EXPORT void swap_void(void * item1,void * item2,t_size width) }
}
-PFC_DLL_EXPORT void reorder(reorder_callback & p_callback,const t_size * p_order,t_size p_count)
+void reorder(reorder_callback & p_callback,const t_size * p_order,t_size p_count)
{
t_size done_size = bit_array_bittable::g_estimate_size(p_count);
pfc::array_hybrid_t<unsigned char,1024> done;
@@ -32,9 +37,9 @@ PFC_DLL_EXPORT void reorder(reorder_callback & p_callback,const t_size * p_order t_size prev = n;
do
{
- assert(!bit_array_bittable::g_get(done,next));
- assert(next>n);
- assert(n<p_count);
+ PFC_ASSERT(!bit_array_bittable::g_get(done,next));
+ PFC_ASSERT(next>n);
+ PFC_ASSERT(n<p_count);
p_callback.swap(prev,next);
bit_array_bittable::g_set(done,next,true);
prev = next;
@@ -45,7 +50,7 @@ PFC_DLL_EXPORT void reorder(reorder_callback & p_callback,const t_size * p_order }
}
-PFC_DLL_EXPORT void reorder_void(void * data,t_size width,const t_size * order,t_size num,void (*swapfunc)(void * item1,void * item2,t_size width))
+void reorder_void(void * data,t_size width,const t_size * order,t_size num,void (*swapfunc)(void * item1,void * item2,t_size width))
{
unsigned char * base = (unsigned char *) data;
t_size done_size = bit_array_bittable::g_estimate_size(num);
@@ -61,9 +66,9 @@ PFC_DLL_EXPORT void reorder_void(void * data,t_size width,const t_size * order,t t_size prev = n;
do
{
- assert(!bit_array_bittable::g_get(done,next));
- assert(next>n);
- assert(n<num);
+ PFC_ASSERT(!bit_array_bittable::g_get(done,next));
+ PFC_ASSERT(next>n);
+ PFC_ASSERT(n<num);
swapfunc(base+width*prev,base+width*next,width);
bit_array_bittable::g_set(done,next,true);
prev = next;
@@ -108,7 +113,7 @@ private: };
}
-PFC_DLL_EXPORT void sort_void_ex (
+void sort_void_ex (
void *base,
t_size num,
t_size width,
@@ -132,10 +137,37 @@ inline static void __sort_2elem_helper(pfc::sort_callback & p_callback,t_size & if (p_callback.compare(p_elem1,p_elem2) > 0) pfc::swap_t(p_elem1,p_elem2);
}
+
+#ifdef PFC_HAVE_RDTSC
+static inline t_uint64 uniqueVal() {return __rdtsc();}
+#else
+static counter::t_val uniqueVal() {
+ static counter c; return ++c;
+}
+#endif
+
+static t_size myrand(t_size count) {
+ PFC_STATIC_ASSERT( RAND_MAX == 0x7FFF );
+
+ t_uint64 val;
+ val = (t_uint64) rand() | (t_uint64)( (t_uint32)rand() << 16 );
+
+ val ^= uniqueVal();
+
+ return (t_size)(val % count);
+}
+
inline static t_size __pivot_helper(pfc::sort_callback & p_callback,t_size const p_base,t_size const p_count) {
- PFC_ASSERT(p_count > 1);
- //take middle element from lowest/middle/highest ones in original order. todo: try to come up with smarter approach?
- t_size val1 = p_base, val2 = p_base + (p_count / 2), val3 = p_base + (p_count - 1);
+ PFC_ASSERT(p_count > 2);
+
+ //t_size val1 = p_base, val2 = p_base + (p_count / 2), val3 = p_base + (p_count - 1);
+
+ t_size val1 = myrand(p_count), val2 = myrand(p_count-1), val3 = myrand(p_count-2);
+ if (val2 >= val1) val2++;
+ if (val3 >= val1) val3++;
+ if (val3 >= val2) val3++;
+
+ val1 += p_base; val2 += p_base; val3 += p_base;
__sort_2elem_helper(p_callback,val1,val2);
__sort_2elem_helper(p_callback,val1,val3);
@@ -187,11 +219,12 @@ static void newsort(pfc::sort_callback & p_callback,t_size const p_base,t_size c }
void sort(pfc::sort_callback & p_callback,t_size p_num) {
+ srand((unsigned int)(uniqueVal() ^ p_num));
newsort(p_callback,0,p_num);
}
-PFC_DLL_EXPORT void sort_void(void * base,t_size num,t_size width,int (*comp)(const void *, const void *) )
+void sort_void(void * base,t_size num,t_size width,int (*comp)(const void *, const void *) )
{
sort_void_ex(base,num,width,comp,swap_void);
}
@@ -221,7 +254,7 @@ void sort_callback_stabilizer::swap(t_size p_index1, t_size p_index2) }
-PFC_DLL_EXPORT void sort_stable(sort_callback & p_callback,t_size p_count)
+void sort_stable(sort_callback & p_callback,t_size p_count)
{
sort(sort_callback_stabilizer(p_callback,p_count),p_count);
}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/sort.h b/Plugins/listeningto/players/foo_mlt/pfc/sort.h index 53e06b4..a02e1f5 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/sort.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/sort.h @@ -1,8 +1,8 @@ namespace pfc {
- PFC_DLL_EXPORT void swap_void(void * item1,void * item2,t_size width);
+ void swap_void(void * item1,void * item2,t_size width);
- PFC_DLL_EXPORT void reorder_void(void * data,t_size width,const t_size * order,t_size num,void (*swapfunc)(void * item1,void * item2,t_size width) = swap_void);
+ void reorder_void(void * data,t_size width,const t_size * order,t_size num,void (*swapfunc)(void * item1,void * item2,t_size width) = swap_void);
class NOVTABLE reorder_callback
{
@@ -10,7 +10,7 @@ namespace pfc { virtual void swap(t_size p_index1,t_size p_index2) = 0;
};
- PFC_DLL_EXPORT void reorder(reorder_callback & p_callback,const t_size * p_order,t_size p_count);
+ void reorder(reorder_callback & p_callback,const t_size * p_order,t_size p_count);
template<typename t_container>
class reorder_callback_impl_t : public reorder_callback
@@ -91,11 +91,11 @@ namespace pfc { array_t<t_size> m_order;
};
- PFC_DLL_EXPORT void sort(sort_callback & p_callback,t_size p_count);
- PFC_DLL_EXPORT void sort_stable(sort_callback & p_callback,t_size p_count);
+ void sort(sort_callback & p_callback,t_size p_count);
+ void sort_stable(sort_callback & p_callback,t_size p_count);
- PFC_DLL_EXPORT void sort_void_ex(void *base,t_size num,t_size width, int (*comp)(const void *, const void *),void (*swap)(void *, void *, t_size) );
- PFC_DLL_EXPORT void sort_void(void * base,t_size num,t_size width,int (*comp)(const void *, const void *) );
+ void sort_void_ex(void *base,t_size num,t_size width, int (*comp)(const void *, const void *),void (*swap)(void *, void *, t_size) );
+ void sort_void(void * base,t_size num,t_size width,int (*comp)(const void *, const void *) );
template<typename t_container,typename t_compare>
class sort_callback_impl_simple_wrap_t : public sort_callback
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/string.cpp b/Plugins/listeningto/players/foo_mlt/pfc/string.cpp index 947b9f8..a150612 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/string.cpp +++ b/Plugins/listeningto/players/foo_mlt/pfc/string.cpp @@ -17,7 +17,7 @@ void string_base::skip_trailing_char(unsigned skip) for(ptr=0;str[ptr];)
{
unsigned c;
- t_size delta = utf8_decode_char(str+ptr,&c);
+ t_size delta = utf8_decode_char(str+ptr,c);
if (delta==0) break;
if (c==skip)
{
@@ -56,23 +56,6 @@ format_time::format_time(t_uint64 p_seconds) { }
}
-int strcmp_partial(const char * p_string,const char * p_substring) {return strcmp_partial_ex(p_string,infinite,p_substring,infinite);}
-
-static int __strcmp_partial_ex(const char * p_string,t_size p_string_length,const char * p_substring,t_size p_substring_length) throw() {
- for(t_size walk=0;walk<p_substring_length;walk++) {
- char stringchar = (walk>=p_string_length ? 0 : p_string[walk]);
- char substringchar = p_substring[walk];
- int result = compare_t(stringchar,substringchar);
- if (result != 0) return result;
- }
- return 0;
-}
-
-int strcmp_partial_ex(const char * p_string,t_size p_string_length,const char * p_substring,t_size p_substring_length) /*throw()*/ {
- p_string_length = strlen_max(p_string,p_string_length); p_substring_length = strlen_max(p_substring,p_substring_length);
- return __strcmp_partial_ex(p_string,p_string_length,p_substring,p_substring_length);
-}
-
bool is_path_separator(unsigned c)
{
return c=='\\' || c=='/' || c=='|' || c==':';
@@ -139,7 +122,7 @@ string_extension::string_extension(const char * src) {
ptr++;
t_size len = end-ptr;
- if (len<tabsize(buffer))
+ if (len<PFC_TABSIZE(buffer))
{
memcpy(buffer,ptr,len*sizeof(char));
buffer[len]=0;
@@ -276,7 +259,7 @@ void string_base::convert_to_lower_ascii(const char * src,char replace) while(*src)
{
unsigned c;
- t_size delta = utf8_decode_char(src,&c);
+ t_size delta = utf8_decode_char(src,c);
if (delta==0) {c = replace; delta = 1;}
else if (c>=0x80) c = replace;
add_byte((char)c);
@@ -291,7 +274,7 @@ void convert_to_lower_ascii(const char * src,t_size max,char * out,char replace) while(ptr<max && src[ptr])
{
unsigned c;
- t_size delta = utf8_decode_char(src+ptr,&c,max-ptr);
+ t_size delta = utf8_decode_char(src+ptr,c,max-ptr);
if (delta==0) {c = replace; delta = 1;}
else if (c>=0x80) c = replace;
*(out++) = (char)c;
@@ -300,7 +283,7 @@ void convert_to_lower_ascii(const char * src,t_size max,char * out,char replace) *out = 0;
}
-t_size strstr_ex(const char * p_string,t_size p_string_len,const char * p_substring,t_size p_substring_len)
+t_size strstr_ex(const char * p_string,t_size p_string_len,const char * p_substring,t_size p_substring_len) throw()
{
p_string_len = strlen_max(p_string,p_string_len);
p_substring_len = strlen_max(p_substring,p_substring_len);
@@ -399,7 +382,7 @@ t_int64 atoi64_ex(const char * src,t_size len) return neg ? -ret : ret;
}
-int stricmp_ascii_ex(const char * const s1,t_size const len1,const char * const s2,t_size const len2) {
+int stricmp_ascii_ex(const char * const s1,t_size const len1,const char * const s2,t_size const len2) throw() {
t_size walk1 = 0, walk2 = 0;
for(;;) {
char c1 = (walk1 < len1) ? s1[walk1] : 0;
@@ -413,7 +396,7 @@ int stricmp_ascii_ex(const char * const s1,t_size const len1,const char * const }
}
-int stricmp_ascii(const char * s1,const char * s2) {
+int stricmp_ascii(const char * s1,const char * s2) throw() {
for(;;) {
char c1 = ascii_tolower(*s1), c2 = ascii_tolower(*s2);
if (c1<c2) return -1;
@@ -435,7 +418,7 @@ format_float::format_float(double p_val,unsigned p_width,unsigned p_prec) m_buffer += temp;
}
-static char format_hex_char(unsigned p_val)
+char format_hex_char(unsigned p_val)
{
PFC_ASSERT(p_val < 16);
return (p_val < 10) ? p_val + '0' : p_val - 10 + 'A';
@@ -463,7 +446,7 @@ format_hex::format_hex(t_uint64 p_val,unsigned p_width) *out = 0;
}
-static char format_hex_char_lowercase(unsigned p_val)
+char format_hex_char_lowercase(unsigned p_val)
{
PFC_ASSERT(p_val < 16);
return (p_val < 10) ? p_val + '0' : p_val - 10 + 'a';
@@ -494,7 +477,7 @@ format_hex_lowercase::format_hex_lowercase(t_uint64 p_val,unsigned p_width) format_uint::format_uint(t_uint64 val,unsigned p_width,unsigned p_base)
{
- enum {max_width = tabsize(m_buffer) - 1};
+ enum {max_width = PFC_TABSIZE(m_buffer) - 1};
if (p_width > max_width) p_width = max_width;
else if (p_width == 0) p_width = 1;
@@ -537,7 +520,7 @@ format_int::format_int(t_int64 p_val,unsigned p_width,unsigned p_base) if (p_val < 0) {neg = true; val = (t_uint64)(-p_val);}
else val = (t_uint64)p_val;
- enum {max_width = tabsize(m_buffer) - 1};
+ enum {max_width = PFC_TABSIZE(m_buffer) - 1};
if (p_width > max_width) p_width = max_width;
else if (p_width == 0) p_width = 1;
@@ -609,7 +592,10 @@ string_replace_extension::string_replace_extension(const char * p_path,const cha string_directory::string_directory(const char * p_path)
{
t_size ptr = scan_filename(p_path);
- if (ptr > 0) m_data.set_string(p_path,ptr-1);
+ if (ptr > 1) {
+ if (is_path_separator(p_path[ptr-1]) && !is_path_separator(p_path[ptr-2])) --ptr;
+ }
+ m_data.set_string(p_path,ptr);
}
t_size scan_filename(const char * ptr)
@@ -626,20 +612,26 @@ t_size scan_filename(const char * ptr) t_size string_find_first(const char * p_string,char p_tofind,t_size p_start) {
- return string_find_first_ex(p_string,infinite,&p_tofind,1,p_start);
+ for(t_size walk = p_start; p_string[walk]; ++walk) {
+ if (p_string[walk] == p_tofind) return walk;
+ }
+ return ~0;
}
t_size string_find_last(const char * p_string,char p_tofind,t_size p_start) {
- return string_find_last_ex(p_string,infinite,&p_tofind,1,p_start);
+ return string_find_last_ex(p_string,~0,&p_tofind,1,p_start);
}
t_size string_find_first(const char * p_string,const char * p_tofind,t_size p_start) {
- return string_find_first_ex(p_string,infinite,p_tofind,infinite,p_start);
+ return string_find_first_ex(p_string,~0,p_tofind,~0,p_start);
}
t_size string_find_last(const char * p_string,const char * p_tofind,t_size p_start) {
- return string_find_last_ex(p_string,infinite,p_tofind,infinite,p_start);
+ return string_find_last_ex(p_string,~0,p_tofind,~0,p_start);
}
t_size string_find_first_ex(const char * p_string,t_size p_string_length,char p_tofind,t_size p_start) {
- return string_find_first_ex(p_string,p_string_length,&p_tofind,1,p_start);
+ for(t_size walk = p_start; walk < p_string_length && p_string[walk]; ++walk) {
+ if (p_string[walk] == p_tofind) return walk;
+ }
+ return ~0;
}
t_size string_find_last_ex(const char * p_string,t_size p_string_length,char p_tofind,t_size p_start) {
return string_find_last_ex(p_string,p_string_length,&p_tofind,1,p_start);
@@ -649,24 +641,41 @@ t_size string_find_first_ex(const char * p_string,t_size p_string_length,const c if (p_string_length >= p_tofind_length) {
t_size max = p_string_length - p_tofind_length;
for(t_size walk = p_start; walk <= max; walk++) {
- if (__strcmp_partial_ex(p_string+walk,p_string_length-walk,p_tofind,p_tofind_length) == 0) return walk;
+ if (_strcmp_partial_ex(p_string+walk,p_string_length-walk,p_tofind,p_tofind_length) == 0) return walk;
}
}
- return infinite;
+ return ~0;
}
t_size string_find_last_ex(const char * p_string,t_size p_string_length,const char * p_tofind,t_size p_tofind_length,t_size p_start) {
p_string_length = strlen_max(p_string,p_string_length); p_tofind_length = strlen_max(p_tofind,p_tofind_length);
if (p_string_length >= p_tofind_length) {
t_size max = min_t<t_size>(p_string_length - p_tofind_length,p_start);
for(t_size walk = max; walk != (t_size)(-1); walk--) {
- if (__strcmp_partial_ex(p_string+walk,p_string_length-walk,p_tofind,p_tofind_length) == 0) return walk;
+ if (_strcmp_partial_ex(p_string+walk,p_string_length-walk,p_tofind,p_tofind_length) == 0) return walk;
}
}
- return infinite;
+ return ~0;
}
+t_size string_find_first_nc(const char * p_string,t_size p_string_length,char c,t_size p_start) {
+ for(t_size walk = p_start; walk < p_string_length; walk++) {
+ if (p_string[walk] == c) return walk;
+ }
+ return ~0;
+}
-bool string_is_numeric(const char * p_string,t_size p_length) {
+t_size string_find_first_nc(const char * p_string,t_size p_string_length,const char * p_tofind,t_size p_tofind_length,t_size p_start) {
+ if (p_string_length >= p_tofind_length) {
+ t_size max = p_string_length - p_tofind_length;
+ for(t_size walk = p_start; walk <= max; walk++) {
+ if (memcmp(p_string+walk, p_tofind, p_tofind_length) == 0) return walk;
+ }
+ }
+ return ~0;
+}
+
+
+bool string_is_numeric(const char * p_string,t_size p_length) throw() {
bool retval = false;
for(t_size walk = 0; walk < p_length && p_string[walk] != 0; walk++) {
if (!char_is_numeric(p_string[walk])) {retval = false; break;}
@@ -678,7 +687,11 @@ bool string_is_numeric(const char * p_string,t_size p_length) { void string_base::fix_dir_separator(char p_char) {
t_size length = get_length();
- if (length == 0 || get_ptr()[length-1] != p_char) add_byte(p_char);
+ if (!ends_with(p_char)) add_byte(p_char);
+}
+bool string_base::ends_with(char c) {
+ t_size length = get_length();
+ return length > 0 && get_ptr()[length-1] == c;
}
bool is_multiline(const char * p_string,t_size p_len) {
@@ -708,4 +721,210 @@ format_time_ex::format_time_ex(double p_seconds,unsigned p_extra) { }
}
-}
\ No newline at end of file +t_uint32 charLower(t_uint32 param)
+{
+ if (param<128)
+ {
+ if (param>='A' && param<='Z') param += 'a' - 'A';
+ return param;
+ }
+#ifdef WIN32
+ else if (param<0x10000)
+ {
+ unsigned ret;
+#ifdef UNICODE
+ ret = (unsigned)CharLowerW((WCHAR*)param);
+#else
+#error Nein! Verboten!
+#endif
+ return ret;
+ }
+ else return param;
+#else
+ else
+ {
+ setlocale(LC_CTYPE,"");
+ return towlower(param);
+ }
+#endif
+}
+
+t_uint32 charUpper(t_uint32 param)
+{
+ if (param<128)
+ {
+ if (param>='a' && param<='z') param += 'A' - 'a';
+ return param;
+ }
+#ifdef WIN32
+ else if (param<0x10000)
+ {
+ unsigned ret;
+#ifdef UNICODE
+ ret = (unsigned)CharUpperW((WCHAR*)param);
+#else
+#error Nein! Verboten!
+#endif
+ return ret;
+ }
+ else return param;
+#else
+ else
+ {
+ setlocale(LC_CTYPE,"");
+ return towupper(param);
+ }
+#endif
+}
+
+void stringToUpperAppend(string_base & out, const char * src, t_size len) {
+ while(len && *src) {
+ unsigned c; t_size d;
+ d = utf8_decode_char(src,c,len);
+ if (d==0 || d>len) break;
+ out.add_char(charUpper(c));
+ src+=d;
+ len-=d;
+ }
+}
+void stringToLowerAppend(string_base & out, const char * src, t_size len) {
+ while(len && *src) {
+ unsigned c; t_size d;
+ d = utf8_decode_char(src,c,len);
+ if (d==0 || d>len) break;
+ out.add_char(charLower(c));
+ src+=d;
+ len-=d;
+ }
+}
+int stringCompareCaseInsensitiveEx(string_part_ref s1, string_part_ref s2) {
+ t_size w1 = 0, w2 = 0;
+ for(;;) {
+ unsigned c1, c2; t_size d1, d2;
+ d1 = utf8_decode_char(s1.m_ptr + w1, c1, s1.m_len - w1);
+ d2 = utf8_decode_char(s2.m_ptr + w2, c2, s2.m_len - w2);
+ if (d1 == 0 && d2 == 0) return 0;
+ else if (d1 == 0) return -1;
+ else if (d2 == 0) return 1;
+ else {
+ c1 = charLower(c1); c2 = charLower(c2);
+ if (c1 < c2) return -1;
+ else if (c1 > c2) return 1;
+ }
+ w1 += d1; w2 += d2;
+ }
+}
+int stringCompareCaseInsensitive(const char * s1, const char * s2) {
+ for(;;) {
+ unsigned c1, c2; t_size d1, d2;
+ d1 = utf8_decode_char(s1,c1);
+ d2 = utf8_decode_char(s2,c2);
+ if (d1 == 0 && d2 == 0) return 0;
+ else if (d1 == 0) return -1;
+ else if (d2 == 0) return 1;
+ else {
+ c1 = charLower(c1); c2 = charLower(c2);
+ if (c1 < c2) return -1;
+ else if (c1 > c2) return 1;
+ }
+ s1 += d1; s2 += d2;
+ }
+}
+
+format_file_size_short::format_file_size_short(t_uint64 size) {
+ t_uint64 scale = 1;
+ const char * unit = "B";
+ const char * const unitTable[] = {"B","KB","MB","GB","TB"};
+ for(t_size walk = 1; walk < PFC_TABSIZE(unitTable); ++walk) {
+ t_uint64 next = scale * 1024;
+ if (size < next) break;
+ scale = next; unit = unitTable[walk];
+ }
+ *this << ( size / scale );
+
+ if (scale > 1 && length() < 3) {
+ t_size digits = 3 - length();
+ const t_uint64 mask = pow_int(10,digits);
+ t_uint64 remaining = ( (size * mask / scale) % mask );
+ while(digits > 0 && (remaining % 10) == 0) {
+ remaining /= 10; --digits;
+ }
+ if (digits > 0) {
+ *this << "." << format_uint(remaining, (t_uint32)digits);
+ }
+ }
+ *this << unit;
+ m_scale = scale;
+}
+
+bool string_base::truncate_eol(t_size start)
+{
+ const char * ptr = get_ptr() + start;
+ for(t_size n=start;*ptr;n++)
+ {
+ if (*ptr==10 || *ptr==13)
+ {
+ truncate(n);
+ return true;
+ }
+ ptr++;
+ }
+ return false;
+}
+
+bool string_base::fix_eol(const char * append,t_size start)
+{
+ const bool rv = truncate_eol(start);
+ if (rv) add_string(append);
+ return rv;
+}
+
+bool string_base::limit_length(t_size length_in_chars,const char * append)
+{
+ bool rv = false;
+ const char * base = get_ptr(), * ptr = base;
+ while(length_in_chars && utf8_advance(ptr)) length_in_chars--;
+ if (length_in_chars==0)
+ {
+ truncate(ptr-base);
+ add_string(append);
+ rv = true;
+ }
+ return rv;
+}
+
+void urlEncodeAppendRaw(pfc::string_base & out, const char * in, t_size inSize) {
+ for(t_size walk = 0; walk < inSize; ++walk) {
+ const char c = in[walk];
+ if (c == ' ') out.add_byte('+');
+ else if (pfc::char_is_ascii_alphanumeric(c) || c == '_') out.add_byte(c);
+ else out << "%" << pfc::format_hex((t_uint8)c, 2);
+ }
+}
+void urlEncodeAppend(pfc::string_base & out, const char * in) {
+ for(;;) {
+ const char c = *(in++);
+ if (c == 0) break;
+ else if (c == ' ') out.add_byte('+');
+ else if (pfc::char_is_ascii_alphanumeric(c) || c == '_') out.add_byte(c);
+ else out << "%" << pfc::format_hex((t_uint8)c, 2);
+ }
+}
+void urlEncode(pfc::string_base & out, const char * in) {
+ out.reset(); urlEncodeAppend(out, in);
+}
+
+unsigned char_to_dec(char c) {
+ if (c >= '0' && c <= '9') return (unsigned)(c - '0');
+ else throw exception_invalid_params();
+}
+
+unsigned char_to_hex(char c) {
+ if (c >= '0' && c <= '9') return (unsigned)(c - '0');
+ else if (c >= 'a' && c <= 'f') return (unsigned)(c - 'a' + 10);
+ else if (c >= 'A' && c <= 'F') return (unsigned)(c - 'A' + 10);
+ else throw exception_invalid_params();
+}
+
+
+} //namespace pfc
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/string.h b/Plugins/listeningto/players/foo_mlt/pfc/string.h index cf7ed22..e9c7ed0 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/string.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/string.h @@ -2,10 +2,39 @@ #define _PFC_STRING_H_
namespace pfc {
+ inline t_size _strParamLen(const char * str) {
+ return strlen(str);
+ }
+
+
+ struct string_part_ref {
+ const char * m_ptr;
+ t_size m_len;
+
+
+ static string_part_ref make(const char * ptr, t_size len) {
+ string_part_ref val = {ptr, len}; return val;
+ }
+
+ string_part_ref substring(t_size base) const {
+ PFC_ASSERT( base <= m_len );
+ return make(m_ptr + base, m_len - base);
+ }
+ string_part_ref substring(t_size base, t_size len) const {
+ PFC_ASSERT( base <= m_len && base + len <= m_len );
+ return make(m_ptr + base, len);
+ }
+ };
+
+ static string_part_ref string_part(const char * ptr, t_size len) {
+ string_part_ref val = {ptr, len}; return val;
+ }
+
class NOVTABLE string_receiver {
public:
- virtual void add_string(const char * p_string,t_size p_string_size = infinite) = 0;
+ virtual void add_string(const char * p_string,t_size p_string_size = ~0) = 0;
+ inline void add_string_(const char * str) {add_string(str, _strParamLen(str));}
void add_char(t_uint32 c);//adds unicode char to the string
void add_byte(char c) {add_string(&c,1);}
@@ -19,9 +48,9 @@ namespace pfc { bool is_path_separator(unsigned c);
bool is_path_bad_char(unsigned c);
- bool is_valid_utf8(const char * param,t_size max = infinite);
+ bool is_valid_utf8(const char * param,t_size max = ~0);
bool is_lower_ascii(const char * param);
- bool is_multiline(const char * p_string,t_size p_len = infinite);
+ bool is_multiline(const char * p_string,t_size p_len = ~0);
bool has_path_bad_chars(const char * param);
void recover_invalid_utf8(const char * src,char * out,unsigned replace);//out must be enough to hold strlen(char) + 1, or appropiately bigger if replace needs multiple chars
void convert_to_lower_ascii(const char * src,t_size max,char * out,char replace = '?');//out should be at least strlen(src)+1 long
@@ -39,74 +68,104 @@ namespace pfc { t_size string_find_first_ex(const char * p_string,t_size p_string_length,const char * p_tofind,t_size p_tofind_length,t_size p_start = 0); //returns infinite if not found
t_size string_find_last_ex(const char * p_string,t_size p_string_length,const char * p_tofind,t_size p_tofind_length,t_size p_start = ~0); //returns infinite if not found
+
+ t_size string_find_first_nc(const char * p_string,t_size p_string_length,char c,t_size p_start = 0); // lengths MUST be valid, no checks are performed (faster than the other flavour)
+ t_size string_find_first_nc(const char * p_string,t_size p_string_length,const char * p_tofind,t_size p_tofind_length,t_size p_start = 0); // lengths MUST be valid, no checks are performed (faster than the other falvour);
+
+
template<typename t_char>
t_size strlen_max_t(const t_char * ptr,t_size max) {
- if (ptr == NULL) return 0;
+ PFC_ASSERT( ptr != NULL || max == 0 );
t_size n = 0;
while(n<max && ptr[n] != 0) n++;
return n;
}
- inline t_size strlen_max(const char * ptr,t_size max) {return strlen_max_t(ptr,max);}
- inline t_size wcslen_max(const wchar_t * ptr,t_size max) {return strlen_max_t(ptr,max);}
+ inline t_size strlen_max(const char * ptr,t_size max) throw() {return strlen_max_t(ptr,max);}
+ inline t_size wcslen_max(const wchar_t * ptr,t_size max) throw() {return strlen_max_t(ptr,max);}
#ifdef _WINDOWS
inline t_size tcslen_max(const TCHAR * ptr,t_size max) {return strlen_max_t(ptr,max);}
#endif
- bool string_is_numeric(const char * p_string,t_size p_length = infinite);
- inline bool char_is_numeric(char p_char) {return p_char >= '0' && p_char <= '9';}
- inline bool char_is_ascii_alpha_upper(char p_char) {return p_char >= 'A' && p_char <= 'Z';}
- inline bool char_is_ascii_alpha_lower(char p_char) {return p_char >= 'a' && p_char <= 'z';}
- inline bool char_is_ascii_alpha(char p_char) {return char_is_ascii_alpha_lower(p_char) || char_is_ascii_alpha_upper(p_char);}
- inline bool char_is_ascii_alphanumeric(char p_char) {return char_is_ascii_alpha(p_char) || char_is_numeric(p_char);}
+ bool string_is_numeric(const char * p_string,t_size p_length = ~0) throw();
+ inline bool char_is_numeric(char p_char) throw() {return p_char >= '0' && p_char <= '9';}
+ inline bool char_is_hexnumeric(char p_char) throw() {return char_is_numeric(p_char) || (p_char >= 'a' && p_char <= 'f') || (p_char >= 'A' && p_char <= 'F');}
+ inline bool char_is_ascii_alpha_upper(char p_char) throw() {return p_char >= 'A' && p_char <= 'Z';}
+ inline bool char_is_ascii_alpha_lower(char p_char) throw() {return p_char >= 'a' && p_char <= 'z';}
+ inline bool char_is_ascii_alpha(char p_char) throw() {return char_is_ascii_alpha_lower(p_char) || char_is_ascii_alpha_upper(p_char);}
+ inline bool char_is_ascii_alphanumeric(char p_char) throw() {return char_is_ascii_alpha(p_char) || char_is_numeric(p_char);}
unsigned atoui_ex(const char * ptr,t_size max);
t_int64 atoi64_ex(const char * ptr,t_size max);
t_uint64 atoui64_ex(const char * ptr,t_size max);
+
+ //Throws exception_invalid_params on failure.
+ unsigned char_to_hex(char c);
+ unsigned char_to_dec(char c);
+
+ //Throws exception_invalid_params or exception_overflow on failure.
+ template<typename t_uint> t_uint atohex(const char * in, t_size inLen) {
+ t_uint ret = 0;
+ const t_uint guard = (t_uint)0xF << (sizeof(t_uint) * 8 - 4);
+ for(t_size walk = 0; walk < inLen; ++walk) {
+ if (ret & guard) throw exception_overflow();
+ ret = (ret << 4) | char_to_hex(in[walk]);
+ }
+ return ret;
+ }
+ template<typename t_uint> t_uint atodec(const char * in, t_size inLen) {
+ t_uint ret = 0;
+ for(t_size walk = 0; walk < inLen; ++walk) {
+ const t_uint prev = ret;
+ ret = (ret * 10) + char_to_dec(in[walk]);
+ if ((ret / 10) != prev) throw exception_overflow();
+ }
+ return ret;
+ }
- t_size strlen_utf8(const char * s,t_size num = ~0);//returns number of characters in utf8 string; num - no. of bytes (optional)
- t_size utf8_char_len(const char * s,t_size max = ~0);//returns size of utf8 character pointed by s, in bytes, 0 on error
- t_size utf8_char_len_from_header(char c);
- t_size utf8_chars_to_bytes(const char * string,t_size count);
+ t_size strlen_utf8(const char * s,t_size num = ~0) throw();//returns number of characters in utf8 string; num - no. of bytes (optional)
+ t_size utf8_char_len(const char * s,t_size max = ~0) throw();//returns size of utf8 character pointed by s, in bytes, 0 on error
+ t_size utf8_char_len_from_header(char c) throw();
+ t_size utf8_chars_to_bytes(const char * string,t_size count) throw();
t_size strcpy_utf8_truncate(const char * src,char * out,t_size maxbytes);
- t_size utf8_decode_char(const char * src,unsigned * out,t_size src_bytes = ~0);//returns length in bytes
- t_size utf8_encode_char(unsigned c,char * out);//returns used length in bytes, max 6
- t_size utf16_decode_char(const wchar_t * p_source,unsigned * p_out,t_size p_source_length = ~0);
- t_size utf16_encode_char(unsigned c,wchar_t * out);
+ t_size utf8_decode_char(const char * src,unsigned & out,t_size src_bytes) throw();//returns length in bytes
+ t_size utf8_decode_char(const char * src,unsigned & out) throw();//returns length in bytes
+ t_size utf8_encode_char(unsigned c,char * out) throw();//returns used length in bytes, max 6
+ t_size utf16_decode_char(const wchar_t * p_source,unsigned * p_out,t_size p_source_length = ~0) throw();
+ t_size utf16_encode_char(unsigned c,wchar_t * out) throw();
- t_size strstr_ex(const char * p_string,t_size p_string_len,const char * p_substring,t_size p_substring_len);
- int strcmp_partial(const char * p_string,const char * p_substring);
- int strcmp_partial_ex(const char * p_string,t_size p_string_length,const char * p_substring,t_size p_substring_length);
+ t_size strstr_ex(const char * p_string,t_size p_string_len,const char * p_substring,t_size p_substring_len) throw();
- t_size skip_utf8_chars(const char * ptr,t_size count);
+
+ t_size skip_utf8_chars(const char * ptr,t_size count) throw();
char * strdup_n(const char * src,t_size len);
- int stricmp_ascii(const char * s1,const char * s2);
- int stricmp_ascii_ex(const char * s1,t_size len1,const char * s2,t_size len2);
+ int stricmp_ascii(const char * s1,const char * s2) throw();
+ int stricmp_ascii_ex(const char * s1,t_size len1,const char * s2,t_size len2) throw();
- int strcmp_ex(const char* p1,t_size n1,const char* p2,t_size n2);
+ int strcmp_ex(const char* p1,t_size n1,const char* p2,t_size n2) throw();
unsigned utf8_get_char(const char * src);
- inline bool utf8_advance(const char * & var) {
+ inline bool utf8_advance(const char * & var) throw() {
t_size delta = utf8_char_len(var);
var += delta;
return delta>0;
}
- inline bool utf8_advance(char * & var) {
+ inline bool utf8_advance(char * & var) throw() {
t_size delta = utf8_char_len(var);
var += delta;
return delta>0;
}
- inline const char * utf8_char_next(const char * src) {return src + utf8_char_len(src);}
- inline char * utf8_char_next(char * src) {return src + utf8_char_len(src);}
+ inline const char * utf8_char_next(const char * src) throw() {return src + utf8_char_len(src);}
+ inline char * utf8_char_next(char * src) throw() {return src + utf8_char_len(src);}
class NOVTABLE string_base : public pfc::string_receiver {
public:
@@ -118,6 +177,10 @@ namespace pfc { virtual char * lock_buffer(t_size p_requested_length) = 0;
virtual void unlock_buffer() = 0;
+ void set_string_(const char * str) {set_string(str, _strParamLen(str));}
+
+ inline const char * toString() const {return get_ptr();}
+
//! For compatibility with old conventions.
inline t_size length() const {return get_length();}
@@ -127,25 +190,38 @@ namespace pfc { void skip_trailing_char(unsigned c = ' ');
- bool is_valid_utf8() {return pfc::is_valid_utf8(get_ptr());}
+ bool is_valid_utf8() const {return pfc::is_valid_utf8(get_ptr());}
void convert_to_lower_ascii(const char * src,char replace = '?');
- inline const string_base & operator= (const char * src) {set_string(src);return *this;}
- inline const string_base & operator+= (const char * src) {add_string(src);return *this;}
+ inline const string_base & operator= (const char * src) {set_string_(src);return *this;}
+ inline const string_base & operator+= (const char * src) {add_string_(src);return *this;}
inline const string_base & operator= (const string_base & src) {set_string(src);return *this;}
inline const string_base & operator+= (const string_base & src) {add_string(src);return *this;}
+ bool operator==(const string_base & p_other) const {return strcmp(*this,p_other) == 0;}
+ bool operator!=(const string_base & p_other) const {return strcmp(*this,p_other) != 0;}
+ bool operator>(const string_base & p_other) const {return strcmp(*this,p_other) > 0;}
+ bool operator<(const string_base & p_other) const {return strcmp(*this,p_other) < 0;}
+ bool operator>=(const string_base & p_other) const {return strcmp(*this,p_other) >= 0;}
+ bool operator<=(const string_base & p_other) const {return strcmp(*this,p_other) <= 0;}
+
inline operator const char * () const {return get_ptr();}
t_size scan_filename() const {return pfc::scan_filename(get_ptr());}
- t_size find_first(char p_char,t_size p_start = 0) {return pfc::string_find_first(get_ptr(),p_char,p_start);}
- t_size find_last(char p_char,t_size p_start = ~0) {return pfc::string_find_last(get_ptr(),p_char,p_start);}
- t_size find_first(const char * p_string,t_size p_start = 0) {return pfc::string_find_first(get_ptr(),p_string,p_start);}
- t_size find_last(const char * p_string,t_size p_start = ~0) {return pfc::string_find_last(get_ptr(),p_string,p_start);}
+ t_size find_first(char p_char,t_size p_start = 0) const {return pfc::string_find_first(get_ptr(),p_char,p_start);}
+ t_size find_last(char p_char,t_size p_start = ~0) const {return pfc::string_find_last(get_ptr(),p_char,p_start);}
+ t_size find_first(const char * p_string,t_size p_start = 0) const {return pfc::string_find_first(get_ptr(),p_string,p_start);}
+ t_size find_last(const char * p_string,t_size p_start = ~0) const {return pfc::string_find_last(get_ptr(),p_string,p_start);}
void fix_dir_separator(char p_char);
+ bool ends_with(char c);
+
+ bool truncate_eol(t_size start = 0);
+ bool fix_eol(const char * append = " (...)",t_size start = 0);
+ bool limit_length(t_size length_in_chars,const char * append = " (...)");
+
protected:
string_base() {}
~string_base() {}
@@ -192,7 +268,7 @@ namespace pfc { t_size get_length() const {return m_length;}
private:
inline void init() {
- pfc::static_assert<(max_length>1)>();
+ PFC_STATIC_ASSERT(max_length>1);
m_length = 0; m_data[0] = 0;
}
t_size m_length;
@@ -207,39 +283,67 @@ namespace pfc { pfc::array_t<char,t_alloc> m_data;
t_size used;
- inline void makespace(t_size s)
- {
- t_size old_size = m_data.get_size();
- if (old_size < s)
- m_data.set_size(s+16);
- else if (old_size > s + 32)
+ inline void makespace(t_size s) {
+ if (t_alloc<char>::alloc_prioritizes_speed) {
m_data.set_size(s);
+ } else {
+ const t_size old_size = m_data.get_size();
+ if (old_size < s)
+ m_data.set_size(s + 16);
+ else if (old_size > s + 32)
+ m_data.set_size(s);
+ }
}
- inline const char * __get_ptr() const throw() {return used > 0 ? m_data.get_ptr() : "";}
+ inline const char * _get_ptr() const throw() {return used > 0 ? m_data.get_ptr() : "";}
public:
- inline const t_self & operator= (const char * src) {set_string(src);return *this;}
- inline const t_self & operator+= (const char * src) {add_string(src);return *this;}
+ inline void set_string_(const char * str) {set_string_nc(str, strlen(str));}
+ inline void add_string_(const char * str) {add_string_nc(str, strlen(str));}
+ void set_string_nc(const char * ptr, t_size len) {
+ PFC_ASSERT(! m_data.is_owned(ptr) );
+ PFC_ASSERT( strlen_max(ptr, len) == len );
+ makespace(len+1);
+ pfc::memcpy_t(m_data.get_ptr(),ptr,len);
+ used=len;
+ m_data[used]=0;
+ }
+ void add_string_nc(const char * ptr, t_size len) {
+ PFC_ASSERT(! m_data.is_owned(ptr) );
+ PFC_ASSERT( strlen_max(ptr, len) == len );
+ makespace(used+len+1);
+ pfc::memcpy_t(m_data.get_ptr() + used,ptr,len);
+ used+=len;
+ m_data[used]=0;
+ }
+ inline const t_self & operator= (const char * src) {set_string_(src);return *this;}
+ inline const t_self & operator+= (const char * src) {add_string_(src);return *this;}
inline const t_self & operator= (const string_base & src) {set_string(src);return *this;}
inline const t_self & operator+= (const string_base & src) {add_string(src);return *this;}
inline const t_self & operator= (const t_self & src) {set_string(src);return *this;}
inline const t_self & operator+= (const t_self & src) {add_string(src);return *this;}
+
+ inline const t_self & operator= (string_part_ref src) {set_string(src);return *this;}
+ inline const t_self & operator+= (string_part_ref src) {add_string(src);return *this;}
- inline operator const char * () const throw() {return __get_ptr();}
+ inline operator const char * () const throw() {return _get_ptr();}
string8_t() : used(0) {}
- string8_t(const char * p_string) : used(0) {set_string(p_string);}
+ string8_t(const char * p_string) : used(0) {set_string_(p_string);}
string8_t(const char * p_string,t_size p_length) : used(0) {set_string(p_string,p_length);}
string8_t(const t_self & p_string) : used(0) {set_string(p_string);}
string8_t(const string_base & p_string) : used(0) {set_string(p_string);}
+ string8_t(string_part_ref ref) : used(0) {set_string(ref);}
void prealloc(t_size p_size) {m_data.prealloc(p_size+1);}
- const char * get_ptr() const throw() {return __get_ptr();}
+ const char * get_ptr() const throw() {return _get_ptr();}
void add_string(const char * p_string,t_size p_length = ~0);
void set_string(const char * p_string,t_size p_length = ~0);
+
+ void set_string(string_part_ref ref) {set_string_nc(ref.m_ptr, ref.m_len);}
+ void add_string(string_part_ref ref) {add_string_nc(ref.m_ptr, ref.m_len);}
void truncate(t_size len)
{
@@ -254,25 +358,25 @@ namespace pfc { t_size replace_nontext_chars(char p_replace = '_');
t_size replace_char(unsigned c1,unsigned c2,t_size start = 0);
t_size replace_byte(char c1,char c2,t_size start = 0);
- void fix_filename_chars(char def = '_',char leave=0);//replace "bad" characters, leave can be used to keep eg. path separators
+ void fix_filename_chars(char def = '_',char leave=0);//replace "bad" characters, leave parameter can be used to keep eg. path separators
void remove_chars(t_size first,t_size count); //slow
void insert_chars(t_size first,const char * src, t_size count);//slow
void insert_chars(t_size first,const char * src);
- bool truncate_eol(t_size start = 0);
- bool fix_eol(const char * append = " (...)",t_size start = 0);
- bool limit_length(t_size length_in_chars,const char * append = " (...)");
//for string_buffer class
char * lock_buffer(t_size n)
{
+ if (n + 1 == 0) throw exception_overflow();
makespace(n+1);
pfc::memset_t(m_data,(char)0);
return m_data.get_ptr();;
}
void unlock_buffer() {
- used=strlen(m_data.get_ptr());
- makespace(used+1);
+ if (m_data.get_size() > 0) {
+ used=strlen(m_data.get_ptr());
+ makespace(used+1);
+ }
}
void force_reset() {used=0;m_data.force_reset();}
@@ -311,8 +415,9 @@ namespace pfc { string_base & m_owner;
char * m_buffer;
public:
- explicit string_buffer(string_base & p_string,t_size p_requeted_length) : m_owner(p_string) {m_buffer = m_owner.lock_buffer(p_requeted_length);}
+ explicit string_buffer(string_base & p_string,t_size p_requested_length) : m_owner(p_string) {m_buffer = m_owner.lock_buffer(p_requested_length);}
~string_buffer() {m_owner.unlock_buffer();}
+ char * get_ptr() {return m_buffer;}
operator char* () {return m_buffer;}
};
@@ -368,6 +473,7 @@ namespace pfc { inline const char * get_ptr() const {return buffer;}
inline t_size length() const {return strlen(buffer);}
inline operator const char * () const {return buffer;}
+ inline const char * toString() const {return buffer;}
explicit string_extension(const char * src);
};
@@ -391,7 +497,7 @@ namespace pfc { };
void float_to_string(char * out,t_size out_max,double val,unsigned precision,bool force_sign = false);//doesnt add E+X etc, has internal range limits, useful for storing float numbers as strings without having to bother with international coma/dot settings BS
- double string_to_float(const char * src,t_size len = infinite);
+ double string_to_float(const char * src,t_size len = ~0);
template<>
inline void swap_t(string8 & p_item1,string8 & p_item2)
@@ -402,10 +508,11 @@ namespace pfc { class format_float
{
public:
- format_float(double p_val,unsigned p_width,unsigned p_prec);
+ format_float(double p_val,unsigned p_width = 0,unsigned p_prec = 7);
format_float(const format_float & p_source) {*this = p_source;}
inline const char * get_ptr() const {return m_buffer.get_ptr();}
+ inline const char * toString() const {return m_buffer.get_ptr();}
inline operator const char*() const {return m_buffer.get_ptr();}
private:
string8 m_buffer;
@@ -417,18 +524,19 @@ namespace pfc { format_int(t_int64 p_val,unsigned p_width = 0,unsigned p_base = 10);
format_int(const format_int & p_source) {*this = p_source;}
inline const char * get_ptr() const {return m_buffer;}
+ inline const char * toString() const {return m_buffer;}
inline operator const char*() const {return m_buffer;}
private:
char m_buffer[64];
};
- class format_uint
- {
+ class format_uint {
public:
format_uint(t_uint64 p_val,unsigned p_width = 0,unsigned p_base = 10);
format_uint(const format_uint & p_source) {*this = p_source;}
inline const char * get_ptr() const {return m_buffer;}
+ inline const char * toString() const {return m_buffer;}
inline operator const char*() const {return m_buffer;}
private:
char m_buffer[64];
@@ -440,6 +548,7 @@ namespace pfc { format_hex(t_uint64 p_val,unsigned p_width = 0);
format_hex(const format_hex & p_source) {*this = p_source;}
inline const char * get_ptr() const {return m_buffer;}
+ inline const char * toString() const {return m_buffer;}
inline operator const char*() const {return m_buffer;}
private:
char m_buffer[17];
@@ -452,13 +561,32 @@ namespace pfc { format_hex_lowercase(const format_hex_lowercase & p_source) {*this = p_source;}
inline const char * get_ptr() const {return m_buffer;}
inline operator const char*() const {return m_buffer;}
+ inline const char * toString() const {return m_buffer;}
private:
char m_buffer[17];
};
+
+ char format_hex_char_lowercase(unsigned p_val);
+ char format_hex_char(unsigned p_val);
typedef string8_fastalloc string_formatter;
+ class format_hexdump_ex {
+ public:
+ template<typename TWord> format_hexdump_ex(const TWord * buffer, t_size bufLen, const char * spacing = " ") {
+ for(t_size n = 0; n < bufLen; n++) {
+ if (n > 0 && spacing != NULL) m_formatter << spacing;
+ m_formatter << format_hex(buffer[n],sizeof(TWord) * 2);
+ }
+ }
+ inline const char * get_ptr() const {return m_formatter;}
+ inline operator const char * () const {return m_formatter;}
+ inline const char * toString() const {return m_formatter;}
+ private:
+ string_formatter m_formatter;
+ };
+
class format_hexdump
{
public:
@@ -466,7 +594,7 @@ namespace pfc { inline const char * get_ptr() const {return m_formatter;}
inline operator const char * () const {return m_formatter;}
-
+ inline const char * toString() const {return m_formatter;}
private:
string_formatter m_formatter;
};
@@ -478,6 +606,7 @@ namespace pfc { inline const char * get_ptr() const {return m_formatter;}
inline operator const char * () const {return m_formatter;}
+ inline const char * toString() const {return m_formatter;}
private:
string_formatter m_formatter;
@@ -489,6 +618,7 @@ namespace pfc { format_fixedpoint(t_int64 p_val,unsigned p_point);
inline const char * get_ptr() const {return m_buffer;}
inline operator const char*() const {return m_buffer;}
+ inline const char * toString() const {return m_buffer;}
private:
string_formatter m_buffer;
};
@@ -498,6 +628,7 @@ namespace pfc { format_char(char p_char) {m_buffer[0] = p_char; m_buffer[1] = 0;}
inline const char * get_ptr() const {return m_buffer;}
inline operator const char*() const {return m_buffer;}
+ inline const char * toString() const {return m_buffer;}
private:
char m_buffer[2];
};
@@ -505,12 +636,12 @@ namespace pfc { template<typename t_stringbuffer = pfc::string8_fastalloc>
class format_pad_left {
public:
- format_pad_left(t_size p_chars,t_uint32 p_padding /* = ' ' */,const char * p_string,t_size p_string_length = infinite) {
+ format_pad_left(t_size p_chars,t_uint32 p_padding /* = ' ' */,const char * p_string,t_size p_string_length = ~0) {
t_size source_len = 0, source_walk = 0;
while(source_walk < p_string_length && source_len < p_chars) {
unsigned dummy;
- t_size delta = pfc::utf8_decode_char(p_string + source_walk, &dummy, p_string_length - source_walk);
+ t_size delta = pfc::utf8_decode_char(p_string + source_walk, dummy, p_string_length - source_walk);
if (delta == 0) break;
source_len++;
source_walk += delta;
@@ -521,6 +652,7 @@ namespace pfc { }
inline const char * get_ptr() const {return m_buffer;}
inline operator const char*() const {return m_buffer;}
+ inline const char * toString() const {return m_buffer;}
private:
t_stringbuffer m_buffer;
};
@@ -528,12 +660,12 @@ namespace pfc { template<typename t_stringbuffer = pfc::string8_fastalloc>
class format_pad_right {
public:
- format_pad_right(t_size p_chars,t_uint32 p_padding /* = ' ' */,const char * p_string,t_size p_string_length = infinite) {
+ format_pad_right(t_size p_chars,t_uint32 p_padding /* = ' ' */,const char * p_string,t_size p_string_length = ~0) {
t_size source_len = 0, source_walk = 0;
while(source_walk < p_string_length && source_len < p_chars) {
unsigned dummy;
- t_size delta = pfc::utf8_decode_char(p_string + source_walk, &dummy, p_string_length - source_walk);
+ t_size delta = pfc::utf8_decode_char(p_string + source_walk, dummy, p_string_length - source_walk);
if (delta == 0) break;
source_len++;
source_walk += delta;
@@ -544,21 +676,45 @@ namespace pfc { }
inline const char * get_ptr() const {return m_buffer;}
inline operator const char*() const {return m_buffer;}
+ inline const char * toString() const {return m_buffer;}
private:
t_stringbuffer m_buffer;
};
-}
-inline pfc::string_base & operator<<(pfc::string_base & p_fmt,const char * p_source) {p_fmt.add_string(p_source); return p_fmt;}
-inline pfc::string_base & operator<<(pfc::string_base & p_fmt,t_int32 p_val) {return p_fmt << pfc::format_int(p_val);}
-inline pfc::string_base & operator<<(pfc::string_base & p_fmt,t_uint32 p_val) {return p_fmt << pfc::format_uint(p_val);}
-inline pfc::string_base & operator<<(pfc::string_base & p_fmt,t_int64 p_val) {return p_fmt << pfc::format_int(p_val);}
-inline pfc::string_base & operator<<(pfc::string_base & p_fmt,t_uint64 p_val) {return p_fmt << pfc::format_uint(p_val);}
-inline pfc::string_base & operator<<(pfc::string_base & p_fmt,double p_val) {return p_fmt << pfc::format_float(p_val,0,7);}
+ class format_array : public string_formatter {
+ public:
+ template<typename t_source> format_array(t_source const & source, const char * separator = ", ") {
+ const t_size count = array_size_t(source);
+ if (count > 0) {
+ *this << source[0];
+ for(t_size walk = 1; walk < count; ++walk) *this << separator << source[walk];
+ }
+ }
+ };
+
-inline pfc::string_base & operator<<(pfc::string_base & p_fmt,std::exception const & p_exception) {return p_fmt << p_exception.what();}
+ class format_file_size_short : public string_formatter {
+ public:
+ format_file_size_short(t_uint64 size);
+ t_uint64 get_used_scale() const {return m_scale;}
+ private:
+ t_uint64 m_scale;
+ };
+
+}
+inline pfc::string_base & operator<<(pfc::string_base & p_fmt,const char * p_source) {p_fmt.add_string_(p_source); return p_fmt;}
+inline pfc::string_base & operator<<(pfc::string_base & p_fmt,pfc::string_part_ref source) {p_fmt.add_string(source.m_ptr, source.m_len); return p_fmt;}
+inline pfc::string_base & operator<<(pfc::string_base & p_fmt,t_int32 p_val) {p_fmt.add_string(pfc::format_int(p_val)); return p_fmt;}
+inline pfc::string_base & operator<<(pfc::string_base & p_fmt,t_uint32 p_val) {p_fmt.add_string(pfc::format_uint(p_val)); return p_fmt;}
+inline pfc::string_base & operator<<(pfc::string_base & p_fmt,t_int64 p_val) {p_fmt.add_string(pfc::format_int(p_val)); return p_fmt;}
+inline pfc::string_base & operator<<(pfc::string_base & p_fmt,t_uint64 p_val) {p_fmt.add_string(pfc::format_uint(p_val)); return p_fmt;}
+inline pfc::string_base & operator<<(pfc::string_base & p_fmt,double p_val) {p_fmt.add_string(pfc::format_float(p_val)); return p_fmt;}
+inline pfc::string_base & operator<<(pfc::string_base & p_fmt,std::exception const & p_exception) {p_fmt.add_string(p_exception.what()); return p_fmt;}
+template<template<typename> class t_alloc> inline pfc::string8_t<t_alloc> & operator<< (pfc::string8_t<t_alloc> & str, const char * src) {str.add_string_(src); return str;}
+template<template<typename> class t_alloc> inline pfc::string8_t<t_alloc> & operator<< (pfc::string8_t<t_alloc> & str, pfc::string_base const & src) {str.add_string(src); return str;}
+template<template<typename> class t_alloc> inline pfc::string8_t<t_alloc> & operator<< (pfc::string8_t<t_alloc> & str, pfc::string_part_ref src) {str.add_string(src); return str;}
@@ -569,16 +725,16 @@ namespace pfc { private:
typedef string_simple_t<t_char> t_self;
public:
- t_size length(t_size p_limit = infinite) const {return pfc::strlen_t(get_ptr(),infinite);}
+ t_size length(t_size p_limit = ~0) const {return pfc::strlen_t(get_ptr(),p_limit);}
bool is_empty() const {return length(1) == 0;}
- void set_string(const t_char * p_source,t_size p_length = infinite) {
+ void set_string(const t_char * p_source,t_size p_length = ~0) {
t_size length = pfc::strlen_t(p_source,p_length);
m_buffer.set_size(length + 1);
pfc::memcpy_t(m_buffer.get_ptr(),p_source,length);
m_buffer[length] = 0;
}
string_simple_t() {}
- string_simple_t(const t_char * p_source,t_size p_length = infinite) {set_string(p_source,p_length);}
+ string_simple_t(const t_char * p_source,t_size p_length = ~0) {set_string(p_source,p_length);}
const t_self & operator=(const t_char * p_source) {set_string(p_source);return *this;}
operator const t_char* () const {return get_ptr();}
const t_char * get_ptr() const {return m_buffer.get_size() > 0 ? m_buffer.get_ptr() : pfc::empty_string_t<t_char>();}
@@ -593,11 +749,10 @@ namespace pfc { namespace pfc {
- //for tree/map classes
-
class comparator_strcmp {
public:
inline static int compare(const char * p_item1,const char * p_item2) {return strcmp(p_item1,p_item2);}
+ inline static int compare(const wchar_t * item1, const wchar_t * item2) {return wcscmp(item1, item2);}
};
class comparator_stricmp_ascii {
@@ -605,6 +760,230 @@ namespace pfc { inline static int compare(const char * p_item1,const char * p_item2) {return pfc::stricmp_ascii(p_item1,p_item2);}
};
+
+
+ template<typename t_source> static void stringCombine(pfc::string_base & out, t_source const & in, const char * separator, const char * separatorLast) {
+ out.reset();
+ for(t_source::const_iterator walk = in.first(); walk.is_valid(); ++walk) {
+ if (!out.is_empty()) {
+ if (walk == in.last()) out << separatorLast;
+ else out << separator;
+ }
+ out << stringToPtr(*walk);
+ }
+ }
+
+ template<typename t_output, typename t_splitCheck>
+ void splitStringEx(t_output & p_output, const t_splitCheck & p_check, const char * p_string, t_size p_stringLen = ~0) {
+ t_size walk = 0, splitBase = 0;
+ const t_size max = strlen_max(p_string,p_stringLen);
+ for(;walk < max;) {
+ t_size delta = p_check(p_string + walk,max - walk);
+ if (delta > 0) {
+ if (walk > splitBase) p_output(p_string + splitBase, walk - splitBase);
+ splitBase = walk + delta;
+ } else {
+ delta = utf8_char_len(p_string + walk, max - walk);
+ if (delta == 0) break;
+ }
+ walk += delta;
+ }
+ if (walk > splitBase) p_output(p_string + splitBase, walk - splitBase);
+ }
+
+ class __splitStringSimple_calculateSubstringCount {
+ public:
+ __splitStringSimple_calculateSubstringCount() : m_count() {}
+ void operator() (const char *, t_size) {++m_count;}
+ t_size get() const {return m_count;}
+ private:
+ t_size m_count;
+ };
+
+ template<typename t_param> class _splitStringSimple_check;
+
+ template<> class _splitStringSimple_check<const char*> {
+ public:
+ _splitStringSimple_check(const char * p_chars) {
+ m_chars.set_size(strlen_utf8(p_chars));
+ for(t_size walk = 0, ptr = 0; walk < m_chars.get_size(); ++walk) {
+ ptr += utf8_decode_char(p_chars + ptr,m_chars[walk]);
+ }
+ }
+ t_size operator()(const char * p_string, t_size p_stringLen) const {
+ t_uint32 c;
+ t_size delta = utf8_decode_char(p_string, c, p_stringLen);
+ if (delta > 0) {
+ for(t_size walk = 0; walk < m_chars.get_size(); ++walk) {
+ if (m_chars[walk] == c) return delta;
+ }
+ }
+ return 0;
+ }
+ private:
+ array_t<t_uint32> m_chars;
+ };
+ template<> class _splitStringSimple_check<char> {
+ public:
+ _splitStringSimple_check(char c) : m_char(c) {}
+ t_size operator()(const char * str, t_size len) const {
+ PFC_ASSERT( len > 0 );
+ if (*str == m_char) return 1;
+ else return 0;
+ }
+ private:
+ const char m_char;
+ };
+ template<typename t_array>
+ class __splitStringSimple_arrayWrapper {
+ public:
+ __splitStringSimple_arrayWrapper(t_array & p_array) : m_walk(), m_array(p_array) {}
+ void operator()(const char * p_string, t_size p_stringLen) {
+ m_array[m_walk++] = string_part(p_string,p_stringLen);
+ }
+ private:
+ t_size m_walk;
+ t_array & m_array;
+ };
+ template<typename t_list>
+ class __splitStringSimple_listWrapper {
+ public:
+ __splitStringSimple_listWrapper(t_list & p_list) : m_list(p_list) {}
+ void operator()(const char * p_string, t_size p_stringLen) {
+ m_list += string_part(p_string, p_stringLen);
+ }
+ private:
+ t_list & m_list;
+ };
+
+ template<typename t_array, typename t_split>
+ void splitStringSimple_toArray(t_array & p_output, t_split p_split, const char * p_string, t_size p_stringLen = ~0) {
+ _splitStringSimple_check<t_split> check(p_split);
+
+ {
+ __splitStringSimple_calculateSubstringCount wrapper;
+ splitStringEx(wrapper,check,p_string,p_stringLen);
+ p_output.set_size(wrapper.get());
+ }
+
+ {
+ __splitStringSimple_arrayWrapper<t_array> wrapper(p_output);
+ splitStringEx(wrapper,check,p_string,p_stringLen);
+ }
+ }
+ template<typename t_list, typename t_split>
+ void splitStringSimple_toList(t_list & p_output, t_split p_split, const char * p_string, t_size p_stringLen = ~0) {
+ _splitStringSimple_check<t_split> check(p_split);
+
+ __splitStringSimple_listWrapper<t_list> wrapper(p_output);
+ splitStringEx(wrapper,check,p_string,p_stringLen);
+ }
+
+ template<typename t_out> void splitStringByLines(t_out & out, const char * str) {
+ for(;;) {
+ const char * next = strchr(str, '\n');
+ if (next == NULL) {
+ out += string_part(str, strlen(str)); break;
+ }
+ const char * walk = next;
+ while(walk > str && walk[-1] == '\r') --walk;
+ out += string_part(str, walk - str);
+ str = next + 1;
+ }
+ }
+ template<typename t_out> void splitStringByChar(t_out & out, const char * str, char c) {
+ for(;;) {
+ const char * next = strchr(str, c);
+ if (next == NULL) {
+ out += string_part(str, strlen(str)); break;
+ }
+ out += string_part(str, next - str);
+ str = next + 1;
+ }
+ }
+
+ void stringToUpperAppend(string_base & p_out, const char * p_source, t_size p_sourceLen);
+ void stringToLowerAppend(string_base & p_out, const char * p_source, t_size p_sourceLen);
+ int stringCompareCaseInsensitive(const char * s1, const char * s2);
+ int stringCompareCaseInsensitiveEx(string_part_ref s1, string_part_ref s2);
+ t_uint32 charLower(t_uint32 param);
+ t_uint32 charUpper(t_uint32 param);
+
+ template<typename T> static const char * stringToPtr(T const& val) {return val.get_ptr();}
+ static const char * stringToPtr(const char* val) {return val;}
+
+ template<typename T> static string_part_ref stringToRef(T const & val) {return string_part(val.get_ptr(), val.length());}
+ static string_part_ref stringToRef(string_part_ref val) {return val;}
+ static string_part_ref stringToRef(const char * val) {return string_part(val, strlen(val));}
+
+
+
+
+ class string_base_ref : public string_base {
+ public:
+ string_base_ref(const char * ptr) : m_ptr(ptr), m_len(strlen(ptr)) {}
+ const char * get_ptr() const {return m_ptr;}
+ t_size get_length() const {return m_len;}
+ private:
+ void add_string(const char * p_string,t_size p_length = ~0) {throw pfc::exception_not_implemented();}
+ void set_string(const char * p_string,t_size p_length = ~0) {throw pfc::exception_not_implemented();}
+ void truncate(t_size len) {throw pfc::exception_not_implemented();}
+ char * lock_buffer(t_size p_requested_length) {throw pfc::exception_not_implemented();}
+ void unlock_buffer() {throw pfc::exception_not_implemented();}
+ private:
+ const char * const m_ptr;
+ t_size const m_len;
+ };
+
+ //! Writes a string to a fixed-size buffer. Truncates the string if necessary. Always writes a null terminator.
+ template<typename TChar, t_size len, typename TSource>
+ void stringToBuffer(TChar (&buffer)[len], const TSource & source) {
+ PFC_STATIC_ASSERT(len>0);
+ t_size walk;
+ for(walk = 0; walk < len - 1 && source[walk] != 0; ++walk) {
+ buffer[walk] = source[walk];
+ }
+ buffer[walk] = 0;
+ }
+
+ //! Same as stringToBuffer() but throws exception_overflow() if the string could not be fully written, including null terminator.
+ template<typename TChar, t_size len, typename TSource>
+ void stringToBufferGuarded(TChar (&buffer)[len], const TSource & source) {
+ t_size walk;
+ for(walk = 0; source[walk] != 0; ++walk) {
+ if (walk >= len) throw exception_overflow();
+ buffer[walk] = source[walk];
+ }
+ if (walk >= len) throw exception_overflow();
+ buffer[walk] = 0;
+ }
+
+
+ template<typename t_char> int _strcmp_partial_ex(const t_char * p_string,t_size p_string_length,const t_char * p_substring,t_size p_substring_length) throw() {
+ for(t_size walk=0;walk<p_substring_length;walk++) {
+ t_char stringchar = (walk>=p_string_length ? 0 : p_string[walk]);
+ t_char substringchar = p_substring[walk];
+ int result = compare_t(stringchar,substringchar);
+ if (result != 0) return result;
+ }
+ return 0;
+ }
+
+ template<typename t_char> int strcmp_partial_ex_t(const t_char * p_string,t_size p_string_length,const t_char * p_substring,t_size p_substring_length) throw() {
+ p_string_length = strlen_max_t(p_string,p_string_length); p_substring_length = strlen_max_t(p_substring,p_substring_length);
+ return _strcmp_partial_ex(p_string,p_string_length,p_substring,p_substring_length);
+ }
+
+ template<typename t_char>
+ int strcmp_partial_t(const t_char * p_string,const t_char * p_substring) throw() {return strcmp_partial_ex_t(p_string,~0,p_substring,~0);}
+
+ static int strcmp_partial_ex(const char * str, t_size strLen, const char * substr, t_size substrLen) throw() {return strcmp_partial_ex(str, strLen, substr, substrLen); }
+ static int strcmp_partial(const char * str, const char * substr) throw() {return strcmp_partial_t(str, substr); }
+
+
+ void urlEncodeAppendRaw(pfc::string_base & out, const char * in, t_size inSize);
+ void urlEncodeAppend(pfc::string_base & out, const char * in);
+ void urlEncode(pfc::string_base & out, const char * in);
}
-#endif //_PFC_STRING_H_
\ No newline at end of file +#endif //_PFC_STRING_H_
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/string8_impl.h b/Plugins/listeningto/players/foo_mlt/pfc/string8_impl.h index c020ff9..a738b27 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/string8_impl.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/string8_impl.h @@ -3,28 +3,21 @@ namespace pfc { template<template<typename> class t_alloc>
void string8_t<t_alloc>::add_string(const char * ptr,t_size len)
{
- if (len > 0 && ptr >= m_data.get_ptr() && ptr <= m_data.get_ptr() + m_data.get_size()) {
+ if (m_data.is_owned(ptr)) {
add_string(string8(ptr,len));
} else {
len = strlen_max(ptr,len);
- makespace(used+len+1);
- pfc::memcpy_t(m_data.get_ptr() + used,ptr,len);
- used+=len;
- m_data[used]=0;
- true;
+ add_string_nc(ptr, len);
}
}
template<template<typename> class t_alloc>
void string8_t<t_alloc>::set_string(const char * ptr,t_size len) {
- if (len > 0 && ptr >= m_data.get_ptr() && ptr < m_data.get_ptr() + m_data.get_size()) {
- set_string(string8(ptr,len));
+ if (m_data.is_owned(ptr)) {
+ set_string_(string8(ptr,len));
} else {
len = strlen_max(ptr,len);
- makespace(len+1);
- pfc::memcpy_t(m_data.get_ptr(),ptr,len);
- used=len;
- m_data[used]=0;
+ set_string_nc(ptr, len);
}
}
@@ -36,7 +29,7 @@ void string8_t<t_alloc>::set_char(unsigned offset,char c) }
template<template<typename> class t_alloc>
-void string8_t<t_alloc>::fix_filename_chars(char def,char leave)//replace "bad" characters, leave can be used to keep eg. path separators
+void string8_t<t_alloc>::fix_filename_chars(char def,char leave)//replace "bad" characters, leave parameter can be used to keep eg. path separators
{
t_size n;
for(n=0;n<used;n++)
@@ -76,46 +69,6 @@ void string8_t<t_alloc>::insert_chars(t_size first,const char * src, t_size coun template<template<typename> class t_alloc>
void string8_t<t_alloc>::insert_chars(t_size first,const char * src) {insert_chars(first,src,strlen(src));}
-template<template<typename> class t_alloc>
-bool string8_t<t_alloc>::truncate_eol(t_size start)
-{
- t_size n;
- const char * ptr = m_data.get_ptr() + start;
- for(n=start;n<used;n++)
- {
- if (*ptr==10 || *ptr==13)
- {
- truncate(n);
- return true;
- }
- ptr++;
- }
- return false;
-}
-
-template<template<typename> class t_alloc>
-bool string8_t<t_alloc>::fix_eol(const char * append,t_size start)
-{
- bool rv = truncate_eol(start);
- if (rv) add_string(append);
- return rv;
-}
-
-
-template<template<typename> class t_alloc>
-bool string8_t<t_alloc>::limit_length(t_size length_in_chars,const char * append)
-{
- bool rv = false;
- const char * base = get_ptr(), * ptr = base;
- while(length_in_chars && utf8_advance(ptr)) length_in_chars--;
- if (length_in_chars==0)
- {
- truncate(ptr-base);
- add_string(append);
- rv = true;
- }
- return rv;
-}
template<template<typename> class t_alloc>
t_size string8_t<t_alloc>::replace_nontext_chars(char p_replace)
@@ -152,7 +105,7 @@ t_size string8_t<t_alloc>::replace_char(unsigned c1,unsigned c2,t_size start) while(*ptr)
{
unsigned test;
- t_size delta = utf8_decode_char(ptr,&test);
+ t_size delta = utf8_decode_char(ptr,test);
if (delta==0 || test==0) break;
if (test == c1) {test = c2;rv++;}
add_char(test);
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/stringNew.cpp b/Plugins/listeningto/players/foo_mlt/pfc/stringNew.cpp new file mode 100644 index 0000000..f6652ee --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/stringNew.cpp @@ -0,0 +1,82 @@ +#include "pfc.h"
+
+namespace pfc {
+
+t_size string::indexOf(char c,t_size base) const {
+ return pfc::string_find_first(ptr(),c,base);
+}
+t_size string::lastIndexOf(char c,t_size base) const {
+ return pfc::string_find_last(ptr(),c,base);
+}
+t_size string::indexOf(stringp s,t_size base) const {
+ return pfc::string_find_first(ptr(),s.ptr(),base);
+}
+t_size string::lastIndexOf(stringp s,t_size base) const {
+ return pfc::string_find_last(ptr(),s.ptr(),base);
+}
+t_size string::indexOfAnyChar(stringp _s,t_size base) const {
+ string s ( _s );
+ const t_size len = length();
+ const char* content = ptr();
+ for(t_size walk = 0; walk < len; ++walk) {
+ if (s.contains(content[walk])) return walk;
+ }
+ return ~0;
+}
+t_size string::lastIndexOfAnyChar(stringp _s,t_size base) const {
+ string s ( _s );
+ const char* content = ptr();
+ for(t_size _walk = length(); _walk > 0; --_walk) {
+ const t_size walk = _walk-1;
+ if (s.contains(content[walk])) return walk;
+ }
+ return ~0;
+}
+bool string::startsWith(char c) const {
+ return (*this)[0] == c;
+}
+bool string::startsWith(string s) const {
+ const char * walk = ptr();
+ const char * subWalk = s.ptr();
+ for(;;) {
+ if (*subWalk == 0) return true;
+ if (*walk != *subWalk) return false;
+ walk++; subWalk++;
+ }
+}
+bool string::endsWith(char c) const {
+ const t_size len = length();
+ if (len == 0) return false;
+ return ptr()[len-1] == c;
+}
+bool string::endsWith(string s) const {
+ const t_size len = length(), subLen = s.length();
+ if (subLen > len) return false;
+ return subString(len - subLen) == s;
+}
+
+char string::firstChar() const {
+ return (*this)[0];
+}
+char string::lastChar() const {
+ const t_size len = length();
+ return len > 0 ? (*this)[len-1] : (char)0;
+}
+
+string string::replace(stringp strOld, stringp strNew) const {
+ t_size walk = 0;
+ string ret;
+ for(;;) {
+ t_size next = indexOf(strOld, walk);
+ if (next == ~0) {
+ ret += subString(walk); break;
+ }
+ ret += subString(walk,next-walk) + strNew;
+ walk = next + strOld.length();
+ }
+ return ret;
+}
+bool string::contains(char c) const {return indexOf(c) != ~0;}
+bool string::contains(stringp s) const {return indexOf(s) != ~0;}
+bool string::containsAnyChar(stringp s) const {return indexOfAnyChar(s) != ~0;}
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/stringNew.h b/Plugins/listeningto/players/foo_mlt/pfc/stringNew.h new file mode 100644 index 0000000..2b93528 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/stringNew.h @@ -0,0 +1,249 @@ +namespace pfc {
+ //helper, const methods only
+ class __stringEmpty : public string_base {
+ public:
+ const char * get_ptr() const {return "";}
+ void add_string(const char * p_string,t_size p_length = ~0) {throw exception_not_implemented();}
+ void set_string(const char * p_string,t_size p_length = ~0) {throw exception_not_implemented();}
+ void truncate(t_size len) {throw exception_not_implemented();}
+ t_size get_length() const {return 0;}
+ char * lock_buffer(t_size p_requested_length) {throw exception_not_implemented();}
+ void unlock_buffer() {throw exception_not_implemented();}
+ };
+
+ class stringp;
+
+ //! New EXPERIMENTAL string class, allowing efficient copies and returning from functions. \n
+ //! Does not implement the string_base interface so you still need string8 in many cases. \n
+ //! Safe to pass between DLLs, but since a reference is used, objects possibly created by other DLLs must be released before owning DLLs are unloaded.
+ class string {
+ public:
+ typedef rcptr_t<string_base const> t_data;
+ typedef rcptr_t<pfc::string8> t_dataImpl;
+
+ string() : m_content(rcnew_t<__stringEmpty>()) {}
+ string(const char * p_source) : m_content(rcnew_t<string8>(p_source)) {}
+ string(const char * p_source, t_size p_sourceLen) : m_content(rcnew_t<pfc::string8>(p_source,p_sourceLen)) {}
+ string(char * p_source) : m_content(rcnew_t<string8>(p_source)) {}
+ string(char * p_source, t_size p_sourceLen) : m_content(rcnew_t<pfc::string8>(p_source,p_sourceLen)) {}
+ string(t_data const & p_source) : m_content(p_source) {}
+ string(string_part_ref source) : m_content(rcnew_t<pfc::string8>(source)) {}
+ template<typename TSource> string(const TSource & p_source);
+
+ string const & toString() const {return *this;}
+
+ //warning, not length-checked anymore!
+ static string g_concatenateRaw(const char * item1, t_size len1, const char * item2, t_size len2) {
+ t_dataImpl impl; impl.new_t();
+ char * buffer = impl->lock_buffer(len1+len2);
+ memcpy_t(buffer,item1,len1);
+ memcpy_t(buffer+len1,item2,len2);
+ impl->unlock_buffer();
+ return string(t_data(impl));
+ }
+
+ string operator+(const string& p_item2) const {
+ return g_concatenateRaw(ptr(),length(),p_item2.ptr(),p_item2.length());
+ }
+ string operator+(const char * p_item2) const {
+ return g_concatenateRaw(ptr(),length(),p_item2,strlen(p_item2));
+ }
+
+ template<typename TSource> string operator+(const TSource & p_item2) const;
+
+ template<typename TSource>
+ const string & operator+=(const TSource & p_item) {
+ *this = *this + p_item;
+ return *this;
+ }
+
+ string subString(t_size base) const {
+ if (base > length()) throw exception_overflow();
+ return string(ptr() + base);
+ }
+ string subString(t_size base, t_size count) const {
+ return string(ptr() + base,count);
+ }
+
+ string toLower() const {
+ pfc::string8_fastalloc temp; temp.prealloc(128);
+ stringToLowerAppend(temp,ptr(),~0);
+ return string(temp.get_ptr());
+ }
+ string toUpper() const {
+ pfc::string8_fastalloc temp; temp.prealloc(128);
+ stringToUpperAppend(temp,ptr(),~0);
+ return string(temp.get_ptr());
+ }
+
+ string clone() const {return string(ptr());}
+
+ //! @returns ~0 if not found.
+ t_size indexOf(char c,t_size base = 0) const;
+ //! @returns ~0 if not found.
+ t_size lastIndexOf(char c,t_size base = ~0) const;
+ //! @returns ~0 if not found.
+ t_size indexOf(stringp s,t_size base = 0) const;
+ //! @returns ~0 if not found.
+ t_size lastIndexOf(stringp s,t_size base = ~0) const;
+ //! @returns ~0 if not found.
+ t_size indexOfAnyChar(stringp s,t_size base = 0) const;
+ //! @returns ~0 if not found.
+ t_size lastIndexOfAnyChar(stringp s,t_size base = ~0) const;
+
+ bool contains(char c) const;
+ bool contains(stringp s) const;
+
+ bool containsAnyChar(stringp s) const;
+
+ bool startsWith(char c) const;
+ bool startsWith(string s) const;
+ bool endsWith(char c) const;
+ bool endsWith(string s) const;
+
+ char firstChar() const;
+ char lastChar() const;
+
+ string replace(stringp strOld, stringp strNew) const;
+
+ static int g_compare(const string & p_item1, const string & p_item2) {return strcmp(p_item1.ptr(),p_item2.ptr());}
+ bool operator==(const string& p_other) const {return g_compare(*this,p_other) == 0;}
+ bool operator!=(const string& p_other) const {return g_compare(*this,p_other) != 0;}
+ bool operator<(const string& p_other) const {return g_compare(*this,p_other) < 0;}
+ bool operator>(const string& p_other) const {return g_compare(*this,p_other) > 0;}
+ bool operator<=(const string& p_other) const {return g_compare(*this,p_other) <= 0;}
+ bool operator>=(const string& p_other) const {return g_compare(*this,p_other) >= 0;}
+
+ const char * ptr() const {return m_content->get_ptr();}
+ const char * get_ptr() const {return m_content->get_ptr();}
+ t_size length() const {return m_content->get_length();}
+ t_size get_length() const {return m_content->get_length();}
+
+ void set_string(const char * ptr, t_size len = ~0) {
+ *this = string(ptr, len);
+ }
+
+ static bool isNonTextChar(char c) {return c >= 0 && c < 32;}
+
+ char operator[](t_size p_index) const {
+ PFC_ASSERT(p_index <= length());
+ return ptr()[p_index];
+ }
+ bool isEmpty() const {return length() == 0;}
+
+ class _comparatorCommon {
+ protected:
+ template<typename T> static const char * myStringToPtr(const T& val) {return stringToPtr(val);}
+ static const char * myStringToPtr(string_part_ref) {
+ PFC_ASSERT(!"Should never get here"); throw pfc::exception_invalid_params();
+ }
+ };
+
+ class comparatorCaseSensitive : private _comparatorCommon {
+ public:
+ template<typename T1,typename T2>
+ static int compare(T1 const& v1, T2 const& v2) {
+ if (is_same_type<T1, string_part_ref>::value || is_same_type<T2, string_part_ref>::value) {
+ return compare_ex(stringToRef(v1), stringToRef(v2));
+ } else {
+ return strcmp(myStringToPtr(v1),myStringToPtr(v2));
+ }
+ }
+ static int compare_ex(string_part_ref v1, string_part_ref v2) {
+ return strcmp_ex(v1.m_ptr, v1.m_len, v2.m_ptr, v2.m_len);
+ }
+ static int compare_ex(const char * v1, t_size l1, const char * v2, t_size l2) {
+ return strcmp_ex(v1, l1, v2, l2);
+ }
+ };
+ class comparatorCaseInsensitive : private _comparatorCommon {
+ public:
+ template<typename T1,typename T2>
+ static int compare(T1 const& v1, T2 const& v2) {
+ if (is_same_type<T1, string_part_ref>::value || is_same_type<T2, string_part_ref>::value) {
+ return stringCompareCaseInsensitiveEx(stringToRef(v1), stringToRef(v2));
+ } else {
+ return stringCompareCaseInsensitive(myStringToPtr(v1),myStringToPtr(v2));
+ }
+ }
+ };
+ class comparatorCaseInsensitiveASCII : private _comparatorCommon {
+ public:
+ template<typename T1,typename T2>
+ static int compare(T1 const& v1, T2 const& v2) {
+ if (is_same_type<T1, string_part_ref>::value || is_same_type<T2, string_part_ref>::value) {
+ return compare_ex(stringToRef(v1), stringToRef(v2));
+ } else {
+ return stricmp_ascii(myStringToPtr(v1),myStringToPtr(v2));
+ }
+ }
+ static int compare_ex(string_part_ref v1, string_part_ref v2) {
+ return stricmp_ascii_ex(v1.m_ptr, v1.m_len, v2.m_ptr, v2.m_len);
+ }
+ static int compare_ex(const char * v1, t_size l1, const char * v2, t_size l2) {
+ return stricmp_ascii_ex(v1, l1, v2, l2);
+ }
+ };
+
+ static bool g_equals(const string & p_item1, const string & p_item2) {return p_item1 == p_item2;}
+ static bool g_equalsCaseInsensitive(const string & p_item1, const string & p_item2) {return comparatorCaseInsensitive::compare(p_item1,p_item2) == 0;}
+
+ t_data _content() const {return m_content;}
+ private:
+ t_data m_content;
+ };
+
+ template<typename T> inline string toString(T const& val) {return val.toString();}
+ template<> inline string toString(t_int64 const& val) {return format_int(val).get_ptr();}
+ template<> inline string toString(t_int32 const& val) {return format_int(val).get_ptr();}
+ template<> inline string toString(t_int16 const& val) {return format_int(val).get_ptr();}
+ template<> inline string toString(t_uint64 const& val) {return format_uint(val).get_ptr();}
+ template<> inline string toString(t_uint32 const& val) {return format_uint(val).get_ptr();}
+ template<> inline string toString(t_uint16 const& val) {return format_uint(val).get_ptr();}
+ template<> inline string toString(float const& val) {return format_float(val).get_ptr();}
+ template<> inline string toString(double const& val) {return format_float(val).get_ptr();}
+ template<> inline string toString(char const& val) {return string(&val,1);}
+ inline const char * toString(std::exception const& val) {return val.what();}
+
+ template<typename TSource> string::string(const TSource & p_source) {
+ *this = pfc::toString(p_source);
+ }
+ template<typename TSource> string string::operator+(const TSource & p_item2) const {
+ return *this + pfc::toString(p_item2);
+ }
+
+ //! "String parameter" helper class, to use in function parameters, allowing functions to take any type of string as a parameter (const char*, string_base, string).
+ class stringp {
+ public:
+ stringp(const char * ptr) : m_ptr(ptr) {}
+ stringp(pfc::string const &s) : m_ptr(s.ptr()), m_s(s._content()) {}
+ stringp(pfc::string_base const &s) : m_ptr(s.get_ptr()) {}
+ template<typename TWhat> stringp(const TWhat& in) : m_ptr(in.toString()) {}
+
+ operator const char*() const {return m_ptr;}
+ const char * ptr() const {return m_ptr;}
+ const char * get_ptr() const {return m_ptr;}
+ pfc::string str() const {return m_s.is_valid() ? pfc::string(m_s) : pfc::string(m_ptr);}
+ operator pfc::string() const {return str();}
+ pfc::string toString() const {return str();}
+ t_size length() const {return m_s.is_valid() ? m_s->length() : strlen(m_ptr);}
+ private:
+ const char * const m_ptr;
+ pfc::string::t_data m_s;
+ };
+
+ template<typename TList>
+ string stringCombineList(const TList & list, stringp separator) {
+ typename TList::const_iterator iter = list.first();
+ string acc;
+ if (iter.is_valid()) {
+ acc = *iter;
+ for(++iter; iter.is_valid(); ++iter) {
+ acc = acc + separator + *iter;
+ }
+ }
+ return acc;
+ }
+
+ template<> class traits_t<string> : public traits_t<string::t_data> {};
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/string_conv.cpp b/Plugins/listeningto/players/foo_mlt/pfc/string_conv.cpp index b25bfe1..77b2dee 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/string_conv.cpp +++ b/Plugins/listeningto/players/foo_mlt/pfc/string_conv.cpp @@ -4,40 +4,63 @@ #ifdef _WINDOWS
namespace {
- template<typename t_char>
+ template<typename t_char, bool isChecked = true>
class string_writer_t {
public:
string_writer_t(t_char * p_buffer,t_size p_size) : m_buffer(p_buffer), m_size(p_size), m_writeptr(0) {}
void write(t_char p_char) {
- if (m_writeptr < m_size) {
+ if (isChecked) {
+ if (m_writeptr < m_size) {
+ m_buffer[m_writeptr++] = p_char;
+ }
+ } else {
m_buffer[m_writeptr++] = p_char;
}
}
void write_multi(const t_char * p_buffer,t_size p_count) {
- const t_size delta = pfc::min_t<t_size>(p_count,m_size-m_writeptr);
- for(t_size n=0;n<delta;n++) {
- m_buffer[m_writeptr++] = p_buffer[n];
+ if (isChecked) {
+ const t_size delta = pfc::min_t<t_size>(p_count,m_size-m_writeptr);
+ for(t_size n=0;n<delta;n++) {
+ m_buffer[m_writeptr++] = p_buffer[n];
+ }
+ } else {
+ for(t_size n = 0; n < p_count; ++n) {
+ m_buffer[m_writeptr++] = p_buffer[n];
+ }
}
}
void write_as_utf8(unsigned p_char) {
- char temp[6];
- t_size n = pfc::utf8_encode_char(p_char,temp);
- write_multi(temp,n);
+ if (isChecked) {
+ char temp[6];
+ t_size n = pfc::utf8_encode_char(p_char,temp);
+ write_multi(temp,n);
+ } else {
+ m_writeptr += pfc::utf8_encode_char(p_char, m_buffer + m_writeptr);
+ }
}
void write_as_wide(unsigned p_char) {
- wchar_t temp[2];
- t_size n = pfc::utf16_encode_char(p_char,temp);
- write_multi(temp,n);
+ if (isChecked) {
+ wchar_t temp[2];
+ t_size n = pfc::utf16_encode_char(p_char,temp);
+ write_multi(temp,n);
+ } else {
+ m_writeptr += pfc::utf16_encode_char(p_char, m_buffer + m_writeptr);
+ }
}
t_size finalize() {
- if (m_size == 0) return 0;
- t_size terminator = pfc::min_t<t_size>(m_writeptr,m_size-1);
- m_buffer[terminator] = 0;
- return terminator;
+ if (isChecked) {
+ if (m_size == 0) return 0;
+ t_size terminator = pfc::min_t<t_size>(m_writeptr,m_size-1);
+ m_buffer[terminator] = 0;
+ return terminator;
+ } else {
+ m_buffer[m_writeptr] = 0;
+ return m_writeptr;
+ }
}
bool is_overrun() const {
return m_writeptr >= m_size;
@@ -63,7 +86,7 @@ namespace pfc { while(inptr < insize && !writer.is_overrun()) {
unsigned newchar = 0;
- t_size delta = utf8_decode_char(p_in + inptr,&newchar,insize - inptr);
+ t_size delta = utf8_decode_char(p_in + inptr,newchar,insize - inptr);
if (delta == 0 || newchar == 0) break;
PFC_ASSERT(inptr + delta <= insize);
inptr += delta;
@@ -73,6 +96,21 @@ namespace pfc { return writer.finalize();
}
+ t_size convert_utf8_to_wide_unchecked(wchar_t * p_out,const char * p_in) {
+ t_size inptr = 0;
+ string_writer_t<wchar_t,false> writer(p_out,~0);
+
+ while(!writer.is_overrun()) {
+ unsigned newchar = 0;
+ t_size delta = utf8_decode_char(p_in + inptr,newchar);
+ if (delta == 0 || newchar == 0) break;
+ inptr += delta;
+ writer.write_as_wide(newchar);
+ }
+
+ return writer.finalize();
+ }
+
t_size convert_wide_to_utf8(char * p_out,t_size p_out_size,const wchar_t * p_in,t_size p_in_size) {
const t_size insize = p_in_size;
t_size inptr = 0;
@@ -90,22 +128,37 @@ namespace pfc { return writer.finalize();
}
+ t_size estimate_utf8_to_wide(const char * p_in) {
+ t_size inptr = 0;
+ t_size retval = 1;//1 for null terminator
+ for(;;) {
+ unsigned newchar = 0;
+ t_size delta = utf8_decode_char(p_in + inptr,newchar);
+ if (delta == 0 || newchar == 0) break;
+ inptr += delta;
+
+ {
+ wchar_t temp[2];
+ retval += utf16_encode_char(newchar,temp);
+ }
+ }
+ return retval;
+ }
+
t_size estimate_utf8_to_wide(const char * p_in,t_size p_in_size) {
const t_size insize = p_in_size;
t_size inptr = 0;
t_size retval = 1;//1 for null terminator
while(inptr < insize) {
unsigned newchar = 0;
- t_size delta = utf8_decode_char(p_in + inptr,&newchar,insize - inptr);
+ t_size delta = utf8_decode_char(p_in + inptr,newchar,insize - inptr);
if (delta == 0 || newchar == 0) break;
PFC_ASSERT(inptr + delta <= insize);
inptr += delta;
{
wchar_t temp[2];
- delta = utf16_encode_char(newchar,temp);
- if (delta == 0) break;
- retval += delta;
+ retval += utf16_encode_char(newchar,temp);
}
}
return retval;
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/string_conv.h b/Plugins/listeningto/players/foo_mlt/pfc/string_conv.h index b6b2ba0..21a31e1 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/string_conv.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/string_conv.h @@ -16,12 +16,15 @@ namespace pfc { //! @param p_source_size Number of characters to read from p_source. If reading stops if null terminator is encountered earlier.
//! @returns Number of characters written, not counting null terminator.
t_size convert_utf8_to_wide(wchar_t * p_out,t_size p_out_size,const char * p_source,t_size p_source_size);
+
//! Estimates buffer size required to convert specified UTF-8 string to widechar.
//! @param p_source String to be converted.
//! @param p_source_size Number of characters to read from p_source. If reading stops if null terminator is encountered earlier.
//! @returns Number of characters to allocate, including space for null terminator.
t_size estimate_utf8_to_wide(const char * p_source,t_size p_source_size);
+
+ t_size estimate_utf8_to_wide(const char * p_source);
//! Converts wide character string to UTF-8.
//! @param p_out Output buffer, receives converted string, with null terminator.
@@ -108,6 +111,20 @@ namespace pfc { return estimate_wide_to_codepage(codepage_system,p_source,p_source_size);
}
+
+ //! estimate_utf8_to_wide_quick() functions use simple math to determine buffer size required for the conversion. The result is not accurate length of output string - it's just a safe estimate of required buffer size, possibly bigger than what's really needed. \n
+ //! These functions are meant for scenarios when speed is more important than memory usage.
+ inline t_size estimate_utf8_to_wide_quick(t_size sourceLen) {
+ return sourceLen + 1;
+ }
+ inline t_size estimate_utf8_to_wide_quick(const char * source) {
+ return estimate_utf8_to_wide_quick(strlen(source));
+ }
+ inline t_size estimate_utf8_to_wide_quick(const char * source, t_size sourceLen) {
+ return estimate_utf8_to_wide_quick(strlen_max(source, sourceLen));
+ }
+ t_size convert_utf8_to_wide_unchecked(wchar_t * p_out,const char * p_source);
+
template<typename t_char> const t_char * null_string_t();
template<> inline const char * null_string_t<char>() {return "";}
template<> inline const wchar_t * null_string_t<wchar_t>() {return L"";}
@@ -151,6 +168,7 @@ namespace pfc { operator const char * () const {return get_ptr();}
const char * get_ptr() const {return m_buffer.get_ptr();}
+ const char * toString() const {return get_ptr();}
bool is_empty() const {return string_is_empty_t(get_ptr());}
t_size length() const {return strlen_t(get_ptr());}
@@ -163,13 +181,17 @@ namespace pfc { class string_wide_from_utf8_t {
public:
string_wide_from_utf8_t() {}
- string_wide_from_utf8_t(const string_wide_from_utf8_t<t_alloc> & p_source) : m_buffer(p_source.m_buffer) {}
- string_wide_from_utf8_t(const char* p_source,t_size p_source_size = ~0) {convert(p_source,p_source_size);}
+ string_wide_from_utf8_t(const char* p_source) {convert(p_source);}
+ string_wide_from_utf8_t(const char* p_source,t_size p_source_size) {convert(p_source,p_source_size);}
- void convert(const char* p_source,t_size p_source_size = ~0) {
- t_size size = estimate_utf8_to_wide(p_source,p_source_size);
+ void convert(const char* p_source,t_size p_source_size) {
+ const t_size size = estimate_size(p_source, p_source_size);
m_buffer.set_size(size);
- convert_utf8_to_wide( m_buffer.get_ptr_var(),size,p_source,p_source_size);
+ convert_utf8_to_wide( m_buffer.get_ptr_var(),size,p_source,p_source_size );
+ }
+ void convert(const char * p_source) {
+ m_buffer.set_size( estimate_size(p_source) );
+ convert_utf8_to_wide_unchecked(m_buffer.get_ptr_var(), p_source);
}
operator const wchar_t * () const {return get_ptr();}
@@ -177,10 +199,19 @@ namespace pfc { bool is_empty() const {return string_is_empty_t(get_ptr());}
t_size length() const {return strlen_t(get_ptr());}
+ enum { alloc_prioritizes_speed = t_alloc<wchar_t>::alloc_prioritizes_speed };
private:
+
+ inline t_size estimate_size(const char * source, t_size sourceLen) {
+ return alloc_prioritizes_speed ? estimate_utf8_to_wide_quick(source, sourceLen) : estimate_utf8_to_wide(source,sourceLen);
+ }
+ inline t_size estimate_size(const char * source) {
+ return alloc_prioritizes_speed ? estimate_utf8_to_wide_quick(source) : estimate_utf8_to_wide(source,~0);
+ }
char_buffer_t<wchar_t,t_alloc> m_buffer;
};
typedef string_wide_from_utf8_t<> string_wide_from_utf8;
+ typedef string_wide_from_utf8_t<alloc_fast_aggressive> string_wide_from_utf8_fast;
template<template<typename t_allocitem> class t_alloc = pfc::alloc_standard>
class string_wide_from_codepage_t {
@@ -283,9 +314,9 @@ namespace pfc { string_utf8_from_ansi(const char * p_source,t_size p_source_size = ~0) : m_buffer(codepage_system,p_source,p_source_size) {}
operator const char * () const {return get_ptr();}
const char * get_ptr() const {return m_buffer.get_ptr();}
+ const char * toString() const {return get_ptr();}
bool is_empty() const {return string_is_empty_t(get_ptr());}
t_size length() const {return strlen_t(get_ptr());}
-
void convert(const char * p_source,t_size p_source_size = ~0) {m_buffer.convert(codepage_system,p_source,p_source_size);}
private:
@@ -343,13 +374,37 @@ namespace pfc { #ifdef UNICODE
typedef string_wide_from_utf8 string_os_from_utf8;
typedef string_utf8_from_wide string_utf8_from_os;
+ typedef string_wide_from_utf8_fast string_os_from_utf8_fast;
#else
typedef string_ansi_from_utf8 string_os_from_utf8;
typedef string_utf8_from_ansi string_utf8_from_os;
+ typedef string_ansi_from_utf8 string_os_from_utf8_fast;
#endif
+
+ class string_utf8_from_os_ex {
+ public:
+ template<typename t_source> string_utf8_from_os_ex(const t_source * source, t_size sourceLen = ~0) {
+ convert(source,sourceLen);
+ }
+
+ void convert(const char * source, t_size sourceLen = ~0) {
+ m_buffer = string_utf8_from_ansi(source,sourceLen);
+ }
+ void convert(const wchar_t * source, t_size sourceLen = ~0) {
+ m_buffer = string_utf8_from_wide(source,sourceLen);
+ }
+
+ operator const char * () const {return get_ptr();}
+ const char * get_ptr() const {return m_buffer.get_ptr();}
+ bool is_empty() const {return m_buffer.is_empty();}
+ t_size length() const {return m_buffer.length();}
+ const char * toString() const {return get_ptr();}
+ private:
+ string8 m_buffer;
+ };
}
#else
//PORTME
#endif
-};
\ No newline at end of file +};
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/string_list.h b/Plugins/listeningto/players/foo_mlt/pfc/string_list.h index bf07cdd..cb5b700 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/string_list.h +++ b/Plugins/listeningto/players/foo_mlt/pfc/string_list.h @@ -11,42 +11,28 @@ namespace pfc { t_size get_count() const {return m_data.get_size();}
void get_item_ex(const char* & p_out, t_size n) const {p_out = m_data[n];}
- inline const char * operator[] (t_size n) const {return m_data[n];}
+ const char * operator[] (t_size n) const {return m_data[n];}
+ void add_item(const char * p_string) {pfc::append_t(m_data, p_string);}
- void add_item(const char * p_string) {
- t_size idx = m_data.get_size();
- m_data.set_size(idx + 1);
- m_data[idx] = p_string;
- }
-
- void add_items(const string_list_const & p_source) {_append(p_source);}
+ template<typename t_what> void add_items(const t_what & p_source) {_append(p_source);}
- void remove_all()
- {
- m_data.set_size(0);
- }
+ void remove_all() {m_data.set_size(0);}
- //unnecessary since pfc::array_t<pfc::string8> is in use for implementation
- //~string_list_impl() {remove_all();}
-
- inline string_list_impl() {}
- inline string_list_impl(const string_list_impl & p_source) {_copy(p_source);}
- inline string_list_impl(const string_list_const & p_source) {_copy(p_source);}
- inline const string_list_impl & operator=(const string_list_impl & p_source) {_copy(p_source);return *this;}
- inline const string_list_impl & operator=(const string_list_const & p_source) {_copy(p_source);return *this;}
- inline const string_list_impl & operator+=(const string_list_impl & p_source) {_append(p_source);return *this;}
- inline const string_list_impl & operator+=(const string_list_const & p_source) {_append(p_source);return *this;}
+ string_list_impl() {}
+ template<typename t_what> string_list_impl(const t_what & p_source) {_copy(p_source);}
+ template<typename t_what> string_list_impl & operator=(const t_what & p_source) {_copy(p_source); return *this;}
+ template<typename t_what> string_list_impl & operator|=(const string_list_impl & p_source) {_append(p_source); return *this;}
+ template<typename t_what> string_list_impl & operator+=(const t_what & p_source) {pfc::append_t(m_data, p_source); return *this;}
private:
-
- void _append(const string_list_const & p_source) {
- const t_size toadd = p_source.get_count(), base = m_data.get_size();
+ template<typename t_what> void _append(const t_what & p_source) {
+ const t_size toadd = p_source.get_size(), base = m_data.get_size();
m_data.set_size(base+toadd);
for(t_size n=0;n<toadd;n++) m_data[base+n] = p_source[n];
}
- void _copy(const string_list_const & p_source) {
- const t_size newcount = p_source.get_count();
+ template<typename t_what> void _copy(const t_what & p_source) {
+ const t_size newcount = p_source.get_size();
m_data.set_size(newcount);
for(t_size n=0;n<newcount;n++) m_data[n] = p_source[n];
}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/threads.cpp b/Plugins/listeningto/players/foo_mlt/pfc/threads.cpp new file mode 100644 index 0000000..71f7f27 --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/threads.cpp @@ -0,0 +1,23 @@ +#include "pfc.h"
+
+namespace pfc {
+ t_size getOptimalWorkerThreadCount() {
+#ifdef _WINDOWS
+ DWORD_PTR mask,system;
+ t_size ret = 0;
+ GetProcessAffinityMask(GetCurrentProcess(),&mask,&system);
+ for(t_size n=0;n<sizeof(mask)*8;n++) {
+ if (mask & ((DWORD_PTR)1<<n)) ret++;
+ }
+ if (ret == 0) return 1;
+ return ret;
+ }
+#else
+#error PORTME
+#endif
+
+ t_size getOptimalWorkerThreadCountEx(t_size taskCountLimit) {
+ if (taskCountLimit <= 1) return 1;
+ return pfc::min_t(taskCountLimit,getOptimalWorkerThreadCount());
+ }
+}
\ No newline at end of file diff --git a/Plugins/listeningto/players/foo_mlt/pfc/threads.h b/Plugins/listeningto/players/foo_mlt/pfc/threads.h new file mode 100644 index 0000000..e71b61f --- /dev/null +++ b/Plugins/listeningto/players/foo_mlt/pfc/threads.h @@ -0,0 +1,70 @@ +namespace pfc {
+ t_size getOptimalWorkerThreadCount();
+ t_size getOptimalWorkerThreadCountEx(t_size taskCountLimit);
+
+#ifdef _WINDOWS
+ //! IMPORTANT: all classes derived from thread must call waitTillDone() in their destructor, to avoid object destruction during a virtual function call!
+ class thread {
+ public:
+ PFC_DECLARE_EXCEPTION(exception_creation, exception, "Could not create thread");
+ thread() : m_thread(INVALID_HANDLE_VALUE) {}
+ ~thread() {PFC_ASSERT(!isActive()); waitTillDone();}
+ void startWithPriority(int priority) {
+ close();
+ HANDLE thread;
+ thread = CreateThread(NULL,0,g_entry,reinterpret_cast<void*>(this),CREATE_SUSPENDED,NULL);
+ if (thread == NULL) throw exception_creation();
+ SetThreadPriority(thread, priority);
+ ResumeThread(thread);
+ m_thread = thread;
+ }
+ void setPriority(int priority) {
+ PFC_ASSERT(isActive());
+ SetThreadPriority(m_thread, priority);
+ }
+ void start() {
+ close();
+ HANDLE thread;
+ const int priority = GetThreadPriority(GetCurrentThread());
+ const bool overridePriority = (priority != THREAD_PRIORITY_NORMAL);
+ thread = CreateThread(NULL,0,g_entry,reinterpret_cast<void*>(this),overridePriority ? CREATE_SUSPENDED : 0,NULL);
+ if (thread == NULL) throw exception_creation();
+ if (overridePriority) {
+ SetThreadPriority(thread, priority);
+ ResumeThread(thread);
+ }
+ m_thread = thread;
+ }
+ bool isActive() const {
+ return m_thread != INVALID_HANDLE_VALUE;
+ }
+ void waitTillDone() {
+ close();
+ }
+ protected:
+ virtual void threadProc() {PFC_ASSERT(!"Stub thread entry - should not get here");}
+ private:
+ void close() {
+ if (isActive()) {
+ WaitForSingleObject(m_thread,INFINITE);
+ CloseHandle(m_thread); m_thread = INVALID_HANDLE_VALUE;
+ }
+ }
+
+ static DWORD CALLBACK g_entry(void* p_instance) {
+ return reinterpret_cast<thread*>(p_instance)->entry();
+ }
+ unsigned entry() {
+ try {
+ threadProc();
+ } catch(...) {}
+ return 0;
+ }
+ HANDLE m_thread;
+
+ PFC_CLASS_NOT_COPYABLE_EX(thread)
+ };
+#else
+#error PORTME
+#endif
+}
diff --git a/Plugins/listeningto/players/foo_mlt/pfc/utf8.cpp b/Plugins/listeningto/players/foo_mlt/pfc/utf8.cpp index 2bd1f3f..81b37d2 100644 --- a/Plugins/listeningto/players/foo_mlt/pfc/utf8.cpp +++ b/Plugins/listeningto/players/foo_mlt/pfc/utf8.cpp @@ -7,7 +7,7 @@ static const t_uint8 mask_tab[6]={0x80,0xE0,0xF0,0xF8,0xFC,0xFE}; static const t_uint8 val_tab[6]={0,0xC0,0xE0,0xF0,0xF8,0xFC};
-t_size utf8_char_len_from_header(char p_c)
+t_size utf8_char_len_from_header(char p_c) throw()
{
t_uint8 c = (t_uint8)p_c;
@@ -21,22 +21,63 @@ t_size utf8_char_len_from_header(char p_c) return cnt + 1;
}
+t_size utf8_decode_char(const char *p_utf8,unsigned & wide) throw() {
+ const t_uint8 * utf8 = (const t_uint8*)p_utf8;
+ const t_size max = 6;
+
+ if (utf8[0]<0x80) {
+ wide = utf8[0];
+ return utf8[0]>0 ? 1 : 0;
+ }
+ wide = 0;
+
+ unsigned res=0;
+ unsigned n;
+ unsigned cnt=0;
+ for(;;)
+ {
+ if ((*utf8&mask_tab[cnt])==val_tab[cnt]) break;
+ if (++cnt>=max) return 0;
+ }
+ cnt++;
+
+ if (cnt==2 && !(*utf8&0x1E)) return 0;
+
+ if (cnt==1)
+ res=*utf8;
+ else
+ res=(0xFF>>(cnt+1))&*utf8;
+
+ for (n=1;n<cnt;n++)
+ {
+ if ((utf8[n]&0xC0) != 0x80)
+ return 0;
+ if (!res && n==2 && !((utf8[n]&0x7F) >> (7 - cnt)))
+ return 0;
+
+ res=(res<<6)|(utf8[n]&0x3F);
+ }
+
+ wide = res;
+
+ return cnt;
+}
-t_size utf8_decode_char(const char *p_utf8,unsigned * wide,t_size max)
+t_size utf8_decode_char(const char *p_utf8,unsigned & wide,t_size max) throw()
{
const t_uint8 * utf8 = (const t_uint8*)p_utf8;
- if (wide) *wide = 0;
-
- if (max==0)
+ if (max==0) {
+ wide = 0;
return 0;
- else if (max>6) max = 6;
+ }
- if (utf8[0]<0x80)
- {
- if (wide) *wide = utf8[0];
+ if (utf8[0]<0x80) {
+ wide = utf8[0];
return utf8[0]>0 ? 1 : 0;
}
+ if (max>6) max = 6;
+ wide = 0;
unsigned res=0;
unsigned n;
@@ -65,14 +106,13 @@ t_size utf8_decode_char(const char *p_utf8,unsigned * wide,t_size max) res=(res<<6)|(utf8[n]&0x3F);
}
- if (wide)
- *wide=res;
+ wide = res;
return cnt;
}
-t_size utf8_encode_char(unsigned wide,char * target)
+t_size utf8_encode_char(unsigned wide,char * target) throw()
{
t_size count;
@@ -124,29 +164,23 @@ t_size utf8_encode_char(unsigned wide,char * target) return count;
}
-t_size utf16_encode_char(unsigned cur_wchar,wchar_t * out)
+t_size utf16_encode_char(unsigned cur_wchar,wchar_t * out) throw()
{
- if (cur_wchar>0 && cur_wchar<(1<<20))
- {
- if (sizeof(wchar_t) == 2 && cur_wchar>=0x10000)
- {
- unsigned c = cur_wchar - 0x10000;
- //MSDN:
- //The first (high) surrogate is a 16-bit code value in the range U+D800 to U+DBFF. The second (low) surrogate is a 16-bit code value in the range U+DC00 to U+DFFF. Using surrogates, Unicode can support over one million characters. For more details about surrogates, refer to The Unicode Standard, version 2.0.
- out[0] = (wchar_t)(0xD800 | (0x3FF & (c>>10)) );
- out[1] = (wchar_t)(0xDC00 | (0x3FF & c) ) ;
- return 2;
- }
- else
- {
- *out = (wchar_t)cur_wchar;
- return 1;
- }
+ if (cur_wchar < 0x10000) {
+ *out = (wchar_t) cur_wchar; return 1;
+ } else if (cur_wchar < (1 << 20)) {
+ unsigned c = cur_wchar - 0x10000;
+ //MSDN:
+ //The first (high) surrogate is a 16-bit code value in the range U+D800 to U+DBFF. The second (low) surrogate is a 16-bit code value in the range U+DC00 to U+DFFF. Using surrogates, Unicode can support over one million characters. For more details about surrogates, refer to The Unicode Standard, version 2.0.
+ out[0] = (wchar_t)(0xD800 | (0x3FF & (c>>10)) );
+ out[1] = (wchar_t)(0xDC00 | (0x3FF & c) ) ;
+ return 2;
+ } else {
+ *out = '?'; return 1;
}
- return 0;
}
-t_size utf16_decode_char(const wchar_t * p_source,unsigned * p_out,t_size p_source_length) {
+t_size utf16_decode_char(const wchar_t * p_source,unsigned * p_out,t_size p_source_length) throw() {
if (p_source_length == 0) return 0;
else if (p_source_length == 1) {
*p_out = p_source[0];
@@ -173,20 +207,21 @@ t_size utf16_decode_char(const wchar_t * p_source,unsigned * p_out,t_size p_sour }
-UINT utf8_get_char(const char * src)
+unsigned utf8_get_char(const char * src)
{
- UINT rv = 0;
- utf8_decode_char(src,&rv);
+ unsigned rv = 0;
+ utf8_decode_char(src,rv);
return rv;
}
-t_size utf8_char_len(const char * s,t_size max)
+t_size utf8_char_len(const char * s,t_size max) throw()
{
- return utf8_decode_char(s,0,max);
+ unsigned dummy;
+ return utf8_decode_char(s,dummy,max);
}
-t_size skip_utf8_chars(const char * ptr,t_size count)
+t_size skip_utf8_chars(const char * ptr,t_size count) throw()
{
t_size num = 0;
for(;count && ptr[num];count--)
@@ -202,7 +237,8 @@ bool is_valid_utf8(const char * param,t_size max) { t_size walk = 0;
while(walk < max && param[walk] != 0) {
t_size d;
- d = utf8_decode_char(param + walk,NULL,max - walk);
+ unsigned dummy;
+ d = utf8_decode_char(param + walk,dummy,max - walk);
if (d==0) return false;
walk += d;
if (walk > max) {
@@ -254,14 +290,14 @@ unsigned strcpy_utf8_truncate(const char * src,char * out,unsigned maxbytes) return rv;
}
-t_size strlen_utf8(const char * p,t_size num)
+t_size strlen_utf8(const char * p,t_size num) throw()
{
unsigned w;
t_size d;
t_size ret = 0;
for(;num;)
{
- d = utf8_decode_char(p,&w);
+ d = utf8_decode_char(p,w);
if (w==0 || d<=0) break;
ret++;
p+=d;
@@ -270,12 +306,13 @@ t_size strlen_utf8(const char * p,t_size num) return ret;
}
-t_size utf8_chars_to_bytes(const char * string,t_size count)
+t_size utf8_chars_to_bytes(const char * string,t_size count) throw()
{
t_size bytes = 0;
while(count)
{
- t_size delta = utf8_decode_char(string+bytes,0);
+ unsigned dummy;
+ t_size delta = utf8_decode_char(string+bytes,dummy);
if (delta==0) break;
bytes += delta;
count--;
diff --git a/Plugins/listeningto/players/foobar.cpp b/Plugins/listeningto/players/foobar.cpp index 4eca008..f87ce1c 100644 --- a/Plugins/listeningto/players/foobar.cpp +++ b/Plugins/listeningto/players/foobar.cpp @@ -1,35 +1,444 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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 "..\commons.h"
+#include <comdef.h>
-#include "..\\commons.h"
+extern "C"
+{
+#include "foo_comserver2\COMServer2Helper_i.c"
+#include "foo_comserver2\foobar2000_i.c"
+}
static TCHAR *wcs[] = {
+ _T("{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}"), // Foobar Columns UI
+ _T("{97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}"), // Foobar 0.9.5.3 +
_T("{DA7CD0DE-1602-45e6-89A1-C2CA151E008E}/1"), // Foobar 0.9.1
_T("{DA7CD0DE-1602-45e6-89A1-C2CA151E008E}"),
- _T("{97E27FAA-C0B3-4b8e-A693-ED7881E99FC1}"), // Foobar 0.9.5.3
- _T("{E7076D1C-A7BF-4f39-B771-BCBE88F2A2A8}"), // Foobar Columns UI
};
-Foobar::Foobar()
-{
- name = _T("foobar2000");
- window_classes = wcs;
- num_window_classes = MAX_REGS(wcs);
+/////////////////////////////////////////////////////////////////////////////
+// common
+
+Foobar::Foobar(int index)
+: Player(index)
+{
+ m_name = _T("foobar2000");
+ m_window_classes = wcs;
+ m_window_classes_num = MAX_REGS(wcs);
+
+ m_comApp = NULL;
+ m_comAppH = NULL;
+ m_comPlayback = NULL;
+ m_comPlaybackEventSink = NULL;
+ m_comClientHelper07Sink = NULL;
+ m_comRet = NULL;
+ m_vbServerState = VARIANT_FALSE;
+ m_state = PL_OFFLINE;
+}
+
+Foobar::~Foobar()
+{
+ COM_Stop();
+ FreeData();
+}
+
+void
+Foobar::EnableDisable()
+{
+ static BOOL old = FALSE;
+ if(m_enabled == old) return;
+
+ switch(old){ //stop ...
+ case 0: break;
+ case 1: COM_Stop(); break; //COM
+ case 2: m_needPoll = FALSE; break; //MLT
+ }
+ switch(m_enabled){ //start ...
+ case 0: {
+ if(loaded)
+ NotifyInfoChanged();
+ } break;
+ case 1: {
+ CLSID clsid;
+ if( (SUCCEEDED(CLSIDFromProgID(L"Foobar2000.ApplicationHelper.0.7", &clsid))) &&
+ (COM_Start()) ) break; //COM is full install (host and server)
+ else
+ if( (SUCCEEDED(CLSIDFromProgID(L"Foobar2000.Application0.7", &clsid))) ) {
+ m_needPoll = COM_ConnectServer() ? FALSE : TRUE;
+ break; //COM is install (only server)
+ }
+ }
+ //fall through (no com)
+ case 2: {
+ m_enabled = 2;
+ m_needPoll = FALSE;
+ //MLT_Start();
+ } break; //MLT
+ }
+ old = m_enabled;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// COM ...foo_comserver2
+
+BOOL
+Foobar::COM_Start()
+{
+ HRESULT hr;
+ // ***** Start new Foobar COM Helper instance... *****
+ hr = CoCreateInstance( CLSID_ApplicationHelper07,
+ NULL,
+ CLSCTX_LOCAL_SERVER,
+ __uuidof(m_comAppH),
+ (void **)&m_comAppH );
+ if(SUCCEEDED(hr)) {
+ // ***** Instantiate an IMIM_fooEventH object. *****
+ if(m_comClientHelper07Sink = new IMIM_fooEventH(*this, m_comAppH, &Foobar::COM_OnEventInvoke)) {
+ //get the server state
+ if(SUCCEEDED(m_comAppH->get_Running(&m_vbServerState))){
+ DISPPARAMS dispparams;
+ ZeroMemory(&dispparams, sizeof dispparams);
+ dispparams.cArgs = 1;
+ VARIANTARG* pvarg = new VARIANTARG[dispparams.cArgs];
+ if(pvarg == NULL)
+ return FALSE; //TODO: error handeling
+ dispparams.rgvarg = pvarg;
+ dispparams.rgvarg[0].boolVal = m_vbServerState;
+
+ COM_OnEventInvoke(m_comClientHelper07Sink, 1, IID_NULL,0,0,&dispparams,NULL,NULL,NULL);
+ delete pvarg;
+ }
+ }
+ }
+ else {
+ DEBUGOUT("Foobar:\t\tServer = ","off");
+ CLSID clsid;
+ if(S_OK != CLSIDFromProgID(L"Foobar2000.ApplicationHelper.0.7", &clsid)) {
+ DEBUGOUT("Foobar:\t\tServer = ","helper not install !!");
+ return FALSE;
+ }
+ DEBUGOUT("Foobar:\t\tServer = ","Reg ok, helper fail !!");
+
+ return COM_ConnectServer();
+ }
+ return TRUE;
+}
+
+BOOL
+Foobar::COM_Stop()
+{
+ if (m_vbServerState == VARIANT_TRUE) {
+ COM_ReleaseServer();
+ }
+ if (m_comClientHelper07Sink) {
+ m_comClientHelper07Sink -> ShutdownConnectionPoint();
+ m_comClientHelper07Sink -> Release();
+ m_comClientHelper07Sink = NULL;
+ }
+ RELEASE(m_comAppH,TRUE);
+ return TRUE;
}
+
+BOOL
+Foobar::COM_ConnectServer()
+{
+ HRESULT hr;
+ /***** Attach to the running COM instance... *****/
+ IDispatch *pDisp = NULL;
+ if(m_comAppH) {
+ //try Foobar COMServer2Helper (fast way)
+ CALL( m_comAppH->get_Server(&pDisp));
+ hr = pDisp->QueryInterface(__uuidof(m_comApp), (void**)&m_comApp);
+ RELEASE(pDisp,TRUE);
+ }
+ else {
+ //try GetActive Foobar Object (COMServer2Helper.exe not install right)
+ CALL( ObjGet(CLSID_Application07, __uuidof(m_comApp), (void**)&m_comApp));
+ }
+ if(SUCCEEDED(hr)) {
+ DEBUGOUT("Foobar:\t\tServer = ","on");
+ // ***** get the Fooar Playback interface... *****
+ CALL( m_comApp->get_Playback(&m_comPlayback) );
+ if (m_comPlayback == NULL)
+ goto FAILURE;
+ // ***** Instantiate an IMIM_fooEventS object. *****
+ if(m_comPlaybackEventSink = new IMIM_fooEventS(*this, m_comPlayback, &Foobar::COM_OnEventInvoke)) {
+
+ VARIANT_BOOL bState = VARIANT_FALSE;
+ m_comPlayback->get_IsPlaying(&bState);
+
+ m_state = (bState == VARIANT_TRUE) ? PL_PLAYING : PL_STOPPED;
+ if(SetActivePlayer(m_index, m_index))
+ NotifyInfoChanged();
+ }
+ }
+ else {
+ DEBUGOUT("Foobar:\t\tServer = ","off");
+ RELEASE(pDisp,TRUE);
+ m_state = PL_OFFLINE;
+ return FALSE;
+ }
+ return TRUE;
+
+FAILURE:
+ #ifdef DEBUG
+ _com_error err(hr);
+ OutputDebugString(_T("Foobar:\t\tERROR = COM_ConnectServer()\n\t\t\t"));
+ OutputDebugString(err.ErrorMessage());
+ OutputDebugString(_T("\n)"));
+ #endif
+ RELEASE(pDisp,TRUE);
+ COM_ReleaseServer();
+ return FALSE;
+}
+
+void
+Foobar::COM_ReleaseServer()
+{
+ BOOL test = m_comApp ? OleIsRunning((LPOLEOBJECT)m_comApp) : FALSE;
+
+ // Stop listening to events
+ /* When the program is terminating, make sure that we instruct our */
+ /* Event Handler to disconnect from the connection point of the */
+ /* object which implemented the IEventFiringObject interface. */
+ /* We also needs to Release() it (instead of deleting it). */
+ if (m_comPlaybackEventSink) {
+ m_comPlaybackEventSink -> ShutdownConnectionPoint();
+ m_comPlaybackEventSink -> Release();
+ m_comPlaybackEventSink = NULL;
+ }
+ RELEASE(m_comPlayback, m_vbServerState);
+ RELEASE(m_comApp, m_vbServerState);
+ BSTRFREE(m_comRet);
+
+ m_state = PL_OFFLINE;
+ if(loaded)
+ NotifyInfoChanged();
+}
+
+BOOL
+Foobar::COM_infoCache()
+{
+ if( (m_state <= PL_STOPPED) ||
+ (m_comPlaybackEventSink && m_comPlaybackEventSink->m_vbServerState == VARIANT_FALSE) ||
+ (!m_comPlayback) )
+ return FALSE;
+
+ struct info_t {
+ TCHAR* &ptszValue;
+ WCHAR* ptszFormat;
+ } static info[] = {
+ {m_listening_info.ptszAlbum, L"[%album%]" },
+ {m_listening_info.ptszArtist, L"[%artist%]" },
+ {m_listening_info.ptszGenre, L"[%genre%]" },
+ {m_listening_info.ptszLength, L"[%length%]" }, //Length of the track, formatted as [HH:]MM:SS.
+ {m_listening_info.ptszTitle, L"[%title%]" },
+ {m_listening_info.ptszTrack, L"[%tracknumber%]" },
+ {m_listening_info.ptszYear, L"[$year(%date%)]" }
+ };
+
+ HRESULT hr;
+ VARIANT_BOOL IsPlaying = 0; /* 0 == FALSE, -1 == TRUE */
+ VARIANT_BOOL IsPaused = 0;
+ m_comPlayback->get_IsPlaying(&IsPlaying);
+ m_comPlayback->get_IsPaused(&IsPaused);
+ if( IsPlaying == VARIANT_FALSE ||
+ IsPlaying == VARIANT_TRUE && IsPaused == VARIANT_TRUE)
+ return FALSE;
+
+ m_listening_info.cbSize = sizeof(m_listening_info);
+ m_listening_info.ptszPlayer = mir_tstrdup(m_name);
+ m_listening_info.ptszType = mir_tstrdup(_T("Music")); //TODO:support foobar radio
+ m_listening_info.dwFlags = LTI_TCHAR;
+
+ BSTR strResult = SysAllocString( L"");
+ BSTR strFormat = SysAllocString( L"");
+
+ for(int i = 0; i < SIZEOF(info); i++) {
+ SysReAllocString(&strFormat,info[i].ptszFormat);
+ if(S_OK!=(hr = m_comPlayback->FormatTitle(strFormat, &strResult)))
+ break;
+ info[i].ptszValue = mir_bstr2t(strResult);
+ }
+ BSTRFREE(strResult);
+ BSTRFREE(strFormat);
+ if(SUCCEEDED(hr)) {
+ return TRUE;
+ }
+ FreeData();
+ return FALSE;
+}
+
+BOOL
+Foobar::GetListeningInfo(LISTENINGTOINFO *lti)
+{
+ switch(m_enabled){
+ case 1: //COM
+ FreeData();
+ return COM_infoCache() ? Player::GetListeningInfo(lti) : FALSE;
+ case 2: //MLT
+ if(m_needPoll && FindWindow() == NULL)
+ return FALSE;
+ return Player::GetListeningInfo(lti);
+ }
+ return FALSE;
+}
+
+// ***** COM_OnEventInvoke() is inoked by the TEventHandler based class object *****
+// ***** when an event is fired from the COM object that implements .FiringObject. *****
+HRESULT
+Foobar::COM_OnEventInvoke(
+ void* pEventHandler,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS FAR* pDispParams,
+ VARIANT FAR* pVarResult,
+ EXCEPINFO FAR* pExcepInfo,
+ UINT FAR* puArgErr )
+{
+ if (!pDispParams)
+ return E_POINTER;
+ if (pDispParams->cNamedArgs != 0)
+ return DISP_E_NONAMEDARGS;
+
+ HRESULT hr = S_OK;
+ if (pEventHandler==m_comPlaybackEventSink) {
+ switch (dispIdMember) {
+ case 0x00000001:
+ {//HRESULT Started([in] VARIANT_BOOL bPaused);
+ DEBUGOUT("foo_Evt:\tStartet = ", pDispParams->rgvarg[0].boolVal !=0 ? "FALSE" : "TRUE");
+ m_state = pDispParams->rgvarg[0].boolVal !=0 ? PL_STOPPED : PL_PLAYING;
+ NotifyInfoChanged();
+ } break;
+ case 0x00000002:
+ {//HRESULT Stopped([in] fbStopReason lStopReason);
+ switch (pDispParams->rgvarg[0].lVal) {
+ case fbStopReasonUser:
+ DEBUGOUT("foo_Evt:\tStopped = ","ReasonUser");
+ m_state = PL_STOPPED;
+ NotifyInfoChanged();
+ break;
+ case fbStopReasonEOF:
+ DEBUGOUT("foo_Evt:\tStopped = ","ReasonEOF");
+ m_state = PL_STOPPED;
+ NotifyInfoChanged();
+ break;
+ case fbStopReasonStartingAnother:
+ DEBUGOUT("foo_Evt:\tStopped = ","StartingAnother");
+ m_state = PL_PLAYING;
+ break;
+ default:
+ DEBUGOUT("foo_Evt:\tStopped = ","#NF");
+ break;
+ }
+ } break;
+ case 0x00000003:
+ {//HRESULT Paused([in] VARIANT_BOOL bPaused);
+ DEBUGOUT("foo_Evt:\tPaused = ", pDispParams->rgvarg[0].boolVal !=0 ? "TRUE" : "FALSE");
+ m_state = pDispParams->rgvarg[0].boolVal !=0 ? PL_PAUSED : PL_PLAYING;
+ NotifyInfoChanged();
+ } break;
+ case 0x00000004:
+ {//HRESULT TrackChanged([in] VARIANT_BOOL bLocationChanged);
+ DEBUGOUT("foo_Evt:\tTrackChanged = ", pDispParams->rgvarg[0].boolVal !=0 ? "TRUE" : "FALSE");
+ m_state = PL_PLAYING;
+ NotifyInfoChanged();
+ } break;
+ case 0x00000005:
+ {//HRESULT InfoChanged();
+ DEBUGOUT("foo_Evt:\tInfoChanged = ","TRUE");
+ } break;
+ case 0x00009999:
+ {//RPCoff() - this is not a interface member (it is only a event from sink object if count m_cRef == 1);
+ DEBUGOUT("foo_Evt:\t","ServerDisconect");
+ //m_state = PL_OFFLINE;
+ } break;
+ }
+ }
+ else if (pEventHandler==m_comClientHelper07Sink) {
+ switch (dispIdMember) {
+ case 0x00000001:
+ {//HRESULT ServerStateChanged([in] VARIANT_BOOL bServerState);
+ m_vbServerState = pDispParams->rgvarg[0].boolVal;
+ if(m_comPlaybackEventSink)
+ m_comPlaybackEventSink->m_vbServerState = pDispParams->rgvarg[0].boolVal;
+ DEBUGOUT("foo_Evt:\tServerState = ", m_vbServerState !=0 ? "TRUE" : "FALSE");
+ m_vbServerState !=0 ? COM_ConnectServer() : COM_ReleaseServer();
+ } break;
+ case 0x00009999:
+ {//RPCoff() - this is not a interface member (it is only a event from sink object if count m_cRef == 1);
+ DEBUGOUT("foo_Evt:\t","HelperDisconect");
+ } break;
+ }
+ }
+
+ return( hr );
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// MLT ...foo_mlt
+
+HWND
+Foobar::FindWindow()
+{
+ HWND hwnd = NULL;
+ for(int i = 0; i < m_window_classes_num; i++)
+ {
+ hwnd = ::FindWindow(m_window_classes[i], NULL);
+ if (hwnd != NULL)
+ break;
+ }
+ if (hwnd != m_hwnd) {
+ m_hwnd = hwnd;
+ }
+ return m_hwnd;
+}
+
+
+BYTE
+Foobar::GetStatus()
+{
+ if(!m_comApp && FindWindow() == 0)
+ m_state = PL_OFFLINE;
+ return m_state;
+}
+
diff --git a/Plugins/listeningto/players/foobar.h b/Plugins/listeningto/players/foobar.h index b03f6f7..63a9884 100644 --- a/Plugins/listeningto/players/foobar.h +++ b/Plugins/listeningto/players/foobar.h @@ -1,25 +1,114 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
+#pragma once
-class Foobar : public ExternalPlayer
+extern "C"
{
+#include "foo_comserver2\foobar2000_h.h"
+#include "foo_comserver2\COMServer2Helper.h"
+}
+
+#include "TEventHandler.h"
+using namespace TEventHandlerNamespace;
+
+// ***** Make a forward declaration so that our TEventHandler template class can use it. *****
+class Foobar;
+
+// ***** Declare an event handling class using the TEventHandler template. *****
+typedef TEventHandler<Foobar, IVBPlayback, _IVBPlaybackEvents > IMIM_fooEventS;
+typedef TEventHandler<Foobar, IClientHelper07, _IClientHelperEvents07 > IMIM_fooEventH;
+
+class Foobar : public Player
+{
+protected: //only foo:mlt
+ TCHAR **m_window_classes;
+ int m_window_classes_num;
+ HWND FindWindow(); //find Player Window
+
+protected:
+ void EnableDisable();
+
+ //com (foo_comserver2)
+ /* ***** Declare an instance of a COMApplication smart pointer. ***** */
+ IVBApplication *m_comApp;
+ IClientHelper07 *m_comAppH;
+ /* ***** Declare an instance of a IVBPlayback smart pointer. ***** */
+ IVBPlayback *m_comPlayback;
+
+ /* ***** Declare a pointer to a IMIM_fooEventS class which is specially tailored
+ / ***** to receiving events from the _IVBPlaybackEvents events of an
+ / ***** IVBPlayback object (It is designed to be a sink object) *****/
+ IMIM_fooEventH* m_comClientHelper07Sink; //host
+ IMIM_fooEventS* m_comPlaybackEventSink; //server
+
+ VARIANT_BOOL m_vbServerState; //hold the server state VARIANT_TRUE == server is running
+ BSTR m_comRet; //global BSTR for free use
+ BOOL COM_Start();
+ BOOL COM_Stop();
+ BOOL COM_ConnectServer(); //start the COM instance
+ void COM_ReleaseServer(); //stop the COM instance, disconect and free all
+ BOOL COM_infoCache(); //get the listeningTo info
+
+ /* ***** common function that handle events fired from the COM object. *****/
+ HRESULT COM_OnEventInvoke
+ (
+ void* pEventHandler, //client sync Interface (m_comClientHelper07Sink or m_comPlaybackEventSink)
+ DISPID dispIdMember, //server event Interface member
+ REFIID riid, //always NULL (see MSDN)
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS FAR* pDispParams,
+ VARIANT FAR* pVarResult,
+ EXCEPINFO FAR* pExcepInfo,
+ UINT FAR* puArgErr
+ );
+
+ ~Foobar();
+
public:
- Foobar();
+ //common
+ Foobar(int index);
+
+ //COM ...
+ virtual BOOL GetListeningInfo(LISTENINGTOINFO *lti);
+
+ //MLT
+ BYTE GetStatus();
};
diff --git a/Plugins/listeningto/players/generic.cpp b/Plugins/listeningto/players/generic.cpp index 4963010..e7e6f7f 100644 --- a/Plugins/listeningto/players/generic.cpp +++ b/Plugins/listeningto/players/generic.cpp @@ -1,36 +1,53 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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 "..\\commons.h"
-
-
-static LRESULT CALLBACK ReceiverWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
-
+#include "..\commons.h"
-static UINT hTimer = NULL;
+static UINT_PTR hSendTimer = NULL;
+static GenericPlayer *singleton = NULL;
-GenericPlayer *singleton = NULL;
+static LRESULT CALLBACK ReceiverWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+static VOID CALLBACK SendTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
-
-
-int m_log(const TCHAR *function, const TCHAR *fmt, ...)
+int
+m_log(const TCHAR *function, const TCHAR *fmt, ...)
{
#if 0
va_list va;
@@ -70,11 +87,15 @@ int m_log(const TCHAR *function, const TCHAR *fmt, ...) }
-GenericPlayer::GenericPlayer()
+/////////////////////////////////////////////////////////////////////////////
+// main
+
+GenericPlayer::GenericPlayer(int index)
+: Player(index)
{
- name = _T("GenericPlayer");
+ m_name = _T("GenericPlayer");
- enabled = TRUE;
+ m_enabled = TRUE;
received[0] = L'\0';
singleton = this;
@@ -83,32 +104,34 @@ GenericPlayer::GenericPlayer() wc.hInstance = hInst;
wc.lpszClassName = MIRANDA_WINDOWCLASS;
- RegisterClass(&wc);
+ cWndclass = RegisterClass(&wc);
+ DWORD err = GetLastError();
+ if (!cWndclass) {
+ TCHAR msg[1024];
+ wsprintf(msg, TranslateT("Failed to register %s class."),wc.lpszClassName);
+ MessageBox(NULL, msg, _T(MODULE_NAME), MB_ICONSTOP|MB_OK);
+ }
- hWnd = CreateWindow(MIRANDA_WINDOWCLASS, _T("Miranda ListeningTo receiver"),
+ m_hwnd = CreateWindow(MIRANDA_WINDOWCLASS, _T("Miranda ListeningTo receiver"),
0, 0, 0, 0, 0, NULL, NULL, hInst, NULL);
}
-
-
GenericPlayer::~GenericPlayer()
{
- if (hTimer != NULL)
- {
- KillTimer(NULL, hTimer);
- hTimer = NULL;
- }
+ KILLTIMER(hSendTimer);
- DestroyWindow(hWnd);
- hWnd = NULL;
+ DestroyWindow(m_hwnd);
+ m_hwnd = NULL;
+
+ //UnregisterClass(MIRANDA_WINDOWCLASS, hInst);
+ UnregisterClass (MAKEINTATOM(cWndclass),hInst);
+ cWndclass = 0;
- UnregisterClass(MIRANDA_WINDOWCLASS, hInst);
singleton = NULL;
}
-
-
-void GenericPlayer::ProcessReceived()
+void
+GenericPlayer::ProcessReceived()
{
EnterCriticalSection(&cs);
@@ -130,6 +153,7 @@ void GenericPlayer::ProcessReceived() }
// Process string
+ int i;
WCHAR *parts[11] = {0};
int pCount = 0;
WCHAR *p = received;
@@ -144,25 +168,16 @@ void GenericPlayer::ProcessReceived() *p1 = L'\0';
parts[pCount] = p;
- if (pCount < 5)
+ // select known player (default is generic = this)
+ Player *player = m_enabled ? this : NULL;
+ for (i = FIRST_PLAYER; i < NUM_PLAYERS; i++)
{
-// m_log(_T("ProcessReceived"), _T("ERROR: Too little pieces"));
-
- // Ignore
- LeaveCriticalSection(&cs);
- return;
- }
-
- // See if player is enabled
- Player *player = this;
- for (int i = FIRST_PLAYER; i < NUM_PLAYERS; i++)
- {
-#ifdef UNICODE
- WCHAR *player_name = players[i]->name;
-#else
- WCHAR player_name[128];
- MultiByteToWideChar(CP_ACP, 0, players[i]->m_name, -1, player_name, MAX_REGS(player_name));
-#endif
+ #ifdef UNICODE
+ WCHAR *player_name = players[i]->m_name;
+ #else
+ WCHAR player_name[128];
+ MultiByteToWideChar(CP_ACP, 0, players[i]->m_name, -1, player_name, MAX_REGS(player_name));
+ #endif
if (_wcsicmp(parts[1], player_name) == 0)
{
player = players[i];
@@ -170,13 +185,30 @@ void GenericPlayer::ProcessReceived() }
}
+ //is player enabled
+ if(!player || !player->m_enabled) {
+ LeaveCriticalSection(&cs);
+ return;
+ }
- player->FreeData();
-
+ //set player status
+ SetActivePlayer(player->m_index, player->m_index);
+ int status = IsEmpty(parts[0]) ? 0 : _wtoi(parts[0]);
+ switch(status){
+ case 0:
+ player->m_state = player->GetStatus() ? PL_STOPPED : PL_OFFLINE;
+ break;
+ case 1:
+ player->m_state = PL_PLAYING;
+ break;
+ }
- if (wcscmp(L"1", parts[0]) != 0 || IsEmpty(parts[1]) || (IsEmpty(parts[3]) && IsEmpty(parts[4])))
+ player->FreeData();
+ if (pCount < 5 || wcscmp(L"1", parts[0]) != 0 || IsEmpty(parts[1]) || (IsEmpty(parts[3]) && IsEmpty(parts[4])))
{
// Stoped playing or not enought info
+ player->m_state = PL_OFFLINE;
+// SetActivePlayer(player->m_index, -1);
// if (wcscmp(L"1", parts[0]) != 0)
// m_log(_T("ProcessReceived"), _T("END: Stoped playing"));
@@ -185,22 +217,24 @@ void GenericPlayer::ProcessReceived() }
else
{
+ SetActivePlayer(player->m_index, player->m_index);
+
LISTENINGTOINFO *li = player->LockListeningInfo();
- li->cbSize = sizeof(listening_info);
- li->dwFlags = LTI_TCHAR;
- li->ptszType = U2TD(parts[2], L"Music");
- li->ptszTitle = U2T(parts[3]);
- li->ptszArtist = U2T(parts[4]);
- li->ptszAlbum = U2T(parts[5]);
- li->ptszTrack = U2T(parts[6]);
- li->ptszYear = U2T(parts[7]);
- li->ptszGenre = U2T(parts[8]);
+ li->cbSize = sizeof(m_listening_info);
+ li->dwFlags = LTI_TCHAR;
+ li->ptszType = U2TD(parts[2], L"Music");
+ li->ptszTitle = U2T(parts[3]);
+ li->ptszArtist = U2T(parts[4]);
+ li->ptszAlbum = U2T(parts[5]);
+ li->ptszTrack = U2T(parts[6]);
+ li->ptszYear = U2T(parts[7]);
+ li->ptszGenre = U2T(parts[8]);
if (player == this)
li->ptszPlayer = mir_u2t(parts[1]);
else
- li->ptszPlayer = mir_tstrdup(player->name);
+ li->ptszPlayer = mir_tstrdup(player->m_name);
if (parts[9] != NULL)
{
@@ -233,28 +267,13 @@ void GenericPlayer::ProcessReceived() LeaveCriticalSection(&cs);
- NotifyInfoChanged();
+ NotifyInfoChanged(player->m_index);
// m_log(_T("ProcessReceived"), _T("END: Success"));
}
-
-static VOID CALLBACK SendTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
-{
- KillTimer(NULL, hTimer);
- hTimer = NULL;
-
- if (!loaded)
- return;
-
-// m_log(_T("SendTimerProc"), _T("It's time to process"));
-
- if (singleton != NULL)
- singleton->ProcessReceived();
-}
-
-
-void GenericPlayer::NewData(const WCHAR *data, size_t len)
+void
+GenericPlayer::NewData(const WCHAR *data, size_t len)
{
// m_log(_T("NewData"), _T("Processing"));
@@ -280,9 +299,8 @@ void GenericPlayer::NewData(const WCHAR *data, size_t len) // m_log(_T("NewData"), _T("Text: %S"), received);
//#endif
- if (hTimer)
- KillTimer(NULL, hTimer);
- hTimer = SetTimer(NULL, NULL, 300, SendTimerProc); // Do the processing after we return true
+ KILLTIMER(hSendTimer);
+ hSendTimer = SetTimer(NULL, NULL, 300, (TIMERPROC)SendTimerProc); // Do the processing after we return true
}
// else
// {
@@ -292,8 +310,21 @@ void GenericPlayer::NewData(const WCHAR *data, size_t len) LeaveCriticalSection(&cs);
}
+static VOID
+CALLBACK SendTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
+{
+ if (!loaded)
+ return;
+ KILLTIMER(hSendTimer);
+
+// m_log(_T("SendTimerProc"), _T("It's time to process"));
+
+ if (singleton != NULL)
+ singleton->ProcessReceived();
+}
-static LRESULT CALLBACK ReceiverWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+static LRESULT
+CALLBACK ReceiverWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
diff --git a/Plugins/listeningto/players/generic.h b/Plugins/listeningto/players/generic.h index b9e56dd..7f66fe1 100644 --- a/Plugins/listeningto/players/generic.h +++ b/Plugins/listeningto/players/generic.h @@ -1,30 +1,53 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
+#pragma once
+
+int m_log(const TCHAR *function, const TCHAR *fmt, ...);
class GenericPlayer : public Player
{
protected:
- HWND hWnd;
+ ATOM cWndclass;
public:
- GenericPlayer();
+ GenericPlayer(int index);
virtual ~GenericPlayer();
WCHAR received[1024];
diff --git a/Plugins/listeningto/players/iTunes/iTunesCOMInterface.h b/Plugins/listeningto/players/iTunes/iTunesCOMInterface.h new file mode 100644 index 0000000..31e701d --- /dev/null +++ b/Plugins/listeningto/players/iTunes/iTunesCOMInterface.h @@ -0,0 +1,13053 @@ +/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+/* File created by MIDL compiler version 5.01.0164 */
+/* at Thu Oct 20 13:02:07 2005
+ */
+/* Compiler settings for iTunesCOMInterface.idl:
+ Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext
+ error checks: allocation ref bounds_check enum stub_data
+*/
+//@@MIDL_FILE_HEADING( )
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 440
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __iTunesCOMInterface_h__
+#define __iTunesCOMInterface_h__
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IITObject_FWD_DEFINED__
+#define __IITObject_FWD_DEFINED__
+typedef interface IITObject IITObject;
+#endif /* __IITObject_FWD_DEFINED__ */
+
+
+#ifndef __IITSource_FWD_DEFINED__
+#define __IITSource_FWD_DEFINED__
+typedef interface IITSource IITSource;
+#endif /* __IITSource_FWD_DEFINED__ */
+
+
+#ifndef __IITSourceCollection_FWD_DEFINED__
+#define __IITSourceCollection_FWD_DEFINED__
+typedef interface IITSourceCollection IITSourceCollection;
+#endif /* __IITSourceCollection_FWD_DEFINED__ */
+
+
+#ifndef __IITEncoder_FWD_DEFINED__
+#define __IITEncoder_FWD_DEFINED__
+typedef interface IITEncoder IITEncoder;
+#endif /* __IITEncoder_FWD_DEFINED__ */
+
+
+#ifndef __IITEncoderCollection_FWD_DEFINED__
+#define __IITEncoderCollection_FWD_DEFINED__
+typedef interface IITEncoderCollection IITEncoderCollection;
+#endif /* __IITEncoderCollection_FWD_DEFINED__ */
+
+
+#ifndef __IITEQPreset_FWD_DEFINED__
+#define __IITEQPreset_FWD_DEFINED__
+typedef interface IITEQPreset IITEQPreset;
+#endif /* __IITEQPreset_FWD_DEFINED__ */
+
+
+#ifndef __IITEQPresetCollection_FWD_DEFINED__
+#define __IITEQPresetCollection_FWD_DEFINED__
+typedef interface IITEQPresetCollection IITEQPresetCollection;
+#endif /* __IITEQPresetCollection_FWD_DEFINED__ */
+
+
+#ifndef __IITPlaylist_FWD_DEFINED__
+#define __IITPlaylist_FWD_DEFINED__
+typedef interface IITPlaylist IITPlaylist;
+#endif /* __IITPlaylist_FWD_DEFINED__ */
+
+
+#ifndef __IITOperationStatus_FWD_DEFINED__
+#define __IITOperationStatus_FWD_DEFINED__
+typedef interface IITOperationStatus IITOperationStatus;
+#endif /* __IITOperationStatus_FWD_DEFINED__ */
+
+
+#ifndef __IITConvertOperationStatus_FWD_DEFINED__
+#define __IITConvertOperationStatus_FWD_DEFINED__
+typedef interface IITConvertOperationStatus IITConvertOperationStatus;
+#endif /* __IITConvertOperationStatus_FWD_DEFINED__ */
+
+
+#ifndef __IITLibraryPlaylist_FWD_DEFINED__
+#define __IITLibraryPlaylist_FWD_DEFINED__
+typedef interface IITLibraryPlaylist IITLibraryPlaylist;
+#endif /* __IITLibraryPlaylist_FWD_DEFINED__ */
+
+
+#ifndef __IITUserPlaylist_FWD_DEFINED__
+#define __IITUserPlaylist_FWD_DEFINED__
+typedef interface IITUserPlaylist IITUserPlaylist;
+#endif /* __IITUserPlaylist_FWD_DEFINED__ */
+
+
+#ifndef __IITTrack_FWD_DEFINED__
+#define __IITTrack_FWD_DEFINED__
+typedef interface IITTrack IITTrack;
+#endif /* __IITTrack_FWD_DEFINED__ */
+
+
+#ifndef __IITTrackCollection_FWD_DEFINED__
+#define __IITTrackCollection_FWD_DEFINED__
+typedef interface IITTrackCollection IITTrackCollection;
+#endif /* __IITTrackCollection_FWD_DEFINED__ */
+
+
+#ifndef __IITVisual_FWD_DEFINED__
+#define __IITVisual_FWD_DEFINED__
+typedef interface IITVisual IITVisual;
+#endif /* __IITVisual_FWD_DEFINED__ */
+
+
+#ifndef __IITVisualCollection_FWD_DEFINED__
+#define __IITVisualCollection_FWD_DEFINED__
+typedef interface IITVisualCollection IITVisualCollection;
+#endif /* __IITVisualCollection_FWD_DEFINED__ */
+
+
+#ifndef __IITWindow_FWD_DEFINED__
+#define __IITWindow_FWD_DEFINED__
+typedef interface IITWindow IITWindow;
+#endif /* __IITWindow_FWD_DEFINED__ */
+
+
+#ifndef __IITBrowserWindow_FWD_DEFINED__
+#define __IITBrowserWindow_FWD_DEFINED__
+typedef interface IITBrowserWindow IITBrowserWindow;
+#endif /* __IITBrowserWindow_FWD_DEFINED__ */
+
+
+#ifndef __IITWindowCollection_FWD_DEFINED__
+#define __IITWindowCollection_FWD_DEFINED__
+typedef interface IITWindowCollection IITWindowCollection;
+#endif /* __IITWindowCollection_FWD_DEFINED__ */
+
+
+#ifndef __IiTunes_FWD_DEFINED__
+#define __IiTunes_FWD_DEFINED__
+typedef interface IiTunes IiTunes;
+#endif /* __IiTunes_FWD_DEFINED__ */
+
+
+#ifndef ___IiTunesEvents_FWD_DEFINED__
+#define ___IiTunesEvents_FWD_DEFINED__
+typedef interface _IiTunesEvents _IiTunesEvents;
+#endif /* ___IiTunesEvents_FWD_DEFINED__ */
+
+
+#ifndef ___IITConvertOperationStatusEvents_FWD_DEFINED__
+#define ___IITConvertOperationStatusEvents_FWD_DEFINED__
+typedef interface _IITConvertOperationStatusEvents _IITConvertOperationStatusEvents;
+#endif /* ___IITConvertOperationStatusEvents_FWD_DEFINED__ */
+
+
+#ifndef __iTunesApp_FWD_DEFINED__
+#define __iTunesApp_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class iTunesApp iTunesApp;
+#else
+typedef struct iTunesApp iTunesApp;
+#endif /* __cplusplus */
+
+#endif /* __iTunesApp_FWD_DEFINED__ */
+
+
+#ifndef __iTunesConvertOperationStatus_FWD_DEFINED__
+#define __iTunesConvertOperationStatus_FWD_DEFINED__
+
+#ifdef __cplusplus
+typedef class iTunesConvertOperationStatus iTunesConvertOperationStatus;
+#else
+typedef struct iTunesConvertOperationStatus iTunesConvertOperationStatus;
+#endif /* __cplusplus */
+
+#endif /* __iTunesConvertOperationStatus_FWD_DEFINED__ */
+
+
+#ifndef __IITArtwork_FWD_DEFINED__
+#define __IITArtwork_FWD_DEFINED__
+typedef interface IITArtwork IITArtwork;
+#endif /* __IITArtwork_FWD_DEFINED__ */
+
+
+#ifndef __IITArtworkCollection_FWD_DEFINED__
+#define __IITArtworkCollection_FWD_DEFINED__
+typedef interface IITArtworkCollection IITArtworkCollection;
+#endif /* __IITArtworkCollection_FWD_DEFINED__ */
+
+
+#ifndef __IITURLTrack_FWD_DEFINED__
+#define __IITURLTrack_FWD_DEFINED__
+typedef interface IITURLTrack IITURLTrack;
+#endif /* __IITURLTrack_FWD_DEFINED__ */
+
+
+#ifndef __IITAudioCDPlaylist_FWD_DEFINED__
+#define __IITAudioCDPlaylist_FWD_DEFINED__
+typedef interface IITAudioCDPlaylist IITAudioCDPlaylist;
+#endif /* __IITAudioCDPlaylist_FWD_DEFINED__ */
+
+
+#ifndef __IITPlaylistCollection_FWD_DEFINED__
+#define __IITPlaylistCollection_FWD_DEFINED__
+typedef interface IITPlaylistCollection IITPlaylistCollection;
+#endif /* __IITPlaylistCollection_FWD_DEFINED__ */
+
+
+#ifndef __IITIPodSource_FWD_DEFINED__
+#define __IITIPodSource_FWD_DEFINED__
+typedef interface IITIPodSource IITIPodSource;
+#endif /* __IITIPodSource_FWD_DEFINED__ */
+
+
+#ifndef __IITFileOrCDTrack_FWD_DEFINED__
+#define __IITFileOrCDTrack_FWD_DEFINED__
+typedef interface IITFileOrCDTrack IITFileOrCDTrack;
+#endif /* __IITFileOrCDTrack_FWD_DEFINED__ */
+
+
+#ifndef __IITPlaylistWindow_FWD_DEFINED__
+#define __IITPlaylistWindow_FWD_DEFINED__
+typedef interface IITPlaylistWindow IITPlaylistWindow;
+#endif /* __IITPlaylistWindow_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "oaidl.h"
+#include "ocidl.h"
+#include "DispEx.h"
+
+void __RPC_FAR * __RPC_USER MIDL_user_allocate(size_t);
+void __RPC_USER MIDL_user_free( void __RPC_FAR * );
+
+/* interface __MIDL_itf_iTunesCOMInterface_0000 */
+/* [local] */
+
+typedef /* [public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0000_0001
+ { kITTypeLibrary_MajorVersion = 1,
+ kITTypeLibrary_MinorVersion = 7
+ } ITVersion;
+
+typedef /* [public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0000_0002
+ { ITUNES_E_USERCANCEL = 0xa0040201,
+ ITUNES_E_OBJECTDELETED = 0xa0040202,
+ ITUNES_E_OBJECTLOCKED = 0xa0040203,
+ ITUNES_E_CONVERSIONINPROGRESS = 0xa0040204,
+ ITUNES_E_MUSICSTOREDISABLED = 0xa0040205,
+ ITUNES_E_OBJECTEXISTS = 0xa0040206,
+ ITUNES_E_PODCASTSDISABLED = 0xa0040207
+ } ITErrors;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_iTunesCOMInterface_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_iTunesCOMInterface_0000_v0_0_s_ifspec;
+
+
+#ifndef __iTunesLib_LIBRARY_DEFINED__
+#define __iTunesLib_LIBRARY_DEFINED__
+
+/* library iTunesLib */
+/* [helpstring][uuid][version] */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0267_0001
+ { ITPlayerStateStopped = 0,
+ ITPlayerStatePlaying = ITPlayerStateStopped + 1,
+ ITPlayerStateFastForward = ITPlayerStatePlaying + 1,
+ ITPlayerStateRewind = ITPlayerStateFastForward + 1
+ } ITPlayerState;
+
+typedef /* [public][public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0267_0002
+ { ITVisualSizeSmall = 0,
+ ITVisualSizeMedium = ITVisualSizeSmall + 1,
+ ITVisualSizeLarge = ITVisualSizeMedium + 1
+ } ITVisualSize;
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0267_0003
+ { ITCOMDisabledReasonOther = 0,
+ ITCOMDisabledReasonDialog = ITCOMDisabledReasonOther + 1,
+ ITCOMDisabledReasonQuitting = ITCOMDisabledReasonDialog + 1
+ } ITCOMDisabledReason;
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0267_0004
+ { ITPlayButtonStatePlayDisabled = 0,
+ ITPlayButtonStatePlayEnabled = ITPlayButtonStatePlayDisabled + 1,
+ ITPlayButtonStatePauseEnabled = ITPlayButtonStatePlayEnabled + 1,
+ ITPlayButtonStatePauseDisabled = ITPlayButtonStatePauseEnabled + 1,
+ ITPlayButtonStateStopEnabled = ITPlayButtonStatePauseDisabled + 1,
+ ITPlayButtonStateStopDisabled = ITPlayButtonStateStopEnabled + 1
+ } ITPlayButtonState;
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0267_0005
+ { ITPlayerButtonPrevious = 0,
+ ITPlayerButtonPlay = ITPlayerButtonPrevious + 1,
+ ITPlayerButtonNext = ITPlayerButtonPlay + 1
+ } ITPlayerButton;
+
+typedef /* [public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0267_0006
+ { ITPlayerButtonModifierKeyNone = 0,
+ ITPlayerButtonModifierKeyShift = 1,
+ ITPlayerButtonModifierKeyControl = 2,
+ ITPlayerButtonModifierKeyAlt = 4,
+ ITPlayerButtonModifierKeyCapsLock = 8
+ } ITPlayerButtonModifierKey;
+
+typedef /* [public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0270_0001
+ { ITEventDatabaseChanged = 1,
+ ITEventPlayerPlay = 2,
+ ITEventPlayerStop = 3,
+ ITEventPlayerPlayingTrackChanged = 4,
+ ITEventUserInterfaceEnabled = 5,
+ ITEventCOMCallsDisabled = 6,
+ ITEventCOMCallsEnabled = 7,
+ ITEventQuitting = 8,
+ ITEventAboutToPromptUserToQuit = 9,
+ ITEventSoundVolumeChanged = 10
+ } ITEvent;
+
+typedef /* [public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0271_0001
+ { ITConvertOperationStatusChanged = 1,
+ ITConvertOperationComplete = 2
+ } ITConvertOperationStatusEvent;
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0272_0001
+ { ITArtworkFormatUnknown = 0,
+ ITArtworkFormatJPEG = ITArtworkFormatUnknown + 1,
+ ITArtworkFormatPNG = ITArtworkFormatJPEG + 1,
+ ITArtworkFormatBMP = ITArtworkFormatPNG + 1
+ } ITArtworkFormat;
+
+
+
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0278_0001
+ { ITPlaylistKindUnknown = 0,
+ ITPlaylistKindLibrary = ITPlaylistKindUnknown + 1,
+ ITPlaylistKindUser = ITPlaylistKindLibrary + 1,
+ ITPlaylistKindCD = ITPlaylistKindUser + 1,
+ ITPlaylistKindDevice = ITPlaylistKindCD + 1,
+ ITPlaylistKindRadioTuner = ITPlaylistKindDevice + 1
+ } ITPlaylistKind;
+
+typedef /* [public][public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0278_0002
+ { ITPlaylistRepeatModeOff = 0,
+ ITPlaylistRepeatModeOne = ITPlaylistRepeatModeOff + 1,
+ ITPlaylistRepeatModeAll = ITPlaylistRepeatModeOne + 1
+ } ITPlaylistRepeatMode;
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0278_0003
+ { ITPlaylistPrintKindPlaylist = 0,
+ ITPlaylistPrintKindAlbumlist = ITPlaylistPrintKindPlaylist + 1,
+ ITPlaylistPrintKindInsert = ITPlaylistPrintKindAlbumlist + 1
+ } ITPlaylistPrintKind;
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0278_0004
+ { ITPlaylistSearchFieldAll = 0,
+ ITPlaylistSearchFieldVisible = ITPlaylistSearchFieldAll + 1,
+ ITPlaylistSearchFieldArtists = ITPlaylistSearchFieldVisible + 1,
+ ITPlaylistSearchFieldAlbums = ITPlaylistSearchFieldArtists + 1,
+ ITPlaylistSearchFieldComposers = ITPlaylistSearchFieldAlbums + 1,
+ ITPlaylistSearchFieldSongNames = ITPlaylistSearchFieldComposers + 1
+ } ITPlaylistSearchField;
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0280_0001
+ { ITUserPlaylistSpecialKindNone = 0,
+ ITUserPlaylistSpecialKindPurchasedMusic = ITUserPlaylistSpecialKindNone + 1,
+ ITUserPlaylistSpecialKindPartyShuffle = ITUserPlaylistSpecialKindPurchasedMusic + 1,
+ ITUserPlaylistSpecialKindPodcasts = ITUserPlaylistSpecialKindPartyShuffle + 1,
+ ITUserPlaylistSpecialKindFolder = ITUserPlaylistSpecialKindPodcasts + 1,
+ ITUserPlaylistSpecialKindVideos = ITUserPlaylistSpecialKindFolder + 1
+ } ITUserPlaylistSpecialKind;
+
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0283_0001
+ { ITSourceKindUnknown = 0,
+ ITSourceKindLibrary = ITSourceKindUnknown + 1,
+ ITSourceKindIPod = ITSourceKindLibrary + 1,
+ ITSourceKindAudioCD = ITSourceKindIPod + 1,
+ ITSourceKindMP3CD = ITSourceKindAudioCD + 1,
+ ITSourceKindDevice = ITSourceKindMP3CD + 1,
+ ITSourceKindRadioTuner = ITSourceKindDevice + 1,
+ ITSourceKindSharedLibrary = ITSourceKindRadioTuner + 1
+ } ITSourceKind;
+
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0286_0001
+ { ITTrackKindUnknown = 0,
+ ITTrackKindFile = ITTrackKindUnknown + 1,
+ ITTrackKindCD = ITTrackKindFile + 1,
+ ITTrackKindURL = ITTrackKindCD + 1,
+ ITTrackKindDevice = ITTrackKindURL + 1,
+ ITTrackKindSharedLibrary = ITTrackKindDevice + 1
+ } ITTrackKind;
+
+typedef /* [public][public][v1_enum][uuid] */
+enum __MIDL___MIDL_itf_iTunesCOMInterface_0292_0001
+ { ITWindowKindUnknown = 0,
+ ITWindowKindBrowser = ITWindowKindUnknown + 1,
+ ITWindowKindPlaylist = ITWindowKindBrowser + 1,
+ ITWindowKindEQ = ITWindowKindPlaylist + 1,
+ ITWindowKindArtwork = ITWindowKindEQ + 1,
+ ITWindowKindNowPlaying = ITWindowKindArtwork + 1
+ } ITWindowKind;
+
+
+EXTERN_C const IID LIBID_iTunesLib;
+
+#ifndef __IITObject_INTERFACE_DEFINED__
+#define __IITObject_INTERFACE_DEFINED__
+
+/* interface IITObject */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITObject;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("9FAB0E27-70D7-4e3a-9965-B0C8B8869BB6")
+ IITObject : public IDispatch
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetITObjectIDs(
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Name(
+ /* [retval][out] */ BSTR __RPC_FAR *name) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Name(
+ /* [in] */ BSTR name) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Index(
+ /* [retval][out] */ long __RPC_FAR *index) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SourceID(
+ /* [retval][out] */ long __RPC_FAR *sourceID) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_PlaylistID(
+ /* [retval][out] */ long __RPC_FAR *playlistID) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_TrackID(
+ /* [retval][out] */ long __RPC_FAR *trackID) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_TrackDatabaseID(
+ /* [retval][out] */ long __RPC_FAR *databaseID) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITObjectVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITObject __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITObject __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITObject __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITObject __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITObject __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITObject __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITObject __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITObject __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITObject __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ END_INTERFACE
+ } IITObjectVtbl;
+
+ interface IITObject
+ {
+ CONST_VTBL struct IITObjectVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITObject_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITObject_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITObject_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITObject_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITObject_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITObject_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITObject_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITObject_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITObject_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITObject_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITObject_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITObject_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITObject_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITObject_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITObject_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITObject_GetITObjectIDs_Proxy(
+ IITObject __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+
+void __RPC_STUB IITObject_GetITObjectIDs_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITObject_get_Name_Proxy(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+
+void __RPC_STUB IITObject_get_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITObject_put_Name_Proxy(
+ IITObject __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+
+void __RPC_STUB IITObject_put_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITObject_get_Index_Proxy(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+
+void __RPC_STUB IITObject_get_Index_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITObject_get_SourceID_Proxy(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+
+void __RPC_STUB IITObject_get_SourceID_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITObject_get_PlaylistID_Proxy(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+
+void __RPC_STUB IITObject_get_PlaylistID_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITObject_get_TrackID_Proxy(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+
+void __RPC_STUB IITObject_get_TrackID_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITObject_get_TrackDatabaseID_Proxy(
+ IITObject __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+
+void __RPC_STUB IITObject_get_TrackDatabaseID_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITObject_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITSource_INTERFACE_DEFINED__
+#define __IITSource_INTERFACE_DEFINED__
+
+/* interface IITSource */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITSource;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("AEC1C4D3-AEF1-4255-B892-3E3D13ADFDF9")
+ IITSource : public IITObject
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Kind(
+ /* [retval][out] */ ITSourceKind __RPC_FAR *kind) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Capacity(
+ /* [retval][out] */ double __RPC_FAR *capacity) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_FreeSpace(
+ /* [retval][out] */ double __RPC_FAR *freespace) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Playlists(
+ /* [retval][out] */ IITPlaylistCollection __RPC_FAR *__RPC_FAR *iPlaylistCollection) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITSourceVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITSource __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITSource __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITSource __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITSource __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITSource __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITSource __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITSource __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITSource __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITSource __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ ITSourceKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Capacity )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *capacity);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FreeSpace )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *freespace);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Playlists )(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylistCollection __RPC_FAR *__RPC_FAR *iPlaylistCollection);
+
+ END_INTERFACE
+ } IITSourceVtbl;
+
+ interface IITSource
+ {
+ CONST_VTBL struct IITSourceVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITSource_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITSource_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITSource_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITSource_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITSource_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITSource_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITSource_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITSource_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITSource_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITSource_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITSource_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITSource_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITSource_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITSource_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITSource_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITSource_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITSource_get_Capacity(This,capacity) \
+ (This)->lpVtbl -> get_Capacity(This,capacity)
+
+#define IITSource_get_FreeSpace(This,freespace) \
+ (This)->lpVtbl -> get_FreeSpace(This,freespace)
+
+#define IITSource_get_Playlists(This,iPlaylistCollection) \
+ (This)->lpVtbl -> get_Playlists(This,iPlaylistCollection)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITSource_get_Kind_Proxy(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ ITSourceKind __RPC_FAR *kind);
+
+
+void __RPC_STUB IITSource_get_Kind_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITSource_get_Capacity_Proxy(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *capacity);
+
+
+void __RPC_STUB IITSource_get_Capacity_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITSource_get_FreeSpace_Proxy(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *freespace);
+
+
+void __RPC_STUB IITSource_get_FreeSpace_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITSource_get_Playlists_Proxy(
+ IITSource __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylistCollection __RPC_FAR *__RPC_FAR *iPlaylistCollection);
+
+
+void __RPC_STUB IITSource_get_Playlists_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITSource_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITSourceCollection_INTERFACE_DEFINED__
+#define __IITSourceCollection_INTERFACE_DEFINED__
+
+/* interface IITSourceCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITSourceCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("2FF6CE20-FF87-4183-B0B3-F323D047AF41")
+ IITSourceCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ long __RPC_FAR *count) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ long index,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ItemByName(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource) = 0;
+
+ virtual /* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITSourceCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITSourceCollection __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITSourceCollection __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Item )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItemByName )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+ /* [helpstring][restricted][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__NewEnum )(
+ IITSourceCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+ END_INTERFACE
+ } IITSourceCollectionVtbl;
+
+ interface IITSourceCollection
+ {
+ CONST_VTBL struct IITSourceCollectionVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITSourceCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITSourceCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITSourceCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITSourceCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITSourceCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITSourceCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITSourceCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITSourceCollection_get_Count(This,count) \
+ (This)->lpVtbl -> get_Count(This,count)
+
+#define IITSourceCollection_get_Item(This,index,iSource) \
+ (This)->lpVtbl -> get_Item(This,index,iSource)
+
+#define IITSourceCollection_get_ItemByName(This,name,iSource) \
+ (This)->lpVtbl -> get_ItemByName(This,name,iSource)
+
+#define IITSourceCollection_get__NewEnum(This,iEnumerator) \
+ (This)->lpVtbl -> get__NewEnum(This,iEnumerator)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITSourceCollection_get_Count_Proxy(
+ IITSourceCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+
+void __RPC_STUB IITSourceCollection_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IITSourceCollection_get_Item_Proxy(
+ IITSourceCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+
+void __RPC_STUB IITSourceCollection_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITSourceCollection_get_ItemByName_Proxy(
+ IITSourceCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+
+void __RPC_STUB IITSourceCollection_get_ItemByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE IITSourceCollection_get__NewEnum_Proxy(
+ IITSourceCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+
+void __RPC_STUB IITSourceCollection_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITSourceCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITEncoder_INTERFACE_DEFINED__
+#define __IITEncoder_INTERFACE_DEFINED__
+
+/* interface IITEncoder */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITEncoder;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("1CF95A1C-55FE-4f45-A2D3-85AC6C504A73")
+ IITEncoder : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Name(
+ /* [retval][out] */ BSTR __RPC_FAR *name) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Format(
+ /* [retval][out] */ BSTR __RPC_FAR *format) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITEncoderVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITEncoder __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITEncoder __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITEncoder __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITEncoder __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITEncoder __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITEncoder __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITEncoder __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITEncoder __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Format )(
+ IITEncoder __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *format);
+
+ END_INTERFACE
+ } IITEncoderVtbl;
+
+ interface IITEncoder
+ {
+ CONST_VTBL struct IITEncoderVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITEncoder_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITEncoder_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITEncoder_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITEncoder_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITEncoder_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITEncoder_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITEncoder_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITEncoder_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITEncoder_get_Format(This,format) \
+ (This)->lpVtbl -> get_Format(This,format)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEncoder_get_Name_Proxy(
+ IITEncoder __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+
+void __RPC_STUB IITEncoder_get_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEncoder_get_Format_Proxy(
+ IITEncoder __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *format);
+
+
+void __RPC_STUB IITEncoder_get_Format_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITEncoder_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITEncoderCollection_INTERFACE_DEFINED__
+#define __IITEncoderCollection_INTERFACE_DEFINED__
+
+/* interface IITEncoderCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITEncoderCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("8862BCA9-168D-4549-A9D5-ADB35E553BA6")
+ IITEncoderCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ long __RPC_FAR *count) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ long index,
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ItemByName(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder) = 0;
+
+ virtual /* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITEncoderCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITEncoderCollection __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITEncoderCollection __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Item )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItemByName )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder);
+
+ /* [helpstring][restricted][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__NewEnum )(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+ END_INTERFACE
+ } IITEncoderCollectionVtbl;
+
+ interface IITEncoderCollection
+ {
+ CONST_VTBL struct IITEncoderCollectionVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITEncoderCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITEncoderCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITEncoderCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITEncoderCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITEncoderCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITEncoderCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITEncoderCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITEncoderCollection_get_Count(This,count) \
+ (This)->lpVtbl -> get_Count(This,count)
+
+#define IITEncoderCollection_get_Item(This,index,iEncoder) \
+ (This)->lpVtbl -> get_Item(This,index,iEncoder)
+
+#define IITEncoderCollection_get_ItemByName(This,name,iEncoder) \
+ (This)->lpVtbl -> get_ItemByName(This,name,iEncoder)
+
+#define IITEncoderCollection_get__NewEnum(This,iEnumerator) \
+ (This)->lpVtbl -> get__NewEnum(This,iEnumerator)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEncoderCollection_get_Count_Proxy(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+
+void __RPC_STUB IITEncoderCollection_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IITEncoderCollection_get_Item_Proxy(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder);
+
+
+void __RPC_STUB IITEncoderCollection_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEncoderCollection_get_ItemByName_Proxy(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder);
+
+
+void __RPC_STUB IITEncoderCollection_get_ItemByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE IITEncoderCollection_get__NewEnum_Proxy(
+ IITEncoderCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+
+void __RPC_STUB IITEncoderCollection_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITEncoderCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITEQPreset_INTERFACE_DEFINED__
+#define __IITEQPreset_INTERFACE_DEFINED__
+
+/* interface IITEQPreset */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITEQPreset;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("5BE75F4F-68FA-4212-ACB7-BE44EA569759")
+ IITEQPreset : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Name(
+ /* [retval][out] */ BSTR __RPC_FAR *name) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Modifiable(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isModifiable) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Preamp(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Preamp(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band1(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band1(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band2(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band2(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band3(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band3(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band4(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band4(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band5(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band5(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band6(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band6(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band7(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band7(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band8(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band8(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band9(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band9(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Band10(
+ /* [retval][out] */ double __RPC_FAR *level) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Band10(
+ /* [in] */ double level) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Delete(
+ /* [in] */ VARIANT_BOOL updateAllTracks) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Rename(
+ /* [in] */ BSTR newName,
+ /* [in] */ VARIANT_BOOL updateAllTracks) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITEQPresetVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITEQPreset __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITEQPreset __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITEQPreset __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Modifiable )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isModifiable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Preamp )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Preamp )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band1 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band1 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band2 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band2 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band3 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band3 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band4 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band4 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band5 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band5 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band6 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band6 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band7 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band7 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band8 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band8 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band9 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band9 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Band10 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Band10 )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL updateAllTracks);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Rename )(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ BSTR newName,
+ /* [in] */ VARIANT_BOOL updateAllTracks);
+
+ END_INTERFACE
+ } IITEQPresetVtbl;
+
+ interface IITEQPreset
+ {
+ CONST_VTBL struct IITEQPresetVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITEQPreset_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITEQPreset_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITEQPreset_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITEQPreset_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITEQPreset_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITEQPreset_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITEQPreset_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITEQPreset_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITEQPreset_get_Modifiable(This,isModifiable) \
+ (This)->lpVtbl -> get_Modifiable(This,isModifiable)
+
+#define IITEQPreset_get_Preamp(This,level) \
+ (This)->lpVtbl -> get_Preamp(This,level)
+
+#define IITEQPreset_put_Preamp(This,level) \
+ (This)->lpVtbl -> put_Preamp(This,level)
+
+#define IITEQPreset_get_Band1(This,level) \
+ (This)->lpVtbl -> get_Band1(This,level)
+
+#define IITEQPreset_put_Band1(This,level) \
+ (This)->lpVtbl -> put_Band1(This,level)
+
+#define IITEQPreset_get_Band2(This,level) \
+ (This)->lpVtbl -> get_Band2(This,level)
+
+#define IITEQPreset_put_Band2(This,level) \
+ (This)->lpVtbl -> put_Band2(This,level)
+
+#define IITEQPreset_get_Band3(This,level) \
+ (This)->lpVtbl -> get_Band3(This,level)
+
+#define IITEQPreset_put_Band3(This,level) \
+ (This)->lpVtbl -> put_Band3(This,level)
+
+#define IITEQPreset_get_Band4(This,level) \
+ (This)->lpVtbl -> get_Band4(This,level)
+
+#define IITEQPreset_put_Band4(This,level) \
+ (This)->lpVtbl -> put_Band4(This,level)
+
+#define IITEQPreset_get_Band5(This,level) \
+ (This)->lpVtbl -> get_Band5(This,level)
+
+#define IITEQPreset_put_Band5(This,level) \
+ (This)->lpVtbl -> put_Band5(This,level)
+
+#define IITEQPreset_get_Band6(This,level) \
+ (This)->lpVtbl -> get_Band6(This,level)
+
+#define IITEQPreset_put_Band6(This,level) \
+ (This)->lpVtbl -> put_Band6(This,level)
+
+#define IITEQPreset_get_Band7(This,level) \
+ (This)->lpVtbl -> get_Band7(This,level)
+
+#define IITEQPreset_put_Band7(This,level) \
+ (This)->lpVtbl -> put_Band7(This,level)
+
+#define IITEQPreset_get_Band8(This,level) \
+ (This)->lpVtbl -> get_Band8(This,level)
+
+#define IITEQPreset_put_Band8(This,level) \
+ (This)->lpVtbl -> put_Band8(This,level)
+
+#define IITEQPreset_get_Band9(This,level) \
+ (This)->lpVtbl -> get_Band9(This,level)
+
+#define IITEQPreset_put_Band9(This,level) \
+ (This)->lpVtbl -> put_Band9(This,level)
+
+#define IITEQPreset_get_Band10(This,level) \
+ (This)->lpVtbl -> get_Band10(This,level)
+
+#define IITEQPreset_put_Band10(This,level) \
+ (This)->lpVtbl -> put_Band10(This,level)
+
+#define IITEQPreset_Delete(This,updateAllTracks) \
+ (This)->lpVtbl -> Delete(This,updateAllTracks)
+
+#define IITEQPreset_Rename(This,newName,updateAllTracks) \
+ (This)->lpVtbl -> Rename(This,newName,updateAllTracks)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Name_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+
+void __RPC_STUB IITEQPreset_get_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Modifiable_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isModifiable);
+
+
+void __RPC_STUB IITEQPreset_get_Modifiable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Preamp_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Preamp_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Preamp_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Preamp_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band1_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band1_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band1_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band1_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band2_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band2_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band2_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band2_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band3_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band3_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band3_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band3_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band4_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band4_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band4_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band4_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band5_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band5_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band5_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band5_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band6_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band6_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band6_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band6_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band7_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band7_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band7_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band7_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band8_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band8_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band8_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band8_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band9_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band9_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band9_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band9_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPreset_get_Band10_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *level);
+
+
+void __RPC_STUB IITEQPreset_get_Band10_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITEQPreset_put_Band10_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ double level);
+
+
+void __RPC_STUB IITEQPreset_put_Band10_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITEQPreset_Delete_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL updateAllTracks);
+
+
+void __RPC_STUB IITEQPreset_Delete_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITEQPreset_Rename_Proxy(
+ IITEQPreset __RPC_FAR * This,
+ /* [in] */ BSTR newName,
+ /* [in] */ VARIANT_BOOL updateAllTracks);
+
+
+void __RPC_STUB IITEQPreset_Rename_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITEQPreset_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITEQPresetCollection_INTERFACE_DEFINED__
+#define __IITEQPresetCollection_INTERFACE_DEFINED__
+
+/* interface IITEQPresetCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITEQPresetCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("AEF4D111-3331-48da-B0C2-B468D5D61D08")
+ IITEQPresetCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ long __RPC_FAR *count) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ long index,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ItemByName(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset) = 0;
+
+ virtual /* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITEQPresetCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITEQPresetCollection __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITEQPresetCollection __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Item )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItemByName )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset);
+
+ /* [helpstring][restricted][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__NewEnum )(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+ END_INTERFACE
+ } IITEQPresetCollectionVtbl;
+
+ interface IITEQPresetCollection
+ {
+ CONST_VTBL struct IITEQPresetCollectionVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITEQPresetCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITEQPresetCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITEQPresetCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITEQPresetCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITEQPresetCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITEQPresetCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITEQPresetCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITEQPresetCollection_get_Count(This,count) \
+ (This)->lpVtbl -> get_Count(This,count)
+
+#define IITEQPresetCollection_get_Item(This,index,iEQPreset) \
+ (This)->lpVtbl -> get_Item(This,index,iEQPreset)
+
+#define IITEQPresetCollection_get_ItemByName(This,name,iEQPreset) \
+ (This)->lpVtbl -> get_ItemByName(This,name,iEQPreset)
+
+#define IITEQPresetCollection_get__NewEnum(This,iEnumerator) \
+ (This)->lpVtbl -> get__NewEnum(This,iEnumerator)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPresetCollection_get_Count_Proxy(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+
+void __RPC_STUB IITEQPresetCollection_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IITEQPresetCollection_get_Item_Proxy(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset);
+
+
+void __RPC_STUB IITEQPresetCollection_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITEQPresetCollection_get_ItemByName_Proxy(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset);
+
+
+void __RPC_STUB IITEQPresetCollection_get_ItemByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE IITEQPresetCollection_get__NewEnum_Proxy(
+ IITEQPresetCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+
+void __RPC_STUB IITEQPresetCollection_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITEQPresetCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITPlaylist_INTERFACE_DEFINED__
+#define __IITPlaylist_INTERFACE_DEFINED__
+
+/* interface IITPlaylist */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITPlaylist;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("3D5E072F-2A77-4b17-9E73-E03B77CCCCA9")
+ IITPlaylist : public IITObject
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Delete( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE PlayFirstTrack( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Print(
+ /* [in] */ VARIANT_BOOL showPrintDialog,
+ /* [in] */ ITPlaylistPrintKind printKind,
+ /* [in] */ BSTR theme) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Search(
+ /* [in] */ BSTR searchText,
+ /* [in] */ ITPlaylistSearchField searchFields,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Kind(
+ /* [retval][out] */ ITPlaylistKind __RPC_FAR *kind) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Source(
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Duration(
+ /* [retval][out] */ long __RPC_FAR *duration) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Shuffle(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShuffle) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Shuffle(
+ /* [in] */ VARIANT_BOOL shouldShuffle) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Size(
+ /* [retval][out] */ double __RPC_FAR *size) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SongRepeat(
+ /* [retval][out] */ ITPlaylistRepeatMode __RPC_FAR *repeatMode) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_SongRepeat(
+ /* [in] */ ITPlaylistRepeatMode repeatMode) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Time(
+ /* [retval][out] */ BSTR __RPC_FAR *time) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Visible(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Tracks(
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITPlaylistVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITPlaylist __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITPlaylist __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITPlaylist __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITPlaylist __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITPlaylist __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *PlayFirstTrack )(
+ IITPlaylist __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Print )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL showPrintDialog,
+ /* [in] */ ITPlaylistPrintKind printKind,
+ /* [in] */ BSTR theme);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Search )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR searchText,
+ /* [in] */ ITPlaylistSearchField searchFields,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Source )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Duration )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Shuffle )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShuffle);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Shuffle )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldShuffle);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Size )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *size);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SongRepeat )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistRepeatMode __RPC_FAR *repeatMode);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_SongRepeat )(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ ITPlaylistRepeatMode repeatMode);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Time )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Visible )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Tracks )(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ END_INTERFACE
+ } IITPlaylistVtbl;
+
+ interface IITPlaylist
+ {
+ CONST_VTBL struct IITPlaylistVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITPlaylist_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITPlaylist_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITPlaylist_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITPlaylist_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITPlaylist_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITPlaylist_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITPlaylist_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITPlaylist_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITPlaylist_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITPlaylist_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITPlaylist_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITPlaylist_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITPlaylist_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITPlaylist_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITPlaylist_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITPlaylist_Delete(This) \
+ (This)->lpVtbl -> Delete(This)
+
+#define IITPlaylist_PlayFirstTrack(This) \
+ (This)->lpVtbl -> PlayFirstTrack(This)
+
+#define IITPlaylist_Print(This,showPrintDialog,printKind,theme) \
+ (This)->lpVtbl -> Print(This,showPrintDialog,printKind,theme)
+
+#define IITPlaylist_Search(This,searchText,searchFields,iTrackCollection) \
+ (This)->lpVtbl -> Search(This,searchText,searchFields,iTrackCollection)
+
+#define IITPlaylist_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITPlaylist_get_Source(This,iSource) \
+ (This)->lpVtbl -> get_Source(This,iSource)
+
+#define IITPlaylist_get_Duration(This,duration) \
+ (This)->lpVtbl -> get_Duration(This,duration)
+
+#define IITPlaylist_get_Shuffle(This,isShuffle) \
+ (This)->lpVtbl -> get_Shuffle(This,isShuffle)
+
+#define IITPlaylist_put_Shuffle(This,shouldShuffle) \
+ (This)->lpVtbl -> put_Shuffle(This,shouldShuffle)
+
+#define IITPlaylist_get_Size(This,size) \
+ (This)->lpVtbl -> get_Size(This,size)
+
+#define IITPlaylist_get_SongRepeat(This,repeatMode) \
+ (This)->lpVtbl -> get_SongRepeat(This,repeatMode)
+
+#define IITPlaylist_put_SongRepeat(This,repeatMode) \
+ (This)->lpVtbl -> put_SongRepeat(This,repeatMode)
+
+#define IITPlaylist_get_Time(This,time) \
+ (This)->lpVtbl -> get_Time(This,time)
+
+#define IITPlaylist_get_Visible(This,isVisible) \
+ (This)->lpVtbl -> get_Visible(This,isVisible)
+
+#define IITPlaylist_get_Tracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_Tracks(This,iTrackCollection)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITPlaylist_Delete_Proxy(
+ IITPlaylist __RPC_FAR * This);
+
+
+void __RPC_STUB IITPlaylist_Delete_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITPlaylist_PlayFirstTrack_Proxy(
+ IITPlaylist __RPC_FAR * This);
+
+
+void __RPC_STUB IITPlaylist_PlayFirstTrack_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITPlaylist_Print_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL showPrintDialog,
+ /* [in] */ ITPlaylistPrintKind printKind,
+ /* [in] */ BSTR theme);
+
+
+void __RPC_STUB IITPlaylist_Print_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITPlaylist_Search_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR searchText,
+ /* [in] */ ITPlaylistSearchField searchFields,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+
+void __RPC_STUB IITPlaylist_Search_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_Kind_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistKind __RPC_FAR *kind);
+
+
+void __RPC_STUB IITPlaylist_get_Kind_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_Source_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+
+void __RPC_STUB IITPlaylist_get_Source_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_Duration_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+
+void __RPC_STUB IITPlaylist_get_Duration_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_Shuffle_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShuffle);
+
+
+void __RPC_STUB IITPlaylist_get_Shuffle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITPlaylist_put_Shuffle_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldShuffle);
+
+
+void __RPC_STUB IITPlaylist_put_Shuffle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_Size_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *size);
+
+
+void __RPC_STUB IITPlaylist_get_Size_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_SongRepeat_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistRepeatMode __RPC_FAR *repeatMode);
+
+
+void __RPC_STUB IITPlaylist_get_SongRepeat_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITPlaylist_put_SongRepeat_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [in] */ ITPlaylistRepeatMode repeatMode);
+
+
+void __RPC_STUB IITPlaylist_put_SongRepeat_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_Time_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+
+void __RPC_STUB IITPlaylist_get_Time_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_Visible_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+
+void __RPC_STUB IITPlaylist_get_Visible_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylist_get_Tracks_Proxy(
+ IITPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+
+void __RPC_STUB IITPlaylist_get_Tracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITPlaylist_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITOperationStatus_INTERFACE_DEFINED__
+#define __IITOperationStatus_INTERFACE_DEFINED__
+
+/* interface IITOperationStatus */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITOperationStatus;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("206479C9-FE32-4f9b-A18A-475AC939B479")
+ IITOperationStatus : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_InProgress(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isInProgress) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Tracks(
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITOperationStatusVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITOperationStatus __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITOperationStatus __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITOperationStatus __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITOperationStatus __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITOperationStatus __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITOperationStatus __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITOperationStatus __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_InProgress )(
+ IITOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isInProgress);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Tracks )(
+ IITOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ END_INTERFACE
+ } IITOperationStatusVtbl;
+
+ interface IITOperationStatus
+ {
+ CONST_VTBL struct IITOperationStatusVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITOperationStatus_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITOperationStatus_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITOperationStatus_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITOperationStatus_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITOperationStatus_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITOperationStatus_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITOperationStatus_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITOperationStatus_get_InProgress(This,isInProgress) \
+ (This)->lpVtbl -> get_InProgress(This,isInProgress)
+
+#define IITOperationStatus_get_Tracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_Tracks(This,iTrackCollection)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITOperationStatus_get_InProgress_Proxy(
+ IITOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isInProgress);
+
+
+void __RPC_STUB IITOperationStatus_get_InProgress_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITOperationStatus_get_Tracks_Proxy(
+ IITOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+
+void __RPC_STUB IITOperationStatus_get_Tracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITOperationStatus_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITConvertOperationStatus_INTERFACE_DEFINED__
+#define __IITConvertOperationStatus_INTERFACE_DEFINED__
+
+/* interface IITConvertOperationStatus */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITConvertOperationStatus;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("7063AAF6-ABA0-493b-B4FC-920A9F105875")
+ IITConvertOperationStatus : public IITOperationStatus
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetConversionStatus(
+ /* [out] */ BSTR __RPC_FAR *trackName,
+ /* [out] */ long __RPC_FAR *progressValue,
+ /* [out] */ long __RPC_FAR *maxProgressValue) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE StopConversion( void) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_TrackName(
+ /* [retval][out] */ BSTR __RPC_FAR *trackName) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ProgressValue(
+ /* [retval][out] */ long __RPC_FAR *progressValue) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_MaxProgressValue(
+ /* [retval][out] */ long __RPC_FAR *maxProgressValue) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITConvertOperationStatusVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITConvertOperationStatus __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITConvertOperationStatus __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_InProgress )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isInProgress);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Tracks )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetConversionStatus )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [out] */ BSTR __RPC_FAR *trackName,
+ /* [out] */ long __RPC_FAR *progressValue,
+ /* [out] */ long __RPC_FAR *maxProgressValue);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *StopConversion )(
+ IITConvertOperationStatus __RPC_FAR * This);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackName )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *trackName);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ProgressValue )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *progressValue);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_MaxProgressValue )(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *maxProgressValue);
+
+ END_INTERFACE
+ } IITConvertOperationStatusVtbl;
+
+ interface IITConvertOperationStatus
+ {
+ CONST_VTBL struct IITConvertOperationStatusVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITConvertOperationStatus_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITConvertOperationStatus_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITConvertOperationStatus_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITConvertOperationStatus_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITConvertOperationStatus_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITConvertOperationStatus_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITConvertOperationStatus_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITConvertOperationStatus_get_InProgress(This,isInProgress) \
+ (This)->lpVtbl -> get_InProgress(This,isInProgress)
+
+#define IITConvertOperationStatus_get_Tracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_Tracks(This,iTrackCollection)
+
+
+#define IITConvertOperationStatus_GetConversionStatus(This,trackName,progressValue,maxProgressValue) \
+ (This)->lpVtbl -> GetConversionStatus(This,trackName,progressValue,maxProgressValue)
+
+#define IITConvertOperationStatus_StopConversion(This) \
+ (This)->lpVtbl -> StopConversion(This)
+
+#define IITConvertOperationStatus_get_TrackName(This,trackName) \
+ (This)->lpVtbl -> get_TrackName(This,trackName)
+
+#define IITConvertOperationStatus_get_ProgressValue(This,progressValue) \
+ (This)->lpVtbl -> get_ProgressValue(This,progressValue)
+
+#define IITConvertOperationStatus_get_MaxProgressValue(This,maxProgressValue) \
+ (This)->lpVtbl -> get_MaxProgressValue(This,maxProgressValue)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITConvertOperationStatus_GetConversionStatus_Proxy(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [out] */ BSTR __RPC_FAR *trackName,
+ /* [out] */ long __RPC_FAR *progressValue,
+ /* [out] */ long __RPC_FAR *maxProgressValue);
+
+
+void __RPC_STUB IITConvertOperationStatus_GetConversionStatus_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITConvertOperationStatus_StopConversion_Proxy(
+ IITConvertOperationStatus __RPC_FAR * This);
+
+
+void __RPC_STUB IITConvertOperationStatus_StopConversion_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITConvertOperationStatus_get_TrackName_Proxy(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *trackName);
+
+
+void __RPC_STUB IITConvertOperationStatus_get_TrackName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITConvertOperationStatus_get_ProgressValue_Proxy(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *progressValue);
+
+
+void __RPC_STUB IITConvertOperationStatus_get_ProgressValue_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITConvertOperationStatus_get_MaxProgressValue_Proxy(
+ IITConvertOperationStatus __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *maxProgressValue);
+
+
+void __RPC_STUB IITConvertOperationStatus_get_MaxProgressValue_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITConvertOperationStatus_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITLibraryPlaylist_INTERFACE_DEFINED__
+#define __IITLibraryPlaylist_INTERFACE_DEFINED__
+
+/* interface IITLibraryPlaylist */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITLibraryPlaylist;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("53AE1704-491C-4289-94A0-958815675A3D")
+ IITLibraryPlaylist : public IITPlaylist
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddFile(
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddFiles(
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddURL(
+ /* [in] */ BSTR url,
+ /* [retval][out] */ IITURLTrack __RPC_FAR *__RPC_FAR *iURLTrack) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddTrack(
+ /* [in] */ VARIANT __RPC_FAR *iTrackToAdd,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iAddedTrack) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITLibraryPlaylistVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITLibraryPlaylist __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITLibraryPlaylist __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITLibraryPlaylist __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *PlayFirstTrack )(
+ IITLibraryPlaylist __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Print )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL showPrintDialog,
+ /* [in] */ ITPlaylistPrintKind printKind,
+ /* [in] */ BSTR theme);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Search )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR searchText,
+ /* [in] */ ITPlaylistSearchField searchFields,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Source )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Duration )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Shuffle )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShuffle);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Shuffle )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldShuffle);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Size )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *size);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SongRepeat )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistRepeatMode __RPC_FAR *repeatMode);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_SongRepeat )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ ITPlaylistRepeatMode repeatMode);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Time )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Visible )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Tracks )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddFile )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddFiles )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddURL )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR url,
+ /* [retval][out] */ IITURLTrack __RPC_FAR *__RPC_FAR *iURLTrack);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddTrack )(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTrackToAdd,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iAddedTrack);
+
+ END_INTERFACE
+ } IITLibraryPlaylistVtbl;
+
+ interface IITLibraryPlaylist
+ {
+ CONST_VTBL struct IITLibraryPlaylistVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITLibraryPlaylist_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITLibraryPlaylist_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITLibraryPlaylist_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITLibraryPlaylist_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITLibraryPlaylist_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITLibraryPlaylist_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITLibraryPlaylist_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITLibraryPlaylist_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITLibraryPlaylist_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITLibraryPlaylist_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITLibraryPlaylist_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITLibraryPlaylist_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITLibraryPlaylist_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITLibraryPlaylist_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITLibraryPlaylist_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITLibraryPlaylist_Delete(This) \
+ (This)->lpVtbl -> Delete(This)
+
+#define IITLibraryPlaylist_PlayFirstTrack(This) \
+ (This)->lpVtbl -> PlayFirstTrack(This)
+
+#define IITLibraryPlaylist_Print(This,showPrintDialog,printKind,theme) \
+ (This)->lpVtbl -> Print(This,showPrintDialog,printKind,theme)
+
+#define IITLibraryPlaylist_Search(This,searchText,searchFields,iTrackCollection) \
+ (This)->lpVtbl -> Search(This,searchText,searchFields,iTrackCollection)
+
+#define IITLibraryPlaylist_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITLibraryPlaylist_get_Source(This,iSource) \
+ (This)->lpVtbl -> get_Source(This,iSource)
+
+#define IITLibraryPlaylist_get_Duration(This,duration) \
+ (This)->lpVtbl -> get_Duration(This,duration)
+
+#define IITLibraryPlaylist_get_Shuffle(This,isShuffle) \
+ (This)->lpVtbl -> get_Shuffle(This,isShuffle)
+
+#define IITLibraryPlaylist_put_Shuffle(This,shouldShuffle) \
+ (This)->lpVtbl -> put_Shuffle(This,shouldShuffle)
+
+#define IITLibraryPlaylist_get_Size(This,size) \
+ (This)->lpVtbl -> get_Size(This,size)
+
+#define IITLibraryPlaylist_get_SongRepeat(This,repeatMode) \
+ (This)->lpVtbl -> get_SongRepeat(This,repeatMode)
+
+#define IITLibraryPlaylist_put_SongRepeat(This,repeatMode) \
+ (This)->lpVtbl -> put_SongRepeat(This,repeatMode)
+
+#define IITLibraryPlaylist_get_Time(This,time) \
+ (This)->lpVtbl -> get_Time(This,time)
+
+#define IITLibraryPlaylist_get_Visible(This,isVisible) \
+ (This)->lpVtbl -> get_Visible(This,isVisible)
+
+#define IITLibraryPlaylist_get_Tracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_Tracks(This,iTrackCollection)
+
+
+#define IITLibraryPlaylist_AddFile(This,filePath,iStatus) \
+ (This)->lpVtbl -> AddFile(This,filePath,iStatus)
+
+#define IITLibraryPlaylist_AddFiles(This,filePaths,iStatus) \
+ (This)->lpVtbl -> AddFiles(This,filePaths,iStatus)
+
+#define IITLibraryPlaylist_AddURL(This,url,iURLTrack) \
+ (This)->lpVtbl -> AddURL(This,url,iURLTrack)
+
+#define IITLibraryPlaylist_AddTrack(This,iTrackToAdd,iAddedTrack) \
+ (This)->lpVtbl -> AddTrack(This,iTrackToAdd,iAddedTrack)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITLibraryPlaylist_AddFile_Proxy(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IITLibraryPlaylist_AddFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITLibraryPlaylist_AddFiles_Proxy(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IITLibraryPlaylist_AddFiles_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITLibraryPlaylist_AddURL_Proxy(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR url,
+ /* [retval][out] */ IITURLTrack __RPC_FAR *__RPC_FAR *iURLTrack);
+
+
+void __RPC_STUB IITLibraryPlaylist_AddURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITLibraryPlaylist_AddTrack_Proxy(
+ IITLibraryPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTrackToAdd,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iAddedTrack);
+
+
+void __RPC_STUB IITLibraryPlaylist_AddTrack_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITLibraryPlaylist_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITUserPlaylist_INTERFACE_DEFINED__
+#define __IITUserPlaylist_INTERFACE_DEFINED__
+
+/* interface IITUserPlaylist */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITUserPlaylist;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("0A504DED-A0B5-465a-8A94-50E20D7DF692")
+ IITUserPlaylist : public IITPlaylist
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddFile(
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddFiles(
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddURL(
+ /* [in] */ BSTR url,
+ /* [retval][out] */ IITURLTrack __RPC_FAR *__RPC_FAR *iURLTrack) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddTrack(
+ /* [in] */ VARIANT __RPC_FAR *iTrackToAdd,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iAddedTrack) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Shared(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShared) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Shared(
+ /* [in] */ VARIANT_BOOL shouldBeShared) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Smart(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isSmart) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SpecialKind(
+ /* [retval][out] */ ITUserPlaylistSpecialKind __RPC_FAR *specialKind) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Parent(
+ /* [retval][out] */ IITUserPlaylist __RPC_FAR *__RPC_FAR *iParentPlayList) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CreatePlaylist(
+ /* [in] */ BSTR playlistName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CreateFolder(
+ /* [in] */ BSTR folderName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Parent(
+ /* [in] */ VARIANT __RPC_FAR *iParent) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITUserPlaylistVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITUserPlaylist __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITUserPlaylist __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITUserPlaylist __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *PlayFirstTrack )(
+ IITUserPlaylist __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Print )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL showPrintDialog,
+ /* [in] */ ITPlaylistPrintKind printKind,
+ /* [in] */ BSTR theme);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Search )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR searchText,
+ /* [in] */ ITPlaylistSearchField searchFields,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Source )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Duration )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Shuffle )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShuffle);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Shuffle )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldShuffle);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Size )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *size);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SongRepeat )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistRepeatMode __RPC_FAR *repeatMode);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_SongRepeat )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ ITPlaylistRepeatMode repeatMode);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Time )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Visible )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Tracks )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddFile )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddFiles )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddURL )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR url,
+ /* [retval][out] */ IITURLTrack __RPC_FAR *__RPC_FAR *iURLTrack);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddTrack )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTrackToAdd,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iAddedTrack);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Shared )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShared);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Shared )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeShared);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Smart )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isSmart);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SpecialKind )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITUserPlaylistSpecialKind __RPC_FAR *specialKind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Parent )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITUserPlaylist __RPC_FAR *__RPC_FAR *iParentPlayList);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreatePlaylist )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR playlistName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreateFolder )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR folderName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Parent )(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iParent);
+
+ END_INTERFACE
+ } IITUserPlaylistVtbl;
+
+ interface IITUserPlaylist
+ {
+ CONST_VTBL struct IITUserPlaylistVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITUserPlaylist_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITUserPlaylist_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITUserPlaylist_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITUserPlaylist_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITUserPlaylist_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITUserPlaylist_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITUserPlaylist_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITUserPlaylist_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITUserPlaylist_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITUserPlaylist_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITUserPlaylist_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITUserPlaylist_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITUserPlaylist_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITUserPlaylist_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITUserPlaylist_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITUserPlaylist_Delete(This) \
+ (This)->lpVtbl -> Delete(This)
+
+#define IITUserPlaylist_PlayFirstTrack(This) \
+ (This)->lpVtbl -> PlayFirstTrack(This)
+
+#define IITUserPlaylist_Print(This,showPrintDialog,printKind,theme) \
+ (This)->lpVtbl -> Print(This,showPrintDialog,printKind,theme)
+
+#define IITUserPlaylist_Search(This,searchText,searchFields,iTrackCollection) \
+ (This)->lpVtbl -> Search(This,searchText,searchFields,iTrackCollection)
+
+#define IITUserPlaylist_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITUserPlaylist_get_Source(This,iSource) \
+ (This)->lpVtbl -> get_Source(This,iSource)
+
+#define IITUserPlaylist_get_Duration(This,duration) \
+ (This)->lpVtbl -> get_Duration(This,duration)
+
+#define IITUserPlaylist_get_Shuffle(This,isShuffle) \
+ (This)->lpVtbl -> get_Shuffle(This,isShuffle)
+
+#define IITUserPlaylist_put_Shuffle(This,shouldShuffle) \
+ (This)->lpVtbl -> put_Shuffle(This,shouldShuffle)
+
+#define IITUserPlaylist_get_Size(This,size) \
+ (This)->lpVtbl -> get_Size(This,size)
+
+#define IITUserPlaylist_get_SongRepeat(This,repeatMode) \
+ (This)->lpVtbl -> get_SongRepeat(This,repeatMode)
+
+#define IITUserPlaylist_put_SongRepeat(This,repeatMode) \
+ (This)->lpVtbl -> put_SongRepeat(This,repeatMode)
+
+#define IITUserPlaylist_get_Time(This,time) \
+ (This)->lpVtbl -> get_Time(This,time)
+
+#define IITUserPlaylist_get_Visible(This,isVisible) \
+ (This)->lpVtbl -> get_Visible(This,isVisible)
+
+#define IITUserPlaylist_get_Tracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_Tracks(This,iTrackCollection)
+
+
+#define IITUserPlaylist_AddFile(This,filePath,iStatus) \
+ (This)->lpVtbl -> AddFile(This,filePath,iStatus)
+
+#define IITUserPlaylist_AddFiles(This,filePaths,iStatus) \
+ (This)->lpVtbl -> AddFiles(This,filePaths,iStatus)
+
+#define IITUserPlaylist_AddURL(This,url,iURLTrack) \
+ (This)->lpVtbl -> AddURL(This,url,iURLTrack)
+
+#define IITUserPlaylist_AddTrack(This,iTrackToAdd,iAddedTrack) \
+ (This)->lpVtbl -> AddTrack(This,iTrackToAdd,iAddedTrack)
+
+#define IITUserPlaylist_get_Shared(This,isShared) \
+ (This)->lpVtbl -> get_Shared(This,isShared)
+
+#define IITUserPlaylist_put_Shared(This,shouldBeShared) \
+ (This)->lpVtbl -> put_Shared(This,shouldBeShared)
+
+#define IITUserPlaylist_get_Smart(This,isSmart) \
+ (This)->lpVtbl -> get_Smart(This,isSmart)
+
+#define IITUserPlaylist_get_SpecialKind(This,specialKind) \
+ (This)->lpVtbl -> get_SpecialKind(This,specialKind)
+
+#define IITUserPlaylist_get_Parent(This,iParentPlayList) \
+ (This)->lpVtbl -> get_Parent(This,iParentPlayList)
+
+#define IITUserPlaylist_CreatePlaylist(This,playlistName,iPlaylist) \
+ (This)->lpVtbl -> CreatePlaylist(This,playlistName,iPlaylist)
+
+#define IITUserPlaylist_CreateFolder(This,folderName,iFolder) \
+ (This)->lpVtbl -> CreateFolder(This,folderName,iFolder)
+
+#define IITUserPlaylist_put_Parent(This,iParent) \
+ (This)->lpVtbl -> put_Parent(This,iParent)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_AddFile_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IITUserPlaylist_AddFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_AddFiles_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IITUserPlaylist_AddFiles_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_AddURL_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR url,
+ /* [retval][out] */ IITURLTrack __RPC_FAR *__RPC_FAR *iURLTrack);
+
+
+void __RPC_STUB IITUserPlaylist_AddURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_AddTrack_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTrackToAdd,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iAddedTrack);
+
+
+void __RPC_STUB IITUserPlaylist_AddTrack_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_get_Shared_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShared);
+
+
+void __RPC_STUB IITUserPlaylist_get_Shared_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_put_Shared_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeShared);
+
+
+void __RPC_STUB IITUserPlaylist_put_Shared_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_get_Smart_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isSmart);
+
+
+void __RPC_STUB IITUserPlaylist_get_Smart_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_get_SpecialKind_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITUserPlaylistSpecialKind __RPC_FAR *specialKind);
+
+
+void __RPC_STUB IITUserPlaylist_get_SpecialKind_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_get_Parent_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITUserPlaylist __RPC_FAR *__RPC_FAR *iParentPlayList);
+
+
+void __RPC_STUB IITUserPlaylist_get_Parent_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_CreatePlaylist_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR playlistName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IITUserPlaylist_CreatePlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_CreateFolder_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR folderName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder);
+
+
+void __RPC_STUB IITUserPlaylist_CreateFolder_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITUserPlaylist_put_Parent_Proxy(
+ IITUserPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iParent);
+
+
+void __RPC_STUB IITUserPlaylist_put_Parent_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITUserPlaylist_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITTrack_INTERFACE_DEFINED__
+#define __IITTrack_INTERFACE_DEFINED__
+
+/* interface IITTrack */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITTrack;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("4CB0915D-1E54-4727-BAF3-CE6CC9A225A1")
+ IITTrack : public IITObject
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Delete( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Play( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE AddArtworkFromFile(
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITArtwork __RPC_FAR *__RPC_FAR *iArtwork) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Kind(
+ /* [retval][out] */ ITTrackKind __RPC_FAR *kind) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Playlist(
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Album(
+ /* [retval][out] */ BSTR __RPC_FAR *album) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Album(
+ /* [in] */ BSTR album) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Artist(
+ /* [retval][out] */ BSTR __RPC_FAR *artist) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Artist(
+ /* [in] */ BSTR artist) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_BitRate(
+ /* [retval][out] */ long __RPC_FAR *bitrate) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_BPM(
+ /* [retval][out] */ long __RPC_FAR *beatsPerMinute) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_BPM(
+ /* [in] */ long beatsPerMinute) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Comment(
+ /* [retval][out] */ BSTR __RPC_FAR *comment) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Comment(
+ /* [in] */ BSTR comment) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Compilation(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompilation) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Compilation(
+ /* [in] */ VARIANT_BOOL shouldBeCompilation) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Composer(
+ /* [retval][out] */ BSTR __RPC_FAR *composer) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Composer(
+ /* [in] */ BSTR composer) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_DateAdded(
+ /* [retval][out] */ DATE __RPC_FAR *dateAdded) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_DiscCount(
+ /* [retval][out] */ long __RPC_FAR *discCount) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_DiscCount(
+ /* [in] */ long discCount) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_DiscNumber(
+ /* [retval][out] */ long __RPC_FAR *discNumber) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_DiscNumber(
+ /* [in] */ long discNumber) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Duration(
+ /* [retval][out] */ long __RPC_FAR *duration) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Enabled(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Enabled(
+ /* [in] */ VARIANT_BOOL shouldBeEnabled) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_EQ(
+ /* [retval][out] */ BSTR __RPC_FAR *eq) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_EQ(
+ /* [in] */ BSTR eq) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Finish(
+ /* [in] */ long finish) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Finish(
+ /* [retval][out] */ long __RPC_FAR *finish) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Genre(
+ /* [retval][out] */ BSTR __RPC_FAR *genre) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Genre(
+ /* [in] */ BSTR genre) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Grouping(
+ /* [retval][out] */ BSTR __RPC_FAR *grouping) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Grouping(
+ /* [in] */ BSTR grouping) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_KindAsString(
+ /* [retval][out] */ BSTR __RPC_FAR *kind) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ModificationDate(
+ /* [retval][out] */ DATE __RPC_FAR *dateModified) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_PlayedCount(
+ /* [retval][out] */ long __RPC_FAR *playedCount) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_PlayedCount(
+ /* [in] */ long playedCount) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_PlayedDate(
+ /* [retval][out] */ DATE __RPC_FAR *playedDate) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_PlayedDate(
+ /* [in] */ DATE playedDate) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_PlayOrderIndex(
+ /* [retval][out] */ long __RPC_FAR *index) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Rating(
+ /* [retval][out] */ long __RPC_FAR *rating) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Rating(
+ /* [in] */ long rating) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SampleRate(
+ /* [retval][out] */ long __RPC_FAR *sampleRate) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Size(
+ /* [retval][out] */ long __RPC_FAR *size) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Start(
+ /* [retval][out] */ long __RPC_FAR *start) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Start(
+ /* [in] */ long start) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Time(
+ /* [retval][out] */ BSTR __RPC_FAR *time) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_TrackCount(
+ /* [retval][out] */ long __RPC_FAR *trackCount) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_TrackCount(
+ /* [in] */ long trackCount) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_TrackNumber(
+ /* [retval][out] */ long __RPC_FAR *trackNumber) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_TrackNumber(
+ /* [in] */ long trackNumber) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_VolumeAdjustment(
+ /* [retval][out] */ long __RPC_FAR *volumeAdjustment) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_VolumeAdjustment(
+ /* [in] */ long volumeAdjustment) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Year(
+ /* [retval][out] */ long __RPC_FAR *year) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Year(
+ /* [in] */ long year) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Artwork(
+ /* [retval][out] */ IITArtworkCollection __RPC_FAR *__RPC_FAR *iArtworkCollection) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITTrackVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITTrack __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITTrack __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITTrack __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITTrack __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITTrack __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Play )(
+ IITTrack __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddArtworkFromFile )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITArtwork __RPC_FAR *__RPC_FAR *iArtwork);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ ITTrackKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Playlist )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Album )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *album);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Album )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR album);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Artist )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *artist);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Artist )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR artist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BitRate )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bitrate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BPM )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *beatsPerMinute);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_BPM )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long beatsPerMinute);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Comment )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *comment);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Comment )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR comment);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Compilation )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompilation);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Compilation )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeCompilation);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Composer )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *composer);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Composer )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR composer);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DateAdded )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *dateAdded);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DiscCount )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_DiscCount )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long discCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DiscNumber )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discNumber);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_DiscNumber )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long discNumber);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Duration )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Enabled )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Enabled )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeEnabled);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_EQ )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *eq);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_EQ )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR eq);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Finish )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long finish);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Finish )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *finish);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Genre )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *genre);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Genre )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR genre);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Grouping )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *grouping);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Grouping )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR grouping);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_KindAsString )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ModificationDate )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *dateModified);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayedCount )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playedCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_PlayedCount )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long playedCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayedDate )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *playedDate);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_PlayedDate )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ DATE playedDate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayOrderIndex )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Rating )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *rating);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Rating )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long rating);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SampleRate )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sampleRate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Size )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *size);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Start )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *start);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Start )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long start);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Time )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackCount )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_TrackCount )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long trackCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackNumber )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackNumber);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_TrackNumber )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long trackNumber);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_VolumeAdjustment )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *volumeAdjustment);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_VolumeAdjustment )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long volumeAdjustment);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Year )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *year);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Year )(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long year);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Artwork )(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ IITArtworkCollection __RPC_FAR *__RPC_FAR *iArtworkCollection);
+
+ END_INTERFACE
+ } IITTrackVtbl;
+
+ interface IITTrack
+ {
+ CONST_VTBL struct IITTrackVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITTrack_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITTrack_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITTrack_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITTrack_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITTrack_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITTrack_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITTrack_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITTrack_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITTrack_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITTrack_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITTrack_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITTrack_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITTrack_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITTrack_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITTrack_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITTrack_Delete(This) \
+ (This)->lpVtbl -> Delete(This)
+
+#define IITTrack_Play(This) \
+ (This)->lpVtbl -> Play(This)
+
+#define IITTrack_AddArtworkFromFile(This,filePath,iArtwork) \
+ (This)->lpVtbl -> AddArtworkFromFile(This,filePath,iArtwork)
+
+#define IITTrack_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITTrack_get_Playlist(This,iPlaylist) \
+ (This)->lpVtbl -> get_Playlist(This,iPlaylist)
+
+#define IITTrack_get_Album(This,album) \
+ (This)->lpVtbl -> get_Album(This,album)
+
+#define IITTrack_put_Album(This,album) \
+ (This)->lpVtbl -> put_Album(This,album)
+
+#define IITTrack_get_Artist(This,artist) \
+ (This)->lpVtbl -> get_Artist(This,artist)
+
+#define IITTrack_put_Artist(This,artist) \
+ (This)->lpVtbl -> put_Artist(This,artist)
+
+#define IITTrack_get_BitRate(This,bitrate) \
+ (This)->lpVtbl -> get_BitRate(This,bitrate)
+
+#define IITTrack_get_BPM(This,beatsPerMinute) \
+ (This)->lpVtbl -> get_BPM(This,beatsPerMinute)
+
+#define IITTrack_put_BPM(This,beatsPerMinute) \
+ (This)->lpVtbl -> put_BPM(This,beatsPerMinute)
+
+#define IITTrack_get_Comment(This,comment) \
+ (This)->lpVtbl -> get_Comment(This,comment)
+
+#define IITTrack_put_Comment(This,comment) \
+ (This)->lpVtbl -> put_Comment(This,comment)
+
+#define IITTrack_get_Compilation(This,isCompilation) \
+ (This)->lpVtbl -> get_Compilation(This,isCompilation)
+
+#define IITTrack_put_Compilation(This,shouldBeCompilation) \
+ (This)->lpVtbl -> put_Compilation(This,shouldBeCompilation)
+
+#define IITTrack_get_Composer(This,composer) \
+ (This)->lpVtbl -> get_Composer(This,composer)
+
+#define IITTrack_put_Composer(This,composer) \
+ (This)->lpVtbl -> put_Composer(This,composer)
+
+#define IITTrack_get_DateAdded(This,dateAdded) \
+ (This)->lpVtbl -> get_DateAdded(This,dateAdded)
+
+#define IITTrack_get_DiscCount(This,discCount) \
+ (This)->lpVtbl -> get_DiscCount(This,discCount)
+
+#define IITTrack_put_DiscCount(This,discCount) \
+ (This)->lpVtbl -> put_DiscCount(This,discCount)
+
+#define IITTrack_get_DiscNumber(This,discNumber) \
+ (This)->lpVtbl -> get_DiscNumber(This,discNumber)
+
+#define IITTrack_put_DiscNumber(This,discNumber) \
+ (This)->lpVtbl -> put_DiscNumber(This,discNumber)
+
+#define IITTrack_get_Duration(This,duration) \
+ (This)->lpVtbl -> get_Duration(This,duration)
+
+#define IITTrack_get_Enabled(This,isEnabled) \
+ (This)->lpVtbl -> get_Enabled(This,isEnabled)
+
+#define IITTrack_put_Enabled(This,shouldBeEnabled) \
+ (This)->lpVtbl -> put_Enabled(This,shouldBeEnabled)
+
+#define IITTrack_get_EQ(This,eq) \
+ (This)->lpVtbl -> get_EQ(This,eq)
+
+#define IITTrack_put_EQ(This,eq) \
+ (This)->lpVtbl -> put_EQ(This,eq)
+
+#define IITTrack_put_Finish(This,finish) \
+ (This)->lpVtbl -> put_Finish(This,finish)
+
+#define IITTrack_get_Finish(This,finish) \
+ (This)->lpVtbl -> get_Finish(This,finish)
+
+#define IITTrack_get_Genre(This,genre) \
+ (This)->lpVtbl -> get_Genre(This,genre)
+
+#define IITTrack_put_Genre(This,genre) \
+ (This)->lpVtbl -> put_Genre(This,genre)
+
+#define IITTrack_get_Grouping(This,grouping) \
+ (This)->lpVtbl -> get_Grouping(This,grouping)
+
+#define IITTrack_put_Grouping(This,grouping) \
+ (This)->lpVtbl -> put_Grouping(This,grouping)
+
+#define IITTrack_get_KindAsString(This,kind) \
+ (This)->lpVtbl -> get_KindAsString(This,kind)
+
+#define IITTrack_get_ModificationDate(This,dateModified) \
+ (This)->lpVtbl -> get_ModificationDate(This,dateModified)
+
+#define IITTrack_get_PlayedCount(This,playedCount) \
+ (This)->lpVtbl -> get_PlayedCount(This,playedCount)
+
+#define IITTrack_put_PlayedCount(This,playedCount) \
+ (This)->lpVtbl -> put_PlayedCount(This,playedCount)
+
+#define IITTrack_get_PlayedDate(This,playedDate) \
+ (This)->lpVtbl -> get_PlayedDate(This,playedDate)
+
+#define IITTrack_put_PlayedDate(This,playedDate) \
+ (This)->lpVtbl -> put_PlayedDate(This,playedDate)
+
+#define IITTrack_get_PlayOrderIndex(This,index) \
+ (This)->lpVtbl -> get_PlayOrderIndex(This,index)
+
+#define IITTrack_get_Rating(This,rating) \
+ (This)->lpVtbl -> get_Rating(This,rating)
+
+#define IITTrack_put_Rating(This,rating) \
+ (This)->lpVtbl -> put_Rating(This,rating)
+
+#define IITTrack_get_SampleRate(This,sampleRate) \
+ (This)->lpVtbl -> get_SampleRate(This,sampleRate)
+
+#define IITTrack_get_Size(This,size) \
+ (This)->lpVtbl -> get_Size(This,size)
+
+#define IITTrack_get_Start(This,start) \
+ (This)->lpVtbl -> get_Start(This,start)
+
+#define IITTrack_put_Start(This,start) \
+ (This)->lpVtbl -> put_Start(This,start)
+
+#define IITTrack_get_Time(This,time) \
+ (This)->lpVtbl -> get_Time(This,time)
+
+#define IITTrack_get_TrackCount(This,trackCount) \
+ (This)->lpVtbl -> get_TrackCount(This,trackCount)
+
+#define IITTrack_put_TrackCount(This,trackCount) \
+ (This)->lpVtbl -> put_TrackCount(This,trackCount)
+
+#define IITTrack_get_TrackNumber(This,trackNumber) \
+ (This)->lpVtbl -> get_TrackNumber(This,trackNumber)
+
+#define IITTrack_put_TrackNumber(This,trackNumber) \
+ (This)->lpVtbl -> put_TrackNumber(This,trackNumber)
+
+#define IITTrack_get_VolumeAdjustment(This,volumeAdjustment) \
+ (This)->lpVtbl -> get_VolumeAdjustment(This,volumeAdjustment)
+
+#define IITTrack_put_VolumeAdjustment(This,volumeAdjustment) \
+ (This)->lpVtbl -> put_VolumeAdjustment(This,volumeAdjustment)
+
+#define IITTrack_get_Year(This,year) \
+ (This)->lpVtbl -> get_Year(This,year)
+
+#define IITTrack_put_Year(This,year) \
+ (This)->lpVtbl -> put_Year(This,year)
+
+#define IITTrack_get_Artwork(This,iArtworkCollection) \
+ (This)->lpVtbl -> get_Artwork(This,iArtworkCollection)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITTrack_Delete_Proxy(
+ IITTrack __RPC_FAR * This);
+
+
+void __RPC_STUB IITTrack_Delete_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITTrack_Play_Proxy(
+ IITTrack __RPC_FAR * This);
+
+
+void __RPC_STUB IITTrack_Play_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITTrack_AddArtworkFromFile_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITArtwork __RPC_FAR *__RPC_FAR *iArtwork);
+
+
+void __RPC_STUB IITTrack_AddArtworkFromFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Kind_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ ITTrackKind __RPC_FAR *kind);
+
+
+void __RPC_STUB IITTrack_get_Kind_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Playlist_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IITTrack_get_Playlist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Album_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *album);
+
+
+void __RPC_STUB IITTrack_get_Album_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Album_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR album);
+
+
+void __RPC_STUB IITTrack_put_Album_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Artist_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *artist);
+
+
+void __RPC_STUB IITTrack_get_Artist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Artist_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR artist);
+
+
+void __RPC_STUB IITTrack_put_Artist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_BitRate_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bitrate);
+
+
+void __RPC_STUB IITTrack_get_BitRate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_BPM_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *beatsPerMinute);
+
+
+void __RPC_STUB IITTrack_get_BPM_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_BPM_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long beatsPerMinute);
+
+
+void __RPC_STUB IITTrack_put_BPM_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Comment_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *comment);
+
+
+void __RPC_STUB IITTrack_get_Comment_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Comment_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR comment);
+
+
+void __RPC_STUB IITTrack_put_Comment_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Compilation_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompilation);
+
+
+void __RPC_STUB IITTrack_get_Compilation_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Compilation_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeCompilation);
+
+
+void __RPC_STUB IITTrack_put_Compilation_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Composer_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *composer);
+
+
+void __RPC_STUB IITTrack_get_Composer_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Composer_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR composer);
+
+
+void __RPC_STUB IITTrack_put_Composer_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_DateAdded_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *dateAdded);
+
+
+void __RPC_STUB IITTrack_get_DateAdded_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_DiscCount_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discCount);
+
+
+void __RPC_STUB IITTrack_get_DiscCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_DiscCount_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long discCount);
+
+
+void __RPC_STUB IITTrack_put_DiscCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_DiscNumber_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discNumber);
+
+
+void __RPC_STUB IITTrack_get_DiscNumber_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_DiscNumber_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long discNumber);
+
+
+void __RPC_STUB IITTrack_put_DiscNumber_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Duration_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+
+void __RPC_STUB IITTrack_get_Duration_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Enabled_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+
+void __RPC_STUB IITTrack_get_Enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Enabled_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeEnabled);
+
+
+void __RPC_STUB IITTrack_put_Enabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_EQ_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *eq);
+
+
+void __RPC_STUB IITTrack_get_EQ_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_EQ_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR eq);
+
+
+void __RPC_STUB IITTrack_put_EQ_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Finish_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long finish);
+
+
+void __RPC_STUB IITTrack_put_Finish_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Finish_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *finish);
+
+
+void __RPC_STUB IITTrack_get_Finish_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Genre_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *genre);
+
+
+void __RPC_STUB IITTrack_get_Genre_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Genre_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR genre);
+
+
+void __RPC_STUB IITTrack_put_Genre_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Grouping_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *grouping);
+
+
+void __RPC_STUB IITTrack_get_Grouping_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Grouping_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ BSTR grouping);
+
+
+void __RPC_STUB IITTrack_put_Grouping_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_KindAsString_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *kind);
+
+
+void __RPC_STUB IITTrack_get_KindAsString_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_ModificationDate_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *dateModified);
+
+
+void __RPC_STUB IITTrack_get_ModificationDate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_PlayedCount_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playedCount);
+
+
+void __RPC_STUB IITTrack_get_PlayedCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_PlayedCount_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long playedCount);
+
+
+void __RPC_STUB IITTrack_put_PlayedCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_PlayedDate_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *playedDate);
+
+
+void __RPC_STUB IITTrack_get_PlayedDate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_PlayedDate_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ DATE playedDate);
+
+
+void __RPC_STUB IITTrack_put_PlayedDate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_PlayOrderIndex_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+
+void __RPC_STUB IITTrack_get_PlayOrderIndex_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Rating_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *rating);
+
+
+void __RPC_STUB IITTrack_get_Rating_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Rating_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long rating);
+
+
+void __RPC_STUB IITTrack_put_Rating_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_SampleRate_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sampleRate);
+
+
+void __RPC_STUB IITTrack_get_SampleRate_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Size_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *size);
+
+
+void __RPC_STUB IITTrack_get_Size_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Start_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *start);
+
+
+void __RPC_STUB IITTrack_get_Start_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Start_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long start);
+
+
+void __RPC_STUB IITTrack_put_Start_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Time_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+
+void __RPC_STUB IITTrack_get_Time_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_TrackCount_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackCount);
+
+
+void __RPC_STUB IITTrack_get_TrackCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_TrackCount_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long trackCount);
+
+
+void __RPC_STUB IITTrack_put_TrackCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_TrackNumber_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackNumber);
+
+
+void __RPC_STUB IITTrack_get_TrackNumber_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_TrackNumber_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long trackNumber);
+
+
+void __RPC_STUB IITTrack_put_TrackNumber_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_VolumeAdjustment_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *volumeAdjustment);
+
+
+void __RPC_STUB IITTrack_get_VolumeAdjustment_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_VolumeAdjustment_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long volumeAdjustment);
+
+
+void __RPC_STUB IITTrack_put_VolumeAdjustment_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Year_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *year);
+
+
+void __RPC_STUB IITTrack_get_Year_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITTrack_put_Year_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [in] */ long year);
+
+
+void __RPC_STUB IITTrack_put_Year_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrack_get_Artwork_Proxy(
+ IITTrack __RPC_FAR * This,
+ /* [retval][out] */ IITArtworkCollection __RPC_FAR *__RPC_FAR *iArtworkCollection);
+
+
+void __RPC_STUB IITTrack_get_Artwork_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITTrack_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITTrackCollection_INTERFACE_DEFINED__
+#define __IITTrackCollection_INTERFACE_DEFINED__
+
+/* interface IITTrackCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITTrackCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("755D76F1-6B85-4ce4-8F5F-F88D9743DCD8")
+ IITTrackCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ long __RPC_FAR *count) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ long index,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ItemByPlayOrder(
+ /* [in] */ long index,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ItemByName(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack) = 0;
+
+ virtual /* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITTrackCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITTrackCollection __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITTrackCollection __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Item )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItemByPlayOrder )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItemByName )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack);
+
+ /* [helpstring][restricted][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__NewEnum )(
+ IITTrackCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+ END_INTERFACE
+ } IITTrackCollectionVtbl;
+
+ interface IITTrackCollection
+ {
+ CONST_VTBL struct IITTrackCollectionVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITTrackCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITTrackCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITTrackCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITTrackCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITTrackCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITTrackCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITTrackCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITTrackCollection_get_Count(This,count) \
+ (This)->lpVtbl -> get_Count(This,count)
+
+#define IITTrackCollection_get_Item(This,index,iTrack) \
+ (This)->lpVtbl -> get_Item(This,index,iTrack)
+
+#define IITTrackCollection_get_ItemByPlayOrder(This,index,iTrack) \
+ (This)->lpVtbl -> get_ItemByPlayOrder(This,index,iTrack)
+
+#define IITTrackCollection_get_ItemByName(This,name,iTrack) \
+ (This)->lpVtbl -> get_ItemByName(This,name,iTrack)
+
+#define IITTrackCollection_get__NewEnum(This,iEnumerator) \
+ (This)->lpVtbl -> get__NewEnum(This,iEnumerator)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrackCollection_get_Count_Proxy(
+ IITTrackCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+
+void __RPC_STUB IITTrackCollection_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IITTrackCollection_get_Item_Proxy(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack);
+
+
+void __RPC_STUB IITTrackCollection_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrackCollection_get_ItemByPlayOrder_Proxy(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack);
+
+
+void __RPC_STUB IITTrackCollection_get_ItemByPlayOrder_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITTrackCollection_get_ItemByName_Proxy(
+ IITTrackCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack);
+
+
+void __RPC_STUB IITTrackCollection_get_ItemByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE IITTrackCollection_get__NewEnum_Proxy(
+ IITTrackCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+
+void __RPC_STUB IITTrackCollection_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITTrackCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITVisual_INTERFACE_DEFINED__
+#define __IITVisual_INTERFACE_DEFINED__
+
+/* interface IITVisual */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITVisual;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("340F3315-ED72-4c09-9ACF-21EB4BDF9931")
+ IITVisual : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Name(
+ /* [retval][out] */ BSTR __RPC_FAR *name) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITVisualVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITVisual __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITVisual __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITVisual __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITVisual __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITVisual __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITVisual __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITVisual __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITVisual __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ END_INTERFACE
+ } IITVisualVtbl;
+
+ interface IITVisual
+ {
+ CONST_VTBL struct IITVisualVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITVisual_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITVisual_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITVisual_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITVisual_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITVisual_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITVisual_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITVisual_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITVisual_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITVisual_get_Name_Proxy(
+ IITVisual __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+
+void __RPC_STUB IITVisual_get_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITVisual_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITVisualCollection_INTERFACE_DEFINED__
+#define __IITVisualCollection_INTERFACE_DEFINED__
+
+/* interface IITVisualCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITVisualCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("88A4CCDD-114F-4043-B69B-84D4E6274957")
+ IITVisualCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ long __RPC_FAR *count) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ long index,
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ItemByName(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual) = 0;
+
+ virtual /* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITVisualCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITVisualCollection __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITVisualCollection __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Item )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItemByName )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual);
+
+ /* [helpstring][restricted][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__NewEnum )(
+ IITVisualCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+ END_INTERFACE
+ } IITVisualCollectionVtbl;
+
+ interface IITVisualCollection
+ {
+ CONST_VTBL struct IITVisualCollectionVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITVisualCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITVisualCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITVisualCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITVisualCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITVisualCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITVisualCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITVisualCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITVisualCollection_get_Count(This,count) \
+ (This)->lpVtbl -> get_Count(This,count)
+
+#define IITVisualCollection_get_Item(This,index,iVisual) \
+ (This)->lpVtbl -> get_Item(This,index,iVisual)
+
+#define IITVisualCollection_get_ItemByName(This,name,iVisual) \
+ (This)->lpVtbl -> get_ItemByName(This,name,iVisual)
+
+#define IITVisualCollection_get__NewEnum(This,iEnumerator) \
+ (This)->lpVtbl -> get__NewEnum(This,iEnumerator)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITVisualCollection_get_Count_Proxy(
+ IITVisualCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+
+void __RPC_STUB IITVisualCollection_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IITVisualCollection_get_Item_Proxy(
+ IITVisualCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual);
+
+
+void __RPC_STUB IITVisualCollection_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITVisualCollection_get_ItemByName_Proxy(
+ IITVisualCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual);
+
+
+void __RPC_STUB IITVisualCollection_get_ItemByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE IITVisualCollection_get__NewEnum_Proxy(
+ IITVisualCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+
+void __RPC_STUB IITVisualCollection_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITVisualCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITWindow_INTERFACE_DEFINED__
+#define __IITWindow_INTERFACE_DEFINED__
+
+/* interface IITWindow */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITWindow;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("370D7BE0-3A89-4a42-B902-C75FC138BE09")
+ IITWindow : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Name(
+ /* [retval][out] */ BSTR __RPC_FAR *name) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Kind(
+ /* [retval][out] */ ITWindowKind __RPC_FAR *kind) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Visible(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Visible(
+ /* [in] */ VARIANT_BOOL shouldBeVisible) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Resizable(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isResizable) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Minimized(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMinimized) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Minimized(
+ /* [in] */ VARIANT_BOOL shouldBeMinimized) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Maximizable(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximizable) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Maximized(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximized) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Maximized(
+ /* [in] */ VARIANT_BOOL shouldBeMaximized) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Zoomable(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomable) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Zoomed(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomed) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Zoomed(
+ /* [in] */ VARIANT_BOOL shouldBeZoomed) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Top(
+ /* [retval][out] */ long __RPC_FAR *top) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Top(
+ /* [in] */ long top) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Left(
+ /* [retval][out] */ long __RPC_FAR *left) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Left(
+ /* [in] */ long left) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Bottom(
+ /* [retval][out] */ long __RPC_FAR *bottom) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Bottom(
+ /* [in] */ long bottom) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Right(
+ /* [retval][out] */ long __RPC_FAR *right) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Right(
+ /* [in] */ long right) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Width(
+ /* [retval][out] */ long __RPC_FAR *width) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Width(
+ /* [in] */ long width) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Height(
+ /* [retval][out] */ long __RPC_FAR *height) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Height(
+ /* [in] */ long height) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITWindowVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITWindow __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITWindow __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITWindow __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ ITWindowKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Visible )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Visible )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeVisible);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Resizable )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isResizable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Minimized )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMinimized);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Minimized )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMinimized);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Maximizable )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximizable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Maximized )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximized);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Maximized )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMaximized);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Zoomable )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Zoomed )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomed);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Zoomed )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeZoomed);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Top )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *top);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Top )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long top);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Left )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *left);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Left )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long left);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Bottom )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bottom);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Bottom )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long bottom);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Right )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *right);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Right )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long right);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Width )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *width);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Width )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long width);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Height )(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *height);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Height )(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long height);
+
+ END_INTERFACE
+ } IITWindowVtbl;
+
+ interface IITWindow
+ {
+ CONST_VTBL struct IITWindowVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITWindow_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITWindow_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITWindow_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITWindow_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITWindow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITWindow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITWindow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITWindow_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITWindow_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITWindow_get_Visible(This,isVisible) \
+ (This)->lpVtbl -> get_Visible(This,isVisible)
+
+#define IITWindow_put_Visible(This,shouldBeVisible) \
+ (This)->lpVtbl -> put_Visible(This,shouldBeVisible)
+
+#define IITWindow_get_Resizable(This,isResizable) \
+ (This)->lpVtbl -> get_Resizable(This,isResizable)
+
+#define IITWindow_get_Minimized(This,isMinimized) \
+ (This)->lpVtbl -> get_Minimized(This,isMinimized)
+
+#define IITWindow_put_Minimized(This,shouldBeMinimized) \
+ (This)->lpVtbl -> put_Minimized(This,shouldBeMinimized)
+
+#define IITWindow_get_Maximizable(This,isMaximizable) \
+ (This)->lpVtbl -> get_Maximizable(This,isMaximizable)
+
+#define IITWindow_get_Maximized(This,isMaximized) \
+ (This)->lpVtbl -> get_Maximized(This,isMaximized)
+
+#define IITWindow_put_Maximized(This,shouldBeMaximized) \
+ (This)->lpVtbl -> put_Maximized(This,shouldBeMaximized)
+
+#define IITWindow_get_Zoomable(This,isZoomable) \
+ (This)->lpVtbl -> get_Zoomable(This,isZoomable)
+
+#define IITWindow_get_Zoomed(This,isZoomed) \
+ (This)->lpVtbl -> get_Zoomed(This,isZoomed)
+
+#define IITWindow_put_Zoomed(This,shouldBeZoomed) \
+ (This)->lpVtbl -> put_Zoomed(This,shouldBeZoomed)
+
+#define IITWindow_get_Top(This,top) \
+ (This)->lpVtbl -> get_Top(This,top)
+
+#define IITWindow_put_Top(This,top) \
+ (This)->lpVtbl -> put_Top(This,top)
+
+#define IITWindow_get_Left(This,left) \
+ (This)->lpVtbl -> get_Left(This,left)
+
+#define IITWindow_put_Left(This,left) \
+ (This)->lpVtbl -> put_Left(This,left)
+
+#define IITWindow_get_Bottom(This,bottom) \
+ (This)->lpVtbl -> get_Bottom(This,bottom)
+
+#define IITWindow_put_Bottom(This,bottom) \
+ (This)->lpVtbl -> put_Bottom(This,bottom)
+
+#define IITWindow_get_Right(This,right) \
+ (This)->lpVtbl -> get_Right(This,right)
+
+#define IITWindow_put_Right(This,right) \
+ (This)->lpVtbl -> put_Right(This,right)
+
+#define IITWindow_get_Width(This,width) \
+ (This)->lpVtbl -> get_Width(This,width)
+
+#define IITWindow_put_Width(This,width) \
+ (This)->lpVtbl -> put_Width(This,width)
+
+#define IITWindow_get_Height(This,height) \
+ (This)->lpVtbl -> get_Height(This,height)
+
+#define IITWindow_put_Height(This,height) \
+ (This)->lpVtbl -> put_Height(This,height)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Name_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+
+void __RPC_STUB IITWindow_get_Name_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Kind_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ ITWindowKind __RPC_FAR *kind);
+
+
+void __RPC_STUB IITWindow_get_Kind_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Visible_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+
+void __RPC_STUB IITWindow_get_Visible_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Visible_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeVisible);
+
+
+void __RPC_STUB IITWindow_put_Visible_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Resizable_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isResizable);
+
+
+void __RPC_STUB IITWindow_get_Resizable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Minimized_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMinimized);
+
+
+void __RPC_STUB IITWindow_get_Minimized_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Minimized_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMinimized);
+
+
+void __RPC_STUB IITWindow_put_Minimized_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Maximizable_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximizable);
+
+
+void __RPC_STUB IITWindow_get_Maximizable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Maximized_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximized);
+
+
+void __RPC_STUB IITWindow_get_Maximized_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Maximized_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMaximized);
+
+
+void __RPC_STUB IITWindow_put_Maximized_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Zoomable_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomable);
+
+
+void __RPC_STUB IITWindow_get_Zoomable_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Zoomed_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomed);
+
+
+void __RPC_STUB IITWindow_get_Zoomed_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Zoomed_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeZoomed);
+
+
+void __RPC_STUB IITWindow_put_Zoomed_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Top_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *top);
+
+
+void __RPC_STUB IITWindow_get_Top_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Top_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long top);
+
+
+void __RPC_STUB IITWindow_put_Top_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Left_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *left);
+
+
+void __RPC_STUB IITWindow_get_Left_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Left_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long left);
+
+
+void __RPC_STUB IITWindow_put_Left_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Bottom_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bottom);
+
+
+void __RPC_STUB IITWindow_get_Bottom_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Bottom_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long bottom);
+
+
+void __RPC_STUB IITWindow_put_Bottom_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Right_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *right);
+
+
+void __RPC_STUB IITWindow_get_Right_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Right_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long right);
+
+
+void __RPC_STUB IITWindow_put_Right_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Width_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *width);
+
+
+void __RPC_STUB IITWindow_get_Width_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Width_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long width);
+
+
+void __RPC_STUB IITWindow_put_Width_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindow_get_Height_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *height);
+
+
+void __RPC_STUB IITWindow_get_Height_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITWindow_put_Height_Proxy(
+ IITWindow __RPC_FAR * This,
+ /* [in] */ long height);
+
+
+void __RPC_STUB IITWindow_put_Height_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITWindow_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITBrowserWindow_INTERFACE_DEFINED__
+#define __IITBrowserWindow_INTERFACE_DEFINED__
+
+/* interface IITBrowserWindow */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITBrowserWindow;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("C999F455-C4D5-4aa4-8277-F99753699974")
+ IITBrowserWindow : public IITWindow
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_MiniPlayer(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMiniPlayer) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_MiniPlayer(
+ /* [in] */ VARIANT_BOOL shouldBeMiniPlayer) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SelectedTracks(
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SelectedPlaylist(
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_SelectedPlaylist(
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITBrowserWindowVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITBrowserWindow __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITBrowserWindow __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ ITWindowKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Visible )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Visible )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeVisible);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Resizable )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isResizable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Minimized )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMinimized);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Minimized )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMinimized);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Maximizable )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximizable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Maximized )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximized);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Maximized )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMaximized);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Zoomable )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Zoomed )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomed);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Zoomed )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeZoomed);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Top )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *top);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Top )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ long top);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Left )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *left);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Left )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ long left);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Bottom )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bottom);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Bottom )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ long bottom);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Right )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *right);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Right )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ long right);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Width )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *width);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Width )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ long width);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Height )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *height);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Height )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ long height);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_MiniPlayer )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMiniPlayer);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_MiniPlayer )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMiniPlayer);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SelectedTracks )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SelectedPlaylist )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_SelectedPlaylist )(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist);
+
+ END_INTERFACE
+ } IITBrowserWindowVtbl;
+
+ interface IITBrowserWindow
+ {
+ CONST_VTBL struct IITBrowserWindowVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITBrowserWindow_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITBrowserWindow_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITBrowserWindow_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITBrowserWindow_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITBrowserWindow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITBrowserWindow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITBrowserWindow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITBrowserWindow_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITBrowserWindow_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITBrowserWindow_get_Visible(This,isVisible) \
+ (This)->lpVtbl -> get_Visible(This,isVisible)
+
+#define IITBrowserWindow_put_Visible(This,shouldBeVisible) \
+ (This)->lpVtbl -> put_Visible(This,shouldBeVisible)
+
+#define IITBrowserWindow_get_Resizable(This,isResizable) \
+ (This)->lpVtbl -> get_Resizable(This,isResizable)
+
+#define IITBrowserWindow_get_Minimized(This,isMinimized) \
+ (This)->lpVtbl -> get_Minimized(This,isMinimized)
+
+#define IITBrowserWindow_put_Minimized(This,shouldBeMinimized) \
+ (This)->lpVtbl -> put_Minimized(This,shouldBeMinimized)
+
+#define IITBrowserWindow_get_Maximizable(This,isMaximizable) \
+ (This)->lpVtbl -> get_Maximizable(This,isMaximizable)
+
+#define IITBrowserWindow_get_Maximized(This,isMaximized) \
+ (This)->lpVtbl -> get_Maximized(This,isMaximized)
+
+#define IITBrowserWindow_put_Maximized(This,shouldBeMaximized) \
+ (This)->lpVtbl -> put_Maximized(This,shouldBeMaximized)
+
+#define IITBrowserWindow_get_Zoomable(This,isZoomable) \
+ (This)->lpVtbl -> get_Zoomable(This,isZoomable)
+
+#define IITBrowserWindow_get_Zoomed(This,isZoomed) \
+ (This)->lpVtbl -> get_Zoomed(This,isZoomed)
+
+#define IITBrowserWindow_put_Zoomed(This,shouldBeZoomed) \
+ (This)->lpVtbl -> put_Zoomed(This,shouldBeZoomed)
+
+#define IITBrowserWindow_get_Top(This,top) \
+ (This)->lpVtbl -> get_Top(This,top)
+
+#define IITBrowserWindow_put_Top(This,top) \
+ (This)->lpVtbl -> put_Top(This,top)
+
+#define IITBrowserWindow_get_Left(This,left) \
+ (This)->lpVtbl -> get_Left(This,left)
+
+#define IITBrowserWindow_put_Left(This,left) \
+ (This)->lpVtbl -> put_Left(This,left)
+
+#define IITBrowserWindow_get_Bottom(This,bottom) \
+ (This)->lpVtbl -> get_Bottom(This,bottom)
+
+#define IITBrowserWindow_put_Bottom(This,bottom) \
+ (This)->lpVtbl -> put_Bottom(This,bottom)
+
+#define IITBrowserWindow_get_Right(This,right) \
+ (This)->lpVtbl -> get_Right(This,right)
+
+#define IITBrowserWindow_put_Right(This,right) \
+ (This)->lpVtbl -> put_Right(This,right)
+
+#define IITBrowserWindow_get_Width(This,width) \
+ (This)->lpVtbl -> get_Width(This,width)
+
+#define IITBrowserWindow_put_Width(This,width) \
+ (This)->lpVtbl -> put_Width(This,width)
+
+#define IITBrowserWindow_get_Height(This,height) \
+ (This)->lpVtbl -> get_Height(This,height)
+
+#define IITBrowserWindow_put_Height(This,height) \
+ (This)->lpVtbl -> put_Height(This,height)
+
+
+#define IITBrowserWindow_get_MiniPlayer(This,isMiniPlayer) \
+ (This)->lpVtbl -> get_MiniPlayer(This,isMiniPlayer)
+
+#define IITBrowserWindow_put_MiniPlayer(This,shouldBeMiniPlayer) \
+ (This)->lpVtbl -> put_MiniPlayer(This,shouldBeMiniPlayer)
+
+#define IITBrowserWindow_get_SelectedTracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_SelectedTracks(This,iTrackCollection)
+
+#define IITBrowserWindow_get_SelectedPlaylist(This,iPlaylist) \
+ (This)->lpVtbl -> get_SelectedPlaylist(This,iPlaylist)
+
+#define IITBrowserWindow_put_SelectedPlaylist(This,iPlaylist) \
+ (This)->lpVtbl -> put_SelectedPlaylist(This,iPlaylist)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITBrowserWindow_get_MiniPlayer_Proxy(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMiniPlayer);
+
+
+void __RPC_STUB IITBrowserWindow_get_MiniPlayer_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITBrowserWindow_put_MiniPlayer_Proxy(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMiniPlayer);
+
+
+void __RPC_STUB IITBrowserWindow_put_MiniPlayer_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITBrowserWindow_get_SelectedTracks_Proxy(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+
+void __RPC_STUB IITBrowserWindow_get_SelectedTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITBrowserWindow_get_SelectedPlaylist_Proxy(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IITBrowserWindow_get_SelectedPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITBrowserWindow_put_SelectedPlaylist_Proxy(
+ IITBrowserWindow __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IITBrowserWindow_put_SelectedPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITBrowserWindow_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITWindowCollection_INTERFACE_DEFINED__
+#define __IITWindowCollection_INTERFACE_DEFINED__
+
+/* interface IITWindowCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITWindowCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("3D8DE381-6C0E-481f-A865-E2385F59FA43")
+ IITWindowCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ long __RPC_FAR *count) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ long index,
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iWindow) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ItemByName(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iWindow) = 0;
+
+ virtual /* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITWindowCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITWindowCollection __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITWindowCollection __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Item )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iWindow);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItemByName )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iWindow);
+
+ /* [helpstring][restricted][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__NewEnum )(
+ IITWindowCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+ END_INTERFACE
+ } IITWindowCollectionVtbl;
+
+ interface IITWindowCollection
+ {
+ CONST_VTBL struct IITWindowCollectionVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITWindowCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITWindowCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITWindowCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITWindowCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITWindowCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITWindowCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITWindowCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITWindowCollection_get_Count(This,count) \
+ (This)->lpVtbl -> get_Count(This,count)
+
+#define IITWindowCollection_get_Item(This,index,iWindow) \
+ (This)->lpVtbl -> get_Item(This,index,iWindow)
+
+#define IITWindowCollection_get_ItemByName(This,name,iWindow) \
+ (This)->lpVtbl -> get_ItemByName(This,name,iWindow)
+
+#define IITWindowCollection_get__NewEnum(This,iEnumerator) \
+ (This)->lpVtbl -> get__NewEnum(This,iEnumerator)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindowCollection_get_Count_Proxy(
+ IITWindowCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+
+void __RPC_STUB IITWindowCollection_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IITWindowCollection_get_Item_Proxy(
+ IITWindowCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iWindow);
+
+
+void __RPC_STUB IITWindowCollection_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITWindowCollection_get_ItemByName_Proxy(
+ IITWindowCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iWindow);
+
+
+void __RPC_STUB IITWindowCollection_get_ItemByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE IITWindowCollection_get__NewEnum_Proxy(
+ IITWindowCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+
+void __RPC_STUB IITWindowCollection_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITWindowCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IiTunes_INTERFACE_DEFINED__
+#define __IiTunes_INTERFACE_DEFINED__
+
+/* interface IiTunes */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+
+
+EXTERN_C const IID IID_IiTunes;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("9DD6680B-3EDC-40db-A771-E6FE4832E34A")
+ IiTunes : public IDispatch
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE BackTrack( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE FastForward( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE NextTrack( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Pause( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Play( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE PlayFile(
+ /* [in] */ BSTR filePath) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE PlayPause( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE PreviousTrack( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Resume( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Rewind( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Stop( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE ConvertFile(
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE ConvertFiles(
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE ConvertTrack(
+ /* [in] */ VARIANT __RPC_FAR *iTrackToConvert,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE ConvertTracks(
+ /* [in] */ VARIANT __RPC_FAR *iTracksToConvert,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CheckVersion(
+ /* [in] */ long majorVersion,
+ /* [in] */ long minorVersion,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompatible) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetITObjectByID(
+ /* [in] */ long sourceID,
+ /* [in] */ long playlistID,
+ /* [in] */ long trackID,
+ /* [in] */ long databaseID,
+ /* [retval][out] */ IITObject __RPC_FAR *__RPC_FAR *iObject) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CreatePlaylist(
+ /* [in] */ BSTR playlistName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE OpenURL(
+ /* [in] */ BSTR url) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GotoMusicStoreHomePage( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UpdateIPod( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Authorize(
+ /* [in] */ long numElems,
+ /* [size_is][in] */ VARIANT __RPC_FAR data[ ],
+ /* [size_is][in] */ BSTR __RPC_FAR names[ ]) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Quit( void) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Sources(
+ /* [retval][out] */ IITSourceCollection __RPC_FAR *__RPC_FAR *iSourceCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Encoders(
+ /* [retval][out] */ IITEncoderCollection __RPC_FAR *__RPC_FAR *iEncoderCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_EQPresets(
+ /* [retval][out] */ IITEQPresetCollection __RPC_FAR *__RPC_FAR *iEQPresetCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Visuals(
+ /* [retval][out] */ IITVisualCollection __RPC_FAR *__RPC_FAR *iVisualCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Windows(
+ /* [retval][out] */ IITWindowCollection __RPC_FAR *__RPC_FAR *iWindowCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SoundVolume(
+ /* [retval][out] */ long __RPC_FAR *volume) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_SoundVolume(
+ /* [in] */ long volume) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Mute(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMuted) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Mute(
+ /* [in] */ VARIANT_BOOL shouldMute) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_PlayerState(
+ /* [retval][out] */ ITPlayerState __RPC_FAR *playerState) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_PlayerPosition(
+ /* [retval][out] */ long __RPC_FAR *playerPos) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_PlayerPosition(
+ /* [in] */ long playerPos) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CurrentEncoder(
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_CurrentEncoder(
+ /* [in] */ IITEncoder __RPC_FAR *iEncoder) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_VisualsEnabled(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_VisualsEnabled(
+ /* [in] */ VARIANT_BOOL shouldEnable) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_FullScreenVisuals(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isFullScreen) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_FullScreenVisuals(
+ /* [in] */ VARIANT_BOOL shouldUseFullScreen) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_VisualSize(
+ /* [retval][out] */ ITVisualSize __RPC_FAR *visualSize) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_VisualSize(
+ /* [in] */ ITVisualSize visualSize) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CurrentVisual(
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_CurrentVisual(
+ /* [in] */ IITVisual __RPC_FAR *iVisual) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_EQEnabled(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_EQEnabled(
+ /* [in] */ VARIANT_BOOL shouldEnable) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CurrentEQPreset(
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_CurrentEQPreset(
+ /* [in] */ IITEQPreset __RPC_FAR *iEQPreset) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CurrentStreamTitle(
+ /* [retval][out] */ BSTR __RPC_FAR *streamTitle) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CurrentStreamURL(
+ /* [retval][out] */ BSTR __RPC_FAR *streamURL) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_BrowserWindow(
+ /* [retval][out] */ IITBrowserWindow __RPC_FAR *__RPC_FAR *iBrowserWindow) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_EQWindow(
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iEQWindow) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_LibrarySource(
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iLibrarySource) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_LibraryPlaylist(
+ /* [retval][out] */ IITLibraryPlaylist __RPC_FAR *__RPC_FAR *iLibraryPlaylist) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CurrentTrack(
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CurrentPlaylist(
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SelectedTracks(
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Version(
+ /* [retval][out] */ BSTR __RPC_FAR *version) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetOptions(
+ /* [in] */ long options) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE ConvertFile2(
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE ConvertFiles2(
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE ConvertTrack2(
+ /* [in] */ VARIANT __RPC_FAR *iTrackToConvert,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE ConvertTracks2(
+ /* [in] */ VARIANT __RPC_FAR *iTracksToConvert,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_AppCommandMessageProcessingEnabled(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_AppCommandMessageProcessingEnabled(
+ /* [in] */ VARIANT_BOOL shouldEnable) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ForceToForegroundOnDialog(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *forceToForegroundOnDialog) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_ForceToForegroundOnDialog(
+ /* [in] */ VARIANT_BOOL forceToForegroundOnDialog) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CreateEQPreset(
+ /* [in] */ BSTR eqPresetName,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CreatePlaylistInSource(
+ /* [in] */ BSTR playlistName,
+ /* [in] */ VARIANT __RPC_FAR *iSource,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE GetPlayerButtonsState(
+ /* [out] */ VARIANT_BOOL __RPC_FAR *previousEnabled,
+ /* [out] */ ITPlayButtonState __RPC_FAR *playPauseStopState,
+ /* [out] */ VARIANT_BOOL __RPC_FAR *nextEnabled) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE PlayerButtonClicked(
+ /* [in] */ ITPlayerButton playerButton,
+ /* [in] */ long playerButtonModifierKeys) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CanSetShuffle(
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *canSetShuffle) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_CanSetSongRepeat(
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *canSetSongRepeat) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ConvertOperationStatus(
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SubscribeToPodcast(
+ /* [in] */ BSTR url) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UpdatePodcastFeeds( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CreateFolder(
+ /* [in] */ BSTR folderName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE CreateFolderInSource(
+ /* [in] */ BSTR folderName,
+ /* [in] */ VARIANT __RPC_FAR *iSource,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SoundVolumeControlEnabled(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IiTunesVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IiTunes __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IiTunes __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IiTunes __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *BackTrack )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *FastForward )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *NextTrack )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Pause )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Play )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *PlayFile )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR filePath);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *PlayPause )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *PreviousTrack )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Resume )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Rewind )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Stop )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertFile )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertFiles )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertTrack )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTrackToConvert,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertTracks )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTracksToConvert,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CheckVersion )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long majorVersion,
+ /* [in] */ long minorVersion,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompatible);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectByID )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long sourceID,
+ /* [in] */ long playlistID,
+ /* [in] */ long trackID,
+ /* [in] */ long databaseID,
+ /* [retval][out] */ IITObject __RPC_FAR *__RPC_FAR *iObject);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreatePlaylist )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR playlistName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *OpenURL )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR url);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GotoMusicStoreHomePage )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *UpdateIPod )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Authorize )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long numElems,
+ /* [size_is][in] */ VARIANT __RPC_FAR data[ ],
+ /* [size_is][in] */ BSTR __RPC_FAR names[ ]);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Quit )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Sources )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITSourceCollection __RPC_FAR *__RPC_FAR *iSourceCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Encoders )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITEncoderCollection __RPC_FAR *__RPC_FAR *iEncoderCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_EQPresets )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITEQPresetCollection __RPC_FAR *__RPC_FAR *iEQPresetCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Visuals )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITVisualCollection __RPC_FAR *__RPC_FAR *iVisualCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Windows )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITWindowCollection __RPC_FAR *__RPC_FAR *iWindowCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SoundVolume )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *volume);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_SoundVolume )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long volume);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Mute )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMuted);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Mute )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldMute);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayerState )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ ITPlayerState __RPC_FAR *playerState);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayerPosition )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playerPos);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_PlayerPosition )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long playerPos);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CurrentEncoder )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_CurrentEncoder )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ IITEncoder __RPC_FAR *iEncoder);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_VisualsEnabled )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_VisualsEnabled )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldEnable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FullScreenVisuals )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isFullScreen);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_FullScreenVisuals )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldUseFullScreen);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_VisualSize )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ ITVisualSize __RPC_FAR *visualSize);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_VisualSize )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ ITVisualSize visualSize);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CurrentVisual )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_CurrentVisual )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ IITVisual __RPC_FAR *iVisual);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_EQEnabled )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_EQEnabled )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldEnable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CurrentEQPreset )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_CurrentEQPreset )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ IITEQPreset __RPC_FAR *iEQPreset);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CurrentStreamTitle )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *streamTitle);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CurrentStreamURL )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *streamURL);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BrowserWindow )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITBrowserWindow __RPC_FAR *__RPC_FAR *iBrowserWindow);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_EQWindow )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iEQWindow);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_LibrarySource )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iLibrarySource);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_LibraryPlaylist )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITLibraryPlaylist __RPC_FAR *__RPC_FAR *iLibraryPlaylist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CurrentTrack )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CurrentPlaylist )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SelectedTracks )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Version )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *version);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetOptions )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long options);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertFile2 )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertFiles2 )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertTrack2 )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTrackToConvert,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *ConvertTracks2 )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTracksToConvert,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_AppCommandMessageProcessingEnabled )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_AppCommandMessageProcessingEnabled )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldEnable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ForceToForegroundOnDialog )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *forceToForegroundOnDialog);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_ForceToForegroundOnDialog )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL forceToForegroundOnDialog);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreateEQPreset )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR eqPresetName,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreatePlaylistInSource )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR playlistName,
+ /* [in] */ VARIANT __RPC_FAR *iSource,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetPlayerButtonsState )(
+ IiTunes __RPC_FAR * This,
+ /* [out] */ VARIANT_BOOL __RPC_FAR *previousEnabled,
+ /* [out] */ ITPlayButtonState __RPC_FAR *playPauseStopState,
+ /* [out] */ VARIANT_BOOL __RPC_FAR *nextEnabled);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *PlayerButtonClicked )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ ITPlayerButton playerButton,
+ /* [in] */ long playerButtonModifierKeys);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CanSetShuffle )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *canSetShuffle);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_CanSetSongRepeat )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *canSetSongRepeat);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ConvertOperationStatus )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SubscribeToPodcast )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR url);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *UpdatePodcastFeeds )(
+ IiTunes __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreateFolder )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR folderName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *CreateFolderInSource )(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR folderName,
+ /* [in] */ VARIANT __RPC_FAR *iSource,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SoundVolumeControlEnabled )(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+ END_INTERFACE
+ } IiTunesVtbl;
+
+ interface IiTunes
+ {
+ CONST_VTBL struct IiTunesVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IiTunes_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IiTunes_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IiTunes_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IiTunes_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IiTunes_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IiTunes_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IiTunes_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IiTunes_BackTrack(This) \
+ (This)->lpVtbl -> BackTrack(This)
+
+#define IiTunes_FastForward(This) \
+ (This)->lpVtbl -> FastForward(This)
+
+#define IiTunes_NextTrack(This) \
+ (This)->lpVtbl -> NextTrack(This)
+
+#define IiTunes_Pause(This) \
+ (This)->lpVtbl -> Pause(This)
+
+#define IiTunes_Play(This) \
+ (This)->lpVtbl -> Play(This)
+
+#define IiTunes_PlayFile(This,filePath) \
+ (This)->lpVtbl -> PlayFile(This,filePath)
+
+#define IiTunes_PlayPause(This) \
+ (This)->lpVtbl -> PlayPause(This)
+
+#define IiTunes_PreviousTrack(This) \
+ (This)->lpVtbl -> PreviousTrack(This)
+
+#define IiTunes_Resume(This) \
+ (This)->lpVtbl -> Resume(This)
+
+#define IiTunes_Rewind(This) \
+ (This)->lpVtbl -> Rewind(This)
+
+#define IiTunes_Stop(This) \
+ (This)->lpVtbl -> Stop(This)
+
+#define IiTunes_ConvertFile(This,filePath,iStatus) \
+ (This)->lpVtbl -> ConvertFile(This,filePath,iStatus)
+
+#define IiTunes_ConvertFiles(This,filePaths,iStatus) \
+ (This)->lpVtbl -> ConvertFiles(This,filePaths,iStatus)
+
+#define IiTunes_ConvertTrack(This,iTrackToConvert,iStatus) \
+ (This)->lpVtbl -> ConvertTrack(This,iTrackToConvert,iStatus)
+
+#define IiTunes_ConvertTracks(This,iTracksToConvert,iStatus) \
+ (This)->lpVtbl -> ConvertTracks(This,iTracksToConvert,iStatus)
+
+#define IiTunes_CheckVersion(This,majorVersion,minorVersion,isCompatible) \
+ (This)->lpVtbl -> CheckVersion(This,majorVersion,minorVersion,isCompatible)
+
+#define IiTunes_GetITObjectByID(This,sourceID,playlistID,trackID,databaseID,iObject) \
+ (This)->lpVtbl -> GetITObjectByID(This,sourceID,playlistID,trackID,databaseID,iObject)
+
+#define IiTunes_CreatePlaylist(This,playlistName,iPlaylist) \
+ (This)->lpVtbl -> CreatePlaylist(This,playlistName,iPlaylist)
+
+#define IiTunes_OpenURL(This,url) \
+ (This)->lpVtbl -> OpenURL(This,url)
+
+#define IiTunes_GotoMusicStoreHomePage(This) \
+ (This)->lpVtbl -> GotoMusicStoreHomePage(This)
+
+#define IiTunes_UpdateIPod(This) \
+ (This)->lpVtbl -> UpdateIPod(This)
+
+#define IiTunes_Authorize(This,numElems,data,names) \
+ (This)->lpVtbl -> Authorize(This,numElems,data,names)
+
+#define IiTunes_Quit(This) \
+ (This)->lpVtbl -> Quit(This)
+
+#define IiTunes_get_Sources(This,iSourceCollection) \
+ (This)->lpVtbl -> get_Sources(This,iSourceCollection)
+
+#define IiTunes_get_Encoders(This,iEncoderCollection) \
+ (This)->lpVtbl -> get_Encoders(This,iEncoderCollection)
+
+#define IiTunes_get_EQPresets(This,iEQPresetCollection) \
+ (This)->lpVtbl -> get_EQPresets(This,iEQPresetCollection)
+
+#define IiTunes_get_Visuals(This,iVisualCollection) \
+ (This)->lpVtbl -> get_Visuals(This,iVisualCollection)
+
+#define IiTunes_get_Windows(This,iWindowCollection) \
+ (This)->lpVtbl -> get_Windows(This,iWindowCollection)
+
+#define IiTunes_get_SoundVolume(This,volume) \
+ (This)->lpVtbl -> get_SoundVolume(This,volume)
+
+#define IiTunes_put_SoundVolume(This,volume) \
+ (This)->lpVtbl -> put_SoundVolume(This,volume)
+
+#define IiTunes_get_Mute(This,isMuted) \
+ (This)->lpVtbl -> get_Mute(This,isMuted)
+
+#define IiTunes_put_Mute(This,shouldMute) \
+ (This)->lpVtbl -> put_Mute(This,shouldMute)
+
+#define IiTunes_get_PlayerState(This,playerState) \
+ (This)->lpVtbl -> get_PlayerState(This,playerState)
+
+#define IiTunes_get_PlayerPosition(This,playerPos) \
+ (This)->lpVtbl -> get_PlayerPosition(This,playerPos)
+
+#define IiTunes_put_PlayerPosition(This,playerPos) \
+ (This)->lpVtbl -> put_PlayerPosition(This,playerPos)
+
+#define IiTunes_get_CurrentEncoder(This,iEncoder) \
+ (This)->lpVtbl -> get_CurrentEncoder(This,iEncoder)
+
+#define IiTunes_put_CurrentEncoder(This,iEncoder) \
+ (This)->lpVtbl -> put_CurrentEncoder(This,iEncoder)
+
+#define IiTunes_get_VisualsEnabled(This,isEnabled) \
+ (This)->lpVtbl -> get_VisualsEnabled(This,isEnabled)
+
+#define IiTunes_put_VisualsEnabled(This,shouldEnable) \
+ (This)->lpVtbl -> put_VisualsEnabled(This,shouldEnable)
+
+#define IiTunes_get_FullScreenVisuals(This,isFullScreen) \
+ (This)->lpVtbl -> get_FullScreenVisuals(This,isFullScreen)
+
+#define IiTunes_put_FullScreenVisuals(This,shouldUseFullScreen) \
+ (This)->lpVtbl -> put_FullScreenVisuals(This,shouldUseFullScreen)
+
+#define IiTunes_get_VisualSize(This,visualSize) \
+ (This)->lpVtbl -> get_VisualSize(This,visualSize)
+
+#define IiTunes_put_VisualSize(This,visualSize) \
+ (This)->lpVtbl -> put_VisualSize(This,visualSize)
+
+#define IiTunes_get_CurrentVisual(This,iVisual) \
+ (This)->lpVtbl -> get_CurrentVisual(This,iVisual)
+
+#define IiTunes_put_CurrentVisual(This,iVisual) \
+ (This)->lpVtbl -> put_CurrentVisual(This,iVisual)
+
+#define IiTunes_get_EQEnabled(This,isEnabled) \
+ (This)->lpVtbl -> get_EQEnabled(This,isEnabled)
+
+#define IiTunes_put_EQEnabled(This,shouldEnable) \
+ (This)->lpVtbl -> put_EQEnabled(This,shouldEnable)
+
+#define IiTunes_get_CurrentEQPreset(This,iEQPreset) \
+ (This)->lpVtbl -> get_CurrentEQPreset(This,iEQPreset)
+
+#define IiTunes_put_CurrentEQPreset(This,iEQPreset) \
+ (This)->lpVtbl -> put_CurrentEQPreset(This,iEQPreset)
+
+#define IiTunes_get_CurrentStreamTitle(This,streamTitle) \
+ (This)->lpVtbl -> get_CurrentStreamTitle(This,streamTitle)
+
+#define IiTunes_get_CurrentStreamURL(This,streamURL) \
+ (This)->lpVtbl -> get_CurrentStreamURL(This,streamURL)
+
+#define IiTunes_get_BrowserWindow(This,iBrowserWindow) \
+ (This)->lpVtbl -> get_BrowserWindow(This,iBrowserWindow)
+
+#define IiTunes_get_EQWindow(This,iEQWindow) \
+ (This)->lpVtbl -> get_EQWindow(This,iEQWindow)
+
+#define IiTunes_get_LibrarySource(This,iLibrarySource) \
+ (This)->lpVtbl -> get_LibrarySource(This,iLibrarySource)
+
+#define IiTunes_get_LibraryPlaylist(This,iLibraryPlaylist) \
+ (This)->lpVtbl -> get_LibraryPlaylist(This,iLibraryPlaylist)
+
+#define IiTunes_get_CurrentTrack(This,iTrack) \
+ (This)->lpVtbl -> get_CurrentTrack(This,iTrack)
+
+#define IiTunes_get_CurrentPlaylist(This,iPlaylist) \
+ (This)->lpVtbl -> get_CurrentPlaylist(This,iPlaylist)
+
+#define IiTunes_get_SelectedTracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_SelectedTracks(This,iTrackCollection)
+
+#define IiTunes_get_Version(This,version) \
+ (This)->lpVtbl -> get_Version(This,version)
+
+#define IiTunes_SetOptions(This,options) \
+ (This)->lpVtbl -> SetOptions(This,options)
+
+#define IiTunes_ConvertFile2(This,filePath,iStatus) \
+ (This)->lpVtbl -> ConvertFile2(This,filePath,iStatus)
+
+#define IiTunes_ConvertFiles2(This,filePaths,iStatus) \
+ (This)->lpVtbl -> ConvertFiles2(This,filePaths,iStatus)
+
+#define IiTunes_ConvertTrack2(This,iTrackToConvert,iStatus) \
+ (This)->lpVtbl -> ConvertTrack2(This,iTrackToConvert,iStatus)
+
+#define IiTunes_ConvertTracks2(This,iTracksToConvert,iStatus) \
+ (This)->lpVtbl -> ConvertTracks2(This,iTracksToConvert,iStatus)
+
+#define IiTunes_get_AppCommandMessageProcessingEnabled(This,isEnabled) \
+ (This)->lpVtbl -> get_AppCommandMessageProcessingEnabled(This,isEnabled)
+
+#define IiTunes_put_AppCommandMessageProcessingEnabled(This,shouldEnable) \
+ (This)->lpVtbl -> put_AppCommandMessageProcessingEnabled(This,shouldEnable)
+
+#define IiTunes_get_ForceToForegroundOnDialog(This,forceToForegroundOnDialog) \
+ (This)->lpVtbl -> get_ForceToForegroundOnDialog(This,forceToForegroundOnDialog)
+
+#define IiTunes_put_ForceToForegroundOnDialog(This,forceToForegroundOnDialog) \
+ (This)->lpVtbl -> put_ForceToForegroundOnDialog(This,forceToForegroundOnDialog)
+
+#define IiTunes_CreateEQPreset(This,eqPresetName,iEQPreset) \
+ (This)->lpVtbl -> CreateEQPreset(This,eqPresetName,iEQPreset)
+
+#define IiTunes_CreatePlaylistInSource(This,playlistName,iSource,iPlaylist) \
+ (This)->lpVtbl -> CreatePlaylistInSource(This,playlistName,iSource,iPlaylist)
+
+#define IiTunes_GetPlayerButtonsState(This,previousEnabled,playPauseStopState,nextEnabled) \
+ (This)->lpVtbl -> GetPlayerButtonsState(This,previousEnabled,playPauseStopState,nextEnabled)
+
+#define IiTunes_PlayerButtonClicked(This,playerButton,playerButtonModifierKeys) \
+ (This)->lpVtbl -> PlayerButtonClicked(This,playerButton,playerButtonModifierKeys)
+
+#define IiTunes_get_CanSetShuffle(This,iPlaylist,canSetShuffle) \
+ (This)->lpVtbl -> get_CanSetShuffle(This,iPlaylist,canSetShuffle)
+
+#define IiTunes_get_CanSetSongRepeat(This,iPlaylist,canSetSongRepeat) \
+ (This)->lpVtbl -> get_CanSetSongRepeat(This,iPlaylist,canSetSongRepeat)
+
+#define IiTunes_get_ConvertOperationStatus(This,iStatus) \
+ (This)->lpVtbl -> get_ConvertOperationStatus(This,iStatus)
+
+#define IiTunes_SubscribeToPodcast(This,url) \
+ (This)->lpVtbl -> SubscribeToPodcast(This,url)
+
+#define IiTunes_UpdatePodcastFeeds(This) \
+ (This)->lpVtbl -> UpdatePodcastFeeds(This)
+
+#define IiTunes_CreateFolder(This,folderName,iFolder) \
+ (This)->lpVtbl -> CreateFolder(This,folderName,iFolder)
+
+#define IiTunes_CreateFolderInSource(This,folderName,iSource,iFolder) \
+ (This)->lpVtbl -> CreateFolderInSource(This,folderName,iSource,iFolder)
+
+#define IiTunes_get_SoundVolumeControlEnabled(This,isEnabled) \
+ (This)->lpVtbl -> get_SoundVolumeControlEnabled(This,isEnabled)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_BackTrack_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_BackTrack_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_FastForward_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_FastForward_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_NextTrack_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_NextTrack_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_Pause_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_Pause_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_Play_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_Play_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_PlayFile_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR filePath);
+
+
+void __RPC_STUB IiTunes_PlayFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_PlayPause_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_PlayPause_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_PreviousTrack_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_PreviousTrack_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_Resume_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_Resume_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_Rewind_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_Rewind_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_Stop_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_Stop_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_ConvertFile_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_ConvertFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_ConvertFiles_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_ConvertFiles_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_ConvertTrack_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTrackToConvert,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_ConvertTrack_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_ConvertTracks_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTracksToConvert,
+ /* [retval][out] */ IITOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_ConvertTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_CheckVersion_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long majorVersion,
+ /* [in] */ long minorVersion,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompatible);
+
+
+void __RPC_STUB IiTunes_CheckVersion_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_GetITObjectByID_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long sourceID,
+ /* [in] */ long playlistID,
+ /* [in] */ long trackID,
+ /* [in] */ long databaseID,
+ /* [retval][out] */ IITObject __RPC_FAR *__RPC_FAR *iObject);
+
+
+void __RPC_STUB IiTunes_GetITObjectByID_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_CreatePlaylist_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR playlistName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IiTunes_CreatePlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_OpenURL_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR url);
+
+
+void __RPC_STUB IiTunes_OpenURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_GotoMusicStoreHomePage_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_GotoMusicStoreHomePage_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_UpdateIPod_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_UpdateIPod_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_Authorize_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long numElems,
+ /* [size_is][in] */ VARIANT __RPC_FAR data[ ],
+ /* [size_is][in] */ BSTR __RPC_FAR names[ ]);
+
+
+void __RPC_STUB IiTunes_Authorize_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_Quit_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_Quit_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_Sources_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITSourceCollection __RPC_FAR *__RPC_FAR *iSourceCollection);
+
+
+void __RPC_STUB IiTunes_get_Sources_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_Encoders_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITEncoderCollection __RPC_FAR *__RPC_FAR *iEncoderCollection);
+
+
+void __RPC_STUB IiTunes_get_Encoders_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_EQPresets_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITEQPresetCollection __RPC_FAR *__RPC_FAR *iEQPresetCollection);
+
+
+void __RPC_STUB IiTunes_get_EQPresets_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_Visuals_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITVisualCollection __RPC_FAR *__RPC_FAR *iVisualCollection);
+
+
+void __RPC_STUB IiTunes_get_Visuals_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_Windows_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITWindowCollection __RPC_FAR *__RPC_FAR *iWindowCollection);
+
+
+void __RPC_STUB IiTunes_get_Windows_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_SoundVolume_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *volume);
+
+
+void __RPC_STUB IiTunes_get_SoundVolume_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_SoundVolume_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long volume);
+
+
+void __RPC_STUB IiTunes_put_SoundVolume_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_Mute_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMuted);
+
+
+void __RPC_STUB IiTunes_get_Mute_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_Mute_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldMute);
+
+
+void __RPC_STUB IiTunes_put_Mute_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_PlayerState_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ ITPlayerState __RPC_FAR *playerState);
+
+
+void __RPC_STUB IiTunes_get_PlayerState_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_PlayerPosition_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playerPos);
+
+
+void __RPC_STUB IiTunes_get_PlayerPosition_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_PlayerPosition_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long playerPos);
+
+
+void __RPC_STUB IiTunes_put_PlayerPosition_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CurrentEncoder_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITEncoder __RPC_FAR *__RPC_FAR *iEncoder);
+
+
+void __RPC_STUB IiTunes_get_CurrentEncoder_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_CurrentEncoder_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ IITEncoder __RPC_FAR *iEncoder);
+
+
+void __RPC_STUB IiTunes_put_CurrentEncoder_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_VisualsEnabled_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+
+void __RPC_STUB IiTunes_get_VisualsEnabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_VisualsEnabled_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldEnable);
+
+
+void __RPC_STUB IiTunes_put_VisualsEnabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_FullScreenVisuals_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isFullScreen);
+
+
+void __RPC_STUB IiTunes_get_FullScreenVisuals_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_FullScreenVisuals_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldUseFullScreen);
+
+
+void __RPC_STUB IiTunes_put_FullScreenVisuals_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_VisualSize_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ ITVisualSize __RPC_FAR *visualSize);
+
+
+void __RPC_STUB IiTunes_get_VisualSize_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_VisualSize_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ ITVisualSize visualSize);
+
+
+void __RPC_STUB IiTunes_put_VisualSize_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CurrentVisual_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITVisual __RPC_FAR *__RPC_FAR *iVisual);
+
+
+void __RPC_STUB IiTunes_get_CurrentVisual_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_CurrentVisual_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ IITVisual __RPC_FAR *iVisual);
+
+
+void __RPC_STUB IiTunes_put_CurrentVisual_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_EQEnabled_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+
+void __RPC_STUB IiTunes_get_EQEnabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_EQEnabled_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldEnable);
+
+
+void __RPC_STUB IiTunes_put_EQEnabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CurrentEQPreset_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset);
+
+
+void __RPC_STUB IiTunes_get_CurrentEQPreset_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_CurrentEQPreset_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ IITEQPreset __RPC_FAR *iEQPreset);
+
+
+void __RPC_STUB IiTunes_put_CurrentEQPreset_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CurrentStreamTitle_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *streamTitle);
+
+
+void __RPC_STUB IiTunes_get_CurrentStreamTitle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CurrentStreamURL_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *streamURL);
+
+
+void __RPC_STUB IiTunes_get_CurrentStreamURL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_BrowserWindow_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITBrowserWindow __RPC_FAR *__RPC_FAR *iBrowserWindow);
+
+
+void __RPC_STUB IiTunes_get_BrowserWindow_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_EQWindow_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITWindow __RPC_FAR *__RPC_FAR *iEQWindow);
+
+
+void __RPC_STUB IiTunes_get_EQWindow_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_LibrarySource_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iLibrarySource);
+
+
+void __RPC_STUB IiTunes_get_LibrarySource_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_LibraryPlaylist_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITLibraryPlaylist __RPC_FAR *__RPC_FAR *iLibraryPlaylist);
+
+
+void __RPC_STUB IiTunes_get_LibraryPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CurrentTrack_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITTrack __RPC_FAR *__RPC_FAR *iTrack);
+
+
+void __RPC_STUB IiTunes_get_CurrentTrack_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CurrentPlaylist_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IiTunes_get_CurrentPlaylist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_SelectedTracks_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+
+void __RPC_STUB IiTunes_get_SelectedTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_Version_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *version);
+
+
+void __RPC_STUB IiTunes_get_Version_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_SetOptions_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ long options);
+
+
+void __RPC_STUB IiTunes_SetOptions_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_ConvertFile2_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_ConvertFile2_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_ConvertFiles2_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *filePaths,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_ConvertFiles2_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_ConvertTrack2_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTrackToConvert,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_ConvertTrack2_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_ConvertTracks2_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iTracksToConvert,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_ConvertTracks2_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_AppCommandMessageProcessingEnabled_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+
+void __RPC_STUB IiTunes_get_AppCommandMessageProcessingEnabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_AppCommandMessageProcessingEnabled_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldEnable);
+
+
+void __RPC_STUB IiTunes_put_AppCommandMessageProcessingEnabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_ForceToForegroundOnDialog_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *forceToForegroundOnDialog);
+
+
+void __RPC_STUB IiTunes_get_ForceToForegroundOnDialog_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IiTunes_put_ForceToForegroundOnDialog_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL forceToForegroundOnDialog);
+
+
+void __RPC_STUB IiTunes_put_ForceToForegroundOnDialog_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_CreateEQPreset_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR eqPresetName,
+ /* [retval][out] */ IITEQPreset __RPC_FAR *__RPC_FAR *iEQPreset);
+
+
+void __RPC_STUB IiTunes_CreateEQPreset_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_CreatePlaylistInSource_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR playlistName,
+ /* [in] */ VARIANT __RPC_FAR *iSource,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IiTunes_CreatePlaylistInSource_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_GetPlayerButtonsState_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [out] */ VARIANT_BOOL __RPC_FAR *previousEnabled,
+ /* [out] */ ITPlayButtonState __RPC_FAR *playPauseStopState,
+ /* [out] */ VARIANT_BOOL __RPC_FAR *nextEnabled);
+
+
+void __RPC_STUB IiTunes_GetPlayerButtonsState_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_PlayerButtonClicked_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ ITPlayerButton playerButton,
+ /* [in] */ long playerButtonModifierKeys);
+
+
+void __RPC_STUB IiTunes_PlayerButtonClicked_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CanSetShuffle_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *canSetShuffle);
+
+
+void __RPC_STUB IiTunes_get_CanSetShuffle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_CanSetSongRepeat_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ VARIANT __RPC_FAR *iPlaylist,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *canSetSongRepeat);
+
+
+void __RPC_STUB IiTunes_get_CanSetSongRepeat_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_ConvertOperationStatus_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ IITConvertOperationStatus __RPC_FAR *__RPC_FAR *iStatus);
+
+
+void __RPC_STUB IiTunes_get_ConvertOperationStatus_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_SubscribeToPodcast_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR url);
+
+
+void __RPC_STUB IiTunes_SubscribeToPodcast_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_UpdatePodcastFeeds_Proxy(
+ IiTunes __RPC_FAR * This);
+
+
+void __RPC_STUB IiTunes_UpdatePodcastFeeds_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_CreateFolder_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR folderName,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder);
+
+
+void __RPC_STUB IiTunes_CreateFolder_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IiTunes_CreateFolderInSource_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [in] */ BSTR folderName,
+ /* [in] */ VARIANT __RPC_FAR *iSource,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iFolder);
+
+
+void __RPC_STUB IiTunes_CreateFolderInSource_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IiTunes_get_SoundVolumeControlEnabled_Proxy(
+ IiTunes __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+
+void __RPC_STUB IiTunes_get_SoundVolumeControlEnabled_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IiTunes_INTERFACE_DEFINED__ */
+
+
+#ifndef ___IiTunesEvents_DISPINTERFACE_DEFINED__
+#define ___IiTunesEvents_DISPINTERFACE_DEFINED__
+
+/* dispinterface _IiTunesEvents */
+/* [helpstring][uuid] */
+
+
+EXTERN_C const IID DIID__IiTunesEvents;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("5846EB78-317E-4b6f-B0C3-11EE8C8FEEF2")
+ _IiTunesEvents : public IDispatch
+ {
+ };
+
+#else /* C style interface */
+
+ typedef struct _IiTunesEventsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ _IiTunesEvents __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ _IiTunesEvents __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ _IiTunesEvents __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ _IiTunesEvents __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ _IiTunesEvents __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ _IiTunesEvents __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ _IiTunesEvents __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ END_INTERFACE
+ } _IiTunesEventsVtbl;
+
+ interface _IiTunesEvents
+ {
+ CONST_VTBL struct _IiTunesEventsVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define _IiTunesEvents_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define _IiTunesEvents_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define _IiTunesEvents_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define _IiTunesEvents_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define _IiTunesEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define _IiTunesEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define _IiTunesEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+#endif /* ___IiTunesEvents_DISPINTERFACE_DEFINED__ */
+
+
+#ifndef ___IITConvertOperationStatusEvents_DISPINTERFACE_DEFINED__
+#define ___IITConvertOperationStatusEvents_DISPINTERFACE_DEFINED__
+
+/* dispinterface _IITConvertOperationStatusEvents */
+/* [helpstring][uuid] */
+
+
+EXTERN_C const IID DIID__IITConvertOperationStatusEvents;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("5C47A705-8E8A-45a1-9EED-71C993F0BF60")
+ _IITConvertOperationStatusEvents : public IDispatch
+ {
+ };
+
+#else /* C style interface */
+
+ typedef struct _IITConvertOperationStatusEventsVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ _IITConvertOperationStatusEvents __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ _IITConvertOperationStatusEvents __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ _IITConvertOperationStatusEvents __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ _IITConvertOperationStatusEvents __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ _IITConvertOperationStatusEvents __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ _IITConvertOperationStatusEvents __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ _IITConvertOperationStatusEvents __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ END_INTERFACE
+ } _IITConvertOperationStatusEventsVtbl;
+
+ interface _IITConvertOperationStatusEvents
+ {
+ CONST_VTBL struct _IITConvertOperationStatusEventsVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define _IITConvertOperationStatusEvents_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define _IITConvertOperationStatusEvents_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define _IITConvertOperationStatusEvents_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define _IITConvertOperationStatusEvents_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define _IITConvertOperationStatusEvents_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define _IITConvertOperationStatusEvents_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define _IITConvertOperationStatusEvents_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+#endif /* ___IITConvertOperationStatusEvents_DISPINTERFACE_DEFINED__ */
+
+
+EXTERN_C const CLSID CLSID_iTunesApp;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("DC0C2640-1415-4644-875C-6F4D769839BA")
+iTunesApp;
+#endif
+
+EXTERN_C const CLSID CLSID_iTunesConvertOperationStatus;
+
+#ifdef __cplusplus
+
+class DECLSPEC_UUID("D06596AD-C900-41b2-BC68-1B486450FC56")
+iTunesConvertOperationStatus;
+#endif
+
+#ifndef __IITArtwork_INTERFACE_DEFINED__
+#define __IITArtwork_INTERFACE_DEFINED__
+
+/* interface IITArtwork */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITArtwork;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("D0A6C1F8-BF3D-4cd8-AC47-FE32BDD17257")
+ IITArtwork : public IDispatch
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE Delete( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SetArtworkFromFile(
+ /* [in] */ BSTR filePath) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE SaveArtworkToFile(
+ /* [in] */ BSTR filePath) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Format(
+ /* [retval][out] */ ITArtworkFormat __RPC_FAR *format) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITArtworkVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITArtwork __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITArtwork __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITArtwork __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITArtwork __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITArtwork __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITArtwork __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITArtwork __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITArtwork __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SetArtworkFromFile )(
+ IITArtwork __RPC_FAR * This,
+ /* [in] */ BSTR filePath);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *SaveArtworkToFile )(
+ IITArtwork __RPC_FAR * This,
+ /* [in] */ BSTR filePath);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Format )(
+ IITArtwork __RPC_FAR * This,
+ /* [retval][out] */ ITArtworkFormat __RPC_FAR *format);
+
+ END_INTERFACE
+ } IITArtworkVtbl;
+
+ interface IITArtwork
+ {
+ CONST_VTBL struct IITArtworkVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITArtwork_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITArtwork_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITArtwork_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITArtwork_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITArtwork_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITArtwork_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITArtwork_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITArtwork_Delete(This) \
+ (This)->lpVtbl -> Delete(This)
+
+#define IITArtwork_SetArtworkFromFile(This,filePath) \
+ (This)->lpVtbl -> SetArtworkFromFile(This,filePath)
+
+#define IITArtwork_SaveArtworkToFile(This,filePath) \
+ (This)->lpVtbl -> SaveArtworkToFile(This,filePath)
+
+#define IITArtwork_get_Format(This,format) \
+ (This)->lpVtbl -> get_Format(This,format)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITArtwork_Delete_Proxy(
+ IITArtwork __RPC_FAR * This);
+
+
+void __RPC_STUB IITArtwork_Delete_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITArtwork_SetArtworkFromFile_Proxy(
+ IITArtwork __RPC_FAR * This,
+ /* [in] */ BSTR filePath);
+
+
+void __RPC_STUB IITArtwork_SetArtworkFromFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITArtwork_SaveArtworkToFile_Proxy(
+ IITArtwork __RPC_FAR * This,
+ /* [in] */ BSTR filePath);
+
+
+void __RPC_STUB IITArtwork_SaveArtworkToFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITArtwork_get_Format_Proxy(
+ IITArtwork __RPC_FAR * This,
+ /* [retval][out] */ ITArtworkFormat __RPC_FAR *format);
+
+
+void __RPC_STUB IITArtwork_get_Format_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITArtwork_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITArtworkCollection_INTERFACE_DEFINED__
+#define __IITArtworkCollection_INTERFACE_DEFINED__
+
+/* interface IITArtworkCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITArtworkCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("BF2742D7-418C-4858-9AF9-2981B062D23E")
+ IITArtworkCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ long __RPC_FAR *count) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ long index,
+ /* [retval][out] */ IITArtwork __RPC_FAR *__RPC_FAR *iArtwork) = 0;
+
+ virtual /* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITArtworkCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITArtworkCollection __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITArtworkCollection __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Item )(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITArtwork __RPC_FAR *__RPC_FAR *iArtwork);
+
+ /* [helpstring][restricted][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__NewEnum )(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+ END_INTERFACE
+ } IITArtworkCollectionVtbl;
+
+ interface IITArtworkCollection
+ {
+ CONST_VTBL struct IITArtworkCollectionVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITArtworkCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITArtworkCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITArtworkCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITArtworkCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITArtworkCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITArtworkCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITArtworkCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITArtworkCollection_get_Count(This,count) \
+ (This)->lpVtbl -> get_Count(This,count)
+
+#define IITArtworkCollection_get_Item(This,index,iArtwork) \
+ (This)->lpVtbl -> get_Item(This,index,iArtwork)
+
+#define IITArtworkCollection_get__NewEnum(This,iEnumerator) \
+ (This)->lpVtbl -> get__NewEnum(This,iEnumerator)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITArtworkCollection_get_Count_Proxy(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+
+void __RPC_STUB IITArtworkCollection_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IITArtworkCollection_get_Item_Proxy(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITArtwork __RPC_FAR *__RPC_FAR *iArtwork);
+
+
+void __RPC_STUB IITArtworkCollection_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE IITArtworkCollection_get__NewEnum_Proxy(
+ IITArtworkCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+
+void __RPC_STUB IITArtworkCollection_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITArtworkCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITURLTrack_INTERFACE_DEFINED__
+#define __IITURLTrack_INTERFACE_DEFINED__
+
+/* interface IITURLTrack */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITURLTrack;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("1116E3B5-29FD-4393-A7BD-454E5E327900")
+ IITURLTrack : public IITTrack
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_URL(
+ /* [retval][out] */ BSTR __RPC_FAR *url) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_URL(
+ /* [in] */ BSTR url) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Podcast(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isPodcast) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UpdatePodcastFeed( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE DownloadPodcastEpisode( void) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Category(
+ /* [retval][out] */ BSTR __RPC_FAR *category) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Category(
+ /* [in] */ BSTR category) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Description(
+ /* [retval][out] */ BSTR __RPC_FAR *description) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Description(
+ /* [in] */ BSTR description) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_LongDescription(
+ /* [retval][out] */ BSTR __RPC_FAR *longDescription) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_LongDescription(
+ /* [in] */ BSTR longDescription) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITURLTrackVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITURLTrack __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITURLTrack __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITURLTrack __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITURLTrack __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITURLTrack __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Play )(
+ IITURLTrack __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddArtworkFromFile )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITArtwork __RPC_FAR *__RPC_FAR *iArtwork);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ ITTrackKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Playlist )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Album )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *album);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Album )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR album);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Artist )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *artist);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Artist )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR artist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BitRate )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bitrate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BPM )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *beatsPerMinute);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_BPM )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long beatsPerMinute);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Comment )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *comment);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Comment )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR comment);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Compilation )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompilation);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Compilation )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeCompilation);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Composer )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *composer);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Composer )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR composer);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DateAdded )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *dateAdded);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DiscCount )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_DiscCount )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long discCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DiscNumber )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discNumber);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_DiscNumber )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long discNumber);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Duration )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Enabled )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Enabled )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeEnabled);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_EQ )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *eq);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_EQ )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR eq);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Finish )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long finish);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Finish )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *finish);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Genre )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *genre);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Genre )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR genre);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Grouping )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *grouping);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Grouping )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR grouping);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_KindAsString )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ModificationDate )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *dateModified);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayedCount )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playedCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_PlayedCount )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long playedCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayedDate )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *playedDate);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_PlayedDate )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ DATE playedDate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayOrderIndex )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Rating )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *rating);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Rating )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long rating);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SampleRate )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sampleRate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Size )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *size);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Start )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *start);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Start )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long start);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Time )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackCount )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_TrackCount )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long trackCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackNumber )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackNumber);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_TrackNumber )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long trackNumber);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_VolumeAdjustment )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *volumeAdjustment);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_VolumeAdjustment )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long volumeAdjustment);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Year )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *year);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Year )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ long year);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Artwork )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ IITArtworkCollection __RPC_FAR *__RPC_FAR *iArtworkCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_URL )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *url);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_URL )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR url);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Podcast )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isPodcast);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *UpdatePodcastFeed )(
+ IITURLTrack __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *DownloadPodcastEpisode )(
+ IITURLTrack __RPC_FAR * This);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Category )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *category);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Category )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR category);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Description )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *description);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Description )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR description);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_LongDescription )(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *longDescription);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_LongDescription )(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR longDescription);
+
+ END_INTERFACE
+ } IITURLTrackVtbl;
+
+ interface IITURLTrack
+ {
+ CONST_VTBL struct IITURLTrackVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITURLTrack_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITURLTrack_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITURLTrack_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITURLTrack_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITURLTrack_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITURLTrack_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITURLTrack_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITURLTrack_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITURLTrack_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITURLTrack_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITURLTrack_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITURLTrack_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITURLTrack_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITURLTrack_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITURLTrack_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITURLTrack_Delete(This) \
+ (This)->lpVtbl -> Delete(This)
+
+#define IITURLTrack_Play(This) \
+ (This)->lpVtbl -> Play(This)
+
+#define IITURLTrack_AddArtworkFromFile(This,filePath,iArtwork) \
+ (This)->lpVtbl -> AddArtworkFromFile(This,filePath,iArtwork)
+
+#define IITURLTrack_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITURLTrack_get_Playlist(This,iPlaylist) \
+ (This)->lpVtbl -> get_Playlist(This,iPlaylist)
+
+#define IITURLTrack_get_Album(This,album) \
+ (This)->lpVtbl -> get_Album(This,album)
+
+#define IITURLTrack_put_Album(This,album) \
+ (This)->lpVtbl -> put_Album(This,album)
+
+#define IITURLTrack_get_Artist(This,artist) \
+ (This)->lpVtbl -> get_Artist(This,artist)
+
+#define IITURLTrack_put_Artist(This,artist) \
+ (This)->lpVtbl -> put_Artist(This,artist)
+
+#define IITURLTrack_get_BitRate(This,bitrate) \
+ (This)->lpVtbl -> get_BitRate(This,bitrate)
+
+#define IITURLTrack_get_BPM(This,beatsPerMinute) \
+ (This)->lpVtbl -> get_BPM(This,beatsPerMinute)
+
+#define IITURLTrack_put_BPM(This,beatsPerMinute) \
+ (This)->lpVtbl -> put_BPM(This,beatsPerMinute)
+
+#define IITURLTrack_get_Comment(This,comment) \
+ (This)->lpVtbl -> get_Comment(This,comment)
+
+#define IITURLTrack_put_Comment(This,comment) \
+ (This)->lpVtbl -> put_Comment(This,comment)
+
+#define IITURLTrack_get_Compilation(This,isCompilation) \
+ (This)->lpVtbl -> get_Compilation(This,isCompilation)
+
+#define IITURLTrack_put_Compilation(This,shouldBeCompilation) \
+ (This)->lpVtbl -> put_Compilation(This,shouldBeCompilation)
+
+#define IITURLTrack_get_Composer(This,composer) \
+ (This)->lpVtbl -> get_Composer(This,composer)
+
+#define IITURLTrack_put_Composer(This,composer) \
+ (This)->lpVtbl -> put_Composer(This,composer)
+
+#define IITURLTrack_get_DateAdded(This,dateAdded) \
+ (This)->lpVtbl -> get_DateAdded(This,dateAdded)
+
+#define IITURLTrack_get_DiscCount(This,discCount) \
+ (This)->lpVtbl -> get_DiscCount(This,discCount)
+
+#define IITURLTrack_put_DiscCount(This,discCount) \
+ (This)->lpVtbl -> put_DiscCount(This,discCount)
+
+#define IITURLTrack_get_DiscNumber(This,discNumber) \
+ (This)->lpVtbl -> get_DiscNumber(This,discNumber)
+
+#define IITURLTrack_put_DiscNumber(This,discNumber) \
+ (This)->lpVtbl -> put_DiscNumber(This,discNumber)
+
+#define IITURLTrack_get_Duration(This,duration) \
+ (This)->lpVtbl -> get_Duration(This,duration)
+
+#define IITURLTrack_get_Enabled(This,isEnabled) \
+ (This)->lpVtbl -> get_Enabled(This,isEnabled)
+
+#define IITURLTrack_put_Enabled(This,shouldBeEnabled) \
+ (This)->lpVtbl -> put_Enabled(This,shouldBeEnabled)
+
+#define IITURLTrack_get_EQ(This,eq) \
+ (This)->lpVtbl -> get_EQ(This,eq)
+
+#define IITURLTrack_put_EQ(This,eq) \
+ (This)->lpVtbl -> put_EQ(This,eq)
+
+#define IITURLTrack_put_Finish(This,finish) \
+ (This)->lpVtbl -> put_Finish(This,finish)
+
+#define IITURLTrack_get_Finish(This,finish) \
+ (This)->lpVtbl -> get_Finish(This,finish)
+
+#define IITURLTrack_get_Genre(This,genre) \
+ (This)->lpVtbl -> get_Genre(This,genre)
+
+#define IITURLTrack_put_Genre(This,genre) \
+ (This)->lpVtbl -> put_Genre(This,genre)
+
+#define IITURLTrack_get_Grouping(This,grouping) \
+ (This)->lpVtbl -> get_Grouping(This,grouping)
+
+#define IITURLTrack_put_Grouping(This,grouping) \
+ (This)->lpVtbl -> put_Grouping(This,grouping)
+
+#define IITURLTrack_get_KindAsString(This,kind) \
+ (This)->lpVtbl -> get_KindAsString(This,kind)
+
+#define IITURLTrack_get_ModificationDate(This,dateModified) \
+ (This)->lpVtbl -> get_ModificationDate(This,dateModified)
+
+#define IITURLTrack_get_PlayedCount(This,playedCount) \
+ (This)->lpVtbl -> get_PlayedCount(This,playedCount)
+
+#define IITURLTrack_put_PlayedCount(This,playedCount) \
+ (This)->lpVtbl -> put_PlayedCount(This,playedCount)
+
+#define IITURLTrack_get_PlayedDate(This,playedDate) \
+ (This)->lpVtbl -> get_PlayedDate(This,playedDate)
+
+#define IITURLTrack_put_PlayedDate(This,playedDate) \
+ (This)->lpVtbl -> put_PlayedDate(This,playedDate)
+
+#define IITURLTrack_get_PlayOrderIndex(This,index) \
+ (This)->lpVtbl -> get_PlayOrderIndex(This,index)
+
+#define IITURLTrack_get_Rating(This,rating) \
+ (This)->lpVtbl -> get_Rating(This,rating)
+
+#define IITURLTrack_put_Rating(This,rating) \
+ (This)->lpVtbl -> put_Rating(This,rating)
+
+#define IITURLTrack_get_SampleRate(This,sampleRate) \
+ (This)->lpVtbl -> get_SampleRate(This,sampleRate)
+
+#define IITURLTrack_get_Size(This,size) \
+ (This)->lpVtbl -> get_Size(This,size)
+
+#define IITURLTrack_get_Start(This,start) \
+ (This)->lpVtbl -> get_Start(This,start)
+
+#define IITURLTrack_put_Start(This,start) \
+ (This)->lpVtbl -> put_Start(This,start)
+
+#define IITURLTrack_get_Time(This,time) \
+ (This)->lpVtbl -> get_Time(This,time)
+
+#define IITURLTrack_get_TrackCount(This,trackCount) \
+ (This)->lpVtbl -> get_TrackCount(This,trackCount)
+
+#define IITURLTrack_put_TrackCount(This,trackCount) \
+ (This)->lpVtbl -> put_TrackCount(This,trackCount)
+
+#define IITURLTrack_get_TrackNumber(This,trackNumber) \
+ (This)->lpVtbl -> get_TrackNumber(This,trackNumber)
+
+#define IITURLTrack_put_TrackNumber(This,trackNumber) \
+ (This)->lpVtbl -> put_TrackNumber(This,trackNumber)
+
+#define IITURLTrack_get_VolumeAdjustment(This,volumeAdjustment) \
+ (This)->lpVtbl -> get_VolumeAdjustment(This,volumeAdjustment)
+
+#define IITURLTrack_put_VolumeAdjustment(This,volumeAdjustment) \
+ (This)->lpVtbl -> put_VolumeAdjustment(This,volumeAdjustment)
+
+#define IITURLTrack_get_Year(This,year) \
+ (This)->lpVtbl -> get_Year(This,year)
+
+#define IITURLTrack_put_Year(This,year) \
+ (This)->lpVtbl -> put_Year(This,year)
+
+#define IITURLTrack_get_Artwork(This,iArtworkCollection) \
+ (This)->lpVtbl -> get_Artwork(This,iArtworkCollection)
+
+
+#define IITURLTrack_get_URL(This,url) \
+ (This)->lpVtbl -> get_URL(This,url)
+
+#define IITURLTrack_put_URL(This,url) \
+ (This)->lpVtbl -> put_URL(This,url)
+
+#define IITURLTrack_get_Podcast(This,isPodcast) \
+ (This)->lpVtbl -> get_Podcast(This,isPodcast)
+
+#define IITURLTrack_UpdatePodcastFeed(This) \
+ (This)->lpVtbl -> UpdatePodcastFeed(This)
+
+#define IITURLTrack_DownloadPodcastEpisode(This) \
+ (This)->lpVtbl -> DownloadPodcastEpisode(This)
+
+#define IITURLTrack_get_Category(This,category) \
+ (This)->lpVtbl -> get_Category(This,category)
+
+#define IITURLTrack_put_Category(This,category) \
+ (This)->lpVtbl -> put_Category(This,category)
+
+#define IITURLTrack_get_Description(This,description) \
+ (This)->lpVtbl -> get_Description(This,description)
+
+#define IITURLTrack_put_Description(This,description) \
+ (This)->lpVtbl -> put_Description(This,description)
+
+#define IITURLTrack_get_LongDescription(This,longDescription) \
+ (This)->lpVtbl -> get_LongDescription(This,longDescription)
+
+#define IITURLTrack_put_LongDescription(This,longDescription) \
+ (This)->lpVtbl -> put_LongDescription(This,longDescription)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITURLTrack_get_URL_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *url);
+
+
+void __RPC_STUB IITURLTrack_get_URL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITURLTrack_put_URL_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR url);
+
+
+void __RPC_STUB IITURLTrack_put_URL_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITURLTrack_get_Podcast_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isPodcast);
+
+
+void __RPC_STUB IITURLTrack_get_Podcast_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITURLTrack_UpdatePodcastFeed_Proxy(
+ IITURLTrack __RPC_FAR * This);
+
+
+void __RPC_STUB IITURLTrack_UpdatePodcastFeed_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITURLTrack_DownloadPodcastEpisode_Proxy(
+ IITURLTrack __RPC_FAR * This);
+
+
+void __RPC_STUB IITURLTrack_DownloadPodcastEpisode_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITURLTrack_get_Category_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *category);
+
+
+void __RPC_STUB IITURLTrack_get_Category_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITURLTrack_put_Category_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR category);
+
+
+void __RPC_STUB IITURLTrack_put_Category_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITURLTrack_get_Description_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *description);
+
+
+void __RPC_STUB IITURLTrack_get_Description_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITURLTrack_put_Description_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR description);
+
+
+void __RPC_STUB IITURLTrack_put_Description_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITURLTrack_get_LongDescription_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *longDescription);
+
+
+void __RPC_STUB IITURLTrack_get_LongDescription_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITURLTrack_put_LongDescription_Proxy(
+ IITURLTrack __RPC_FAR * This,
+ /* [in] */ BSTR longDescription);
+
+
+void __RPC_STUB IITURLTrack_put_LongDescription_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITURLTrack_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITAudioCDPlaylist_INTERFACE_DEFINED__
+#define __IITAudioCDPlaylist_INTERFACE_DEFINED__
+
+/* interface IITAudioCDPlaylist */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITAudioCDPlaylist;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("CF496DF3-0FED-4d7d-9BD8-529B6E8A082E")
+ IITAudioCDPlaylist : public IITPlaylist
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Artist(
+ /* [retval][out] */ BSTR __RPC_FAR *artist) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Compilation(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompiliation) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Composer(
+ /* [retval][out] */ BSTR __RPC_FAR *composer) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_DiscCount(
+ /* [retval][out] */ long __RPC_FAR *discCount) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_DiscNumber(
+ /* [retval][out] */ long __RPC_FAR *discNumber) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Genre(
+ /* [retval][out] */ BSTR __RPC_FAR *genre) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Year(
+ /* [retval][out] */ long __RPC_FAR *year) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITAudioCDPlaylistVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITAudioCDPlaylist __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITAudioCDPlaylist __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITAudioCDPlaylist __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *PlayFirstTrack )(
+ IITAudioCDPlaylist __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Print )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL showPrintDialog,
+ /* [in] */ ITPlaylistPrintKind printKind,
+ /* [in] */ BSTR theme);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Search )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ BSTR searchText,
+ /* [in] */ ITPlaylistSearchField searchFields,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Source )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITSource __RPC_FAR *__RPC_FAR *iSource);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Duration )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Shuffle )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isShuffle);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Shuffle )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldShuffle);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Size )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *size);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SongRepeat )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ ITPlaylistRepeatMode __RPC_FAR *repeatMode);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_SongRepeat )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [in] */ ITPlaylistRepeatMode repeatMode);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Time )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Visible )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Tracks )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Artist )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *artist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Compilation )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompiliation);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Composer )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *composer);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DiscCount )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DiscNumber )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discNumber);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Genre )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *genre);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Year )(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *year);
+
+ END_INTERFACE
+ } IITAudioCDPlaylistVtbl;
+
+ interface IITAudioCDPlaylist
+ {
+ CONST_VTBL struct IITAudioCDPlaylistVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITAudioCDPlaylist_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITAudioCDPlaylist_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITAudioCDPlaylist_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITAudioCDPlaylist_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITAudioCDPlaylist_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITAudioCDPlaylist_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITAudioCDPlaylist_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITAudioCDPlaylist_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITAudioCDPlaylist_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITAudioCDPlaylist_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITAudioCDPlaylist_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITAudioCDPlaylist_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITAudioCDPlaylist_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITAudioCDPlaylist_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITAudioCDPlaylist_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITAudioCDPlaylist_Delete(This) \
+ (This)->lpVtbl -> Delete(This)
+
+#define IITAudioCDPlaylist_PlayFirstTrack(This) \
+ (This)->lpVtbl -> PlayFirstTrack(This)
+
+#define IITAudioCDPlaylist_Print(This,showPrintDialog,printKind,theme) \
+ (This)->lpVtbl -> Print(This,showPrintDialog,printKind,theme)
+
+#define IITAudioCDPlaylist_Search(This,searchText,searchFields,iTrackCollection) \
+ (This)->lpVtbl -> Search(This,searchText,searchFields,iTrackCollection)
+
+#define IITAudioCDPlaylist_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITAudioCDPlaylist_get_Source(This,iSource) \
+ (This)->lpVtbl -> get_Source(This,iSource)
+
+#define IITAudioCDPlaylist_get_Duration(This,duration) \
+ (This)->lpVtbl -> get_Duration(This,duration)
+
+#define IITAudioCDPlaylist_get_Shuffle(This,isShuffle) \
+ (This)->lpVtbl -> get_Shuffle(This,isShuffle)
+
+#define IITAudioCDPlaylist_put_Shuffle(This,shouldShuffle) \
+ (This)->lpVtbl -> put_Shuffle(This,shouldShuffle)
+
+#define IITAudioCDPlaylist_get_Size(This,size) \
+ (This)->lpVtbl -> get_Size(This,size)
+
+#define IITAudioCDPlaylist_get_SongRepeat(This,repeatMode) \
+ (This)->lpVtbl -> get_SongRepeat(This,repeatMode)
+
+#define IITAudioCDPlaylist_put_SongRepeat(This,repeatMode) \
+ (This)->lpVtbl -> put_SongRepeat(This,repeatMode)
+
+#define IITAudioCDPlaylist_get_Time(This,time) \
+ (This)->lpVtbl -> get_Time(This,time)
+
+#define IITAudioCDPlaylist_get_Visible(This,isVisible) \
+ (This)->lpVtbl -> get_Visible(This,isVisible)
+
+#define IITAudioCDPlaylist_get_Tracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_Tracks(This,iTrackCollection)
+
+
+#define IITAudioCDPlaylist_get_Artist(This,artist) \
+ (This)->lpVtbl -> get_Artist(This,artist)
+
+#define IITAudioCDPlaylist_get_Compilation(This,isCompiliation) \
+ (This)->lpVtbl -> get_Compilation(This,isCompiliation)
+
+#define IITAudioCDPlaylist_get_Composer(This,composer) \
+ (This)->lpVtbl -> get_Composer(This,composer)
+
+#define IITAudioCDPlaylist_get_DiscCount(This,discCount) \
+ (This)->lpVtbl -> get_DiscCount(This,discCount)
+
+#define IITAudioCDPlaylist_get_DiscNumber(This,discNumber) \
+ (This)->lpVtbl -> get_DiscNumber(This,discNumber)
+
+#define IITAudioCDPlaylist_get_Genre(This,genre) \
+ (This)->lpVtbl -> get_Genre(This,genre)
+
+#define IITAudioCDPlaylist_get_Year(This,year) \
+ (This)->lpVtbl -> get_Year(This,year)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITAudioCDPlaylist_get_Artist_Proxy(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *artist);
+
+
+void __RPC_STUB IITAudioCDPlaylist_get_Artist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITAudioCDPlaylist_get_Compilation_Proxy(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompiliation);
+
+
+void __RPC_STUB IITAudioCDPlaylist_get_Compilation_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITAudioCDPlaylist_get_Composer_Proxy(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *composer);
+
+
+void __RPC_STUB IITAudioCDPlaylist_get_Composer_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITAudioCDPlaylist_get_DiscCount_Proxy(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discCount);
+
+
+void __RPC_STUB IITAudioCDPlaylist_get_DiscCount_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITAudioCDPlaylist_get_DiscNumber_Proxy(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discNumber);
+
+
+void __RPC_STUB IITAudioCDPlaylist_get_DiscNumber_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITAudioCDPlaylist_get_Genre_Proxy(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *genre);
+
+
+void __RPC_STUB IITAudioCDPlaylist_get_Genre_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITAudioCDPlaylist_get_Year_Proxy(
+ IITAudioCDPlaylist __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *year);
+
+
+void __RPC_STUB IITAudioCDPlaylist_get_Year_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITAudioCDPlaylist_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITPlaylistCollection_INTERFACE_DEFINED__
+#define __IITPlaylistCollection_INTERFACE_DEFINED__
+
+/* interface IITPlaylistCollection */
+/* [unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITPlaylistCollection;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("FF194254-909D-4437-9C50-3AAC2AE6305C")
+ IITPlaylistCollection : public IDispatch
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Count(
+ /* [retval][out] */ long __RPC_FAR *count) = 0;
+
+ virtual /* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE get_Item(
+ /* [in] */ long index,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ItemByName(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ virtual /* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE get__NewEnum(
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITPlaylistCollectionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITPlaylistCollection __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITPlaylistCollection __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Count )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+ /* [helpstring][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Item )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ItemByName )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring][restricted][id][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get__NewEnum )(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+ END_INTERFACE
+ } IITPlaylistCollectionVtbl;
+
+ interface IITPlaylistCollection
+ {
+ CONST_VTBL struct IITPlaylistCollectionVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITPlaylistCollection_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITPlaylistCollection_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITPlaylistCollection_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITPlaylistCollection_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITPlaylistCollection_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITPlaylistCollection_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITPlaylistCollection_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITPlaylistCollection_get_Count(This,count) \
+ (This)->lpVtbl -> get_Count(This,count)
+
+#define IITPlaylistCollection_get_Item(This,index,iPlaylist) \
+ (This)->lpVtbl -> get_Item(This,index,iPlaylist)
+
+#define IITPlaylistCollection_get_ItemByName(This,name,iPlaylist) \
+ (This)->lpVtbl -> get_ItemByName(This,name,iPlaylist)
+
+#define IITPlaylistCollection_get__NewEnum(This,iEnumerator) \
+ (This)->lpVtbl -> get__NewEnum(This,iEnumerator)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylistCollection_get_Count_Proxy(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *count);
+
+
+void __RPC_STUB IITPlaylistCollection_get_Count_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][id][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylistCollection_get_Item_Proxy(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IITPlaylistCollection_get_Item_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylistCollection_get_ItemByName_Proxy(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IITPlaylistCollection_get_ItemByName_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][restricted][id][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylistCollection_get__NewEnum_Proxy(
+ IITPlaylistCollection __RPC_FAR * This,
+ /* [retval][out] */ IUnknown __RPC_FAR *__RPC_FAR *iEnumerator);
+
+
+void __RPC_STUB IITPlaylistCollection_get__NewEnum_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITPlaylistCollection_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITIPodSource_INTERFACE_DEFINED__
+#define __IITIPodSource_INTERFACE_DEFINED__
+
+/* interface IITIPodSource */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITIPodSource;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("CF4D8ACE-1720-4fb9-B0AE-9877249E89B0")
+ IITIPodSource : public IITSource
+ {
+ public:
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UpdateIPod( void) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE EjectIPod( void) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SoftwareVersion(
+ /* [retval][out] */ BSTR __RPC_FAR *softwareVersion) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITIPodSourceVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITIPodSource __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITIPodSource __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITIPodSource __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITIPodSource __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITIPodSource __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITIPodSource __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITIPodSource __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITIPodSource __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITIPodSource __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ ITSourceKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Capacity )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *capacity);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_FreeSpace )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ double __RPC_FAR *freespace);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Playlists )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylistCollection __RPC_FAR *__RPC_FAR *iPlaylistCollection);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *UpdateIPod )(
+ IITIPodSource __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *EjectIPod )(
+ IITIPodSource __RPC_FAR * This);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SoftwareVersion )(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *softwareVersion);
+
+ END_INTERFACE
+ } IITIPodSourceVtbl;
+
+ interface IITIPodSource
+ {
+ CONST_VTBL struct IITIPodSourceVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITIPodSource_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITIPodSource_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITIPodSource_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITIPodSource_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITIPodSource_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITIPodSource_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITIPodSource_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITIPodSource_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITIPodSource_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITIPodSource_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITIPodSource_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITIPodSource_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITIPodSource_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITIPodSource_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITIPodSource_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITIPodSource_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITIPodSource_get_Capacity(This,capacity) \
+ (This)->lpVtbl -> get_Capacity(This,capacity)
+
+#define IITIPodSource_get_FreeSpace(This,freespace) \
+ (This)->lpVtbl -> get_FreeSpace(This,freespace)
+
+#define IITIPodSource_get_Playlists(This,iPlaylistCollection) \
+ (This)->lpVtbl -> get_Playlists(This,iPlaylistCollection)
+
+
+#define IITIPodSource_UpdateIPod(This) \
+ (This)->lpVtbl -> UpdateIPod(This)
+
+#define IITIPodSource_EjectIPod(This) \
+ (This)->lpVtbl -> EjectIPod(This)
+
+#define IITIPodSource_get_SoftwareVersion(This,softwareVersion) \
+ (This)->lpVtbl -> get_SoftwareVersion(This,softwareVersion)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITIPodSource_UpdateIPod_Proxy(
+ IITIPodSource __RPC_FAR * This);
+
+
+void __RPC_STUB IITIPodSource_UpdateIPod_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITIPodSource_EjectIPod_Proxy(
+ IITIPodSource __RPC_FAR * This);
+
+
+void __RPC_STUB IITIPodSource_EjectIPod_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITIPodSource_get_SoftwareVersion_Proxy(
+ IITIPodSource __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *softwareVersion);
+
+
+void __RPC_STUB IITIPodSource_get_SoftwareVersion_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITIPodSource_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITFileOrCDTrack_INTERFACE_DEFINED__
+#define __IITFileOrCDTrack_INTERFACE_DEFINED__
+
+/* interface IITFileOrCDTrack */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITFileOrCDTrack;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("00D7FE99-7868-4cc7-AD9E-ACFD70D09566")
+ IITFileOrCDTrack : public IITTrack
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Location(
+ /* [retval][out] */ BSTR __RPC_FAR *location) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UpdateInfoFromFile( void) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Podcast(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isPodcast) = 0;
+
+ virtual /* [helpstring] */ HRESULT STDMETHODCALLTYPE UpdatePodcastFeed( void) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_RememberBookmark(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *rememberBookmark) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_RememberBookmark(
+ /* [in] */ VARIANT_BOOL shouldRememberBookmark) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_ExcludeFromShuffle(
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *excludeFromShuffle) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_ExcludeFromShuffle(
+ /* [in] */ VARIANT_BOOL shouldExcludeFromShuffle) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Lyrics(
+ /* [retval][out] */ BSTR __RPC_FAR *lyrics) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Lyrics(
+ /* [in] */ BSTR lyrics) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Category(
+ /* [retval][out] */ BSTR __RPC_FAR *category) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Category(
+ /* [in] */ BSTR category) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Description(
+ /* [retval][out] */ BSTR __RPC_FAR *description) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_Description(
+ /* [in] */ BSTR description) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_LongDescription(
+ /* [retval][out] */ BSTR __RPC_FAR *longDescription) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_LongDescription(
+ /* [in] */ BSTR longDescription) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_BookmarkTime(
+ /* [retval][out] */ long __RPC_FAR *bookmarkTime) = 0;
+
+ virtual /* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE put_BookmarkTime(
+ /* [in] */ long bookmarkTime) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITFileOrCDTrackVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITFileOrCDTrack __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITFileOrCDTrack __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetITObjectIDs )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [out] */ long __RPC_FAR *sourceID,
+ /* [out] */ long __RPC_FAR *playlistID,
+ /* [out] */ long __RPC_FAR *trackID,
+ /* [out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Name )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Index )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SourceID )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sourceID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlaylistID )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playlistID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackID )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackID);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackDatabaseID )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *databaseID);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Delete )(
+ IITFileOrCDTrack __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Play )(
+ IITFileOrCDTrack __RPC_FAR * This);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *AddArtworkFromFile )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR filePath,
+ /* [retval][out] */ IITArtwork __RPC_FAR *__RPC_FAR *iArtwork);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ ITTrackKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Playlist )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Album )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *album);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Album )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR album);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Artist )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *artist);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Artist )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR artist);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BitRate )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bitrate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BPM )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *beatsPerMinute);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_BPM )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long beatsPerMinute);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Comment )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *comment);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Comment )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR comment);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Compilation )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isCompilation);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Compilation )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeCompilation);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Composer )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *composer);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Composer )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR composer);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DateAdded )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *dateAdded);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DiscCount )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_DiscCount )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long discCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_DiscNumber )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *discNumber);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_DiscNumber )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long discNumber);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Duration )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *duration);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Enabled )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isEnabled);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Enabled )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeEnabled);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_EQ )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *eq);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_EQ )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR eq);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Finish )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long finish);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Finish )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *finish);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Genre )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *genre);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Genre )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR genre);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Grouping )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *grouping);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Grouping )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR grouping);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_KindAsString )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ModificationDate )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *dateModified);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayedCount )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *playedCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_PlayedCount )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long playedCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayedDate )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ DATE __RPC_FAR *playedDate);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_PlayedDate )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ DATE playedDate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_PlayOrderIndex )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *index);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Rating )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *rating);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Rating )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long rating);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SampleRate )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *sampleRate);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Size )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *size);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Start )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *start);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Start )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long start);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Time )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *time);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackCount )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackCount);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_TrackCount )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long trackCount);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_TrackNumber )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *trackNumber);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_TrackNumber )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long trackNumber);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_VolumeAdjustment )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *volumeAdjustment);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_VolumeAdjustment )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long volumeAdjustment);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Year )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *year);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Year )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long year);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Artwork )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ IITArtworkCollection __RPC_FAR *__RPC_FAR *iArtworkCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Location )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *location);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *UpdateInfoFromFile )(
+ IITFileOrCDTrack __RPC_FAR * This);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Podcast )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isPodcast);
+
+ /* [helpstring] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *UpdatePodcastFeed )(
+ IITFileOrCDTrack __RPC_FAR * This);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_RememberBookmark )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *rememberBookmark);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_RememberBookmark )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldRememberBookmark);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_ExcludeFromShuffle )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *excludeFromShuffle);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_ExcludeFromShuffle )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldExcludeFromShuffle);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Lyrics )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *lyrics);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Lyrics )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR lyrics);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Category )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *category);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Category )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR category);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Description )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *description);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Description )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR description);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_LongDescription )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *longDescription);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_LongDescription )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR longDescription);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_BookmarkTime )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bookmarkTime);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_BookmarkTime )(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long bookmarkTime);
+
+ END_INTERFACE
+ } IITFileOrCDTrackVtbl;
+
+ interface IITFileOrCDTrack
+ {
+ CONST_VTBL struct IITFileOrCDTrackVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITFileOrCDTrack_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITFileOrCDTrack_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITFileOrCDTrack_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITFileOrCDTrack_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITFileOrCDTrack_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITFileOrCDTrack_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITFileOrCDTrack_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITFileOrCDTrack_GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID) \
+ (This)->lpVtbl -> GetITObjectIDs(This,sourceID,playlistID,trackID,databaseID)
+
+#define IITFileOrCDTrack_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITFileOrCDTrack_put_Name(This,name) \
+ (This)->lpVtbl -> put_Name(This,name)
+
+#define IITFileOrCDTrack_get_Index(This,index) \
+ (This)->lpVtbl -> get_Index(This,index)
+
+#define IITFileOrCDTrack_get_SourceID(This,sourceID) \
+ (This)->lpVtbl -> get_SourceID(This,sourceID)
+
+#define IITFileOrCDTrack_get_PlaylistID(This,playlistID) \
+ (This)->lpVtbl -> get_PlaylistID(This,playlistID)
+
+#define IITFileOrCDTrack_get_TrackID(This,trackID) \
+ (This)->lpVtbl -> get_TrackID(This,trackID)
+
+#define IITFileOrCDTrack_get_TrackDatabaseID(This,databaseID) \
+ (This)->lpVtbl -> get_TrackDatabaseID(This,databaseID)
+
+
+#define IITFileOrCDTrack_Delete(This) \
+ (This)->lpVtbl -> Delete(This)
+
+#define IITFileOrCDTrack_Play(This) \
+ (This)->lpVtbl -> Play(This)
+
+#define IITFileOrCDTrack_AddArtworkFromFile(This,filePath,iArtwork) \
+ (This)->lpVtbl -> AddArtworkFromFile(This,filePath,iArtwork)
+
+#define IITFileOrCDTrack_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITFileOrCDTrack_get_Playlist(This,iPlaylist) \
+ (This)->lpVtbl -> get_Playlist(This,iPlaylist)
+
+#define IITFileOrCDTrack_get_Album(This,album) \
+ (This)->lpVtbl -> get_Album(This,album)
+
+#define IITFileOrCDTrack_put_Album(This,album) \
+ (This)->lpVtbl -> put_Album(This,album)
+
+#define IITFileOrCDTrack_get_Artist(This,artist) \
+ (This)->lpVtbl -> get_Artist(This,artist)
+
+#define IITFileOrCDTrack_put_Artist(This,artist) \
+ (This)->lpVtbl -> put_Artist(This,artist)
+
+#define IITFileOrCDTrack_get_BitRate(This,bitrate) \
+ (This)->lpVtbl -> get_BitRate(This,bitrate)
+
+#define IITFileOrCDTrack_get_BPM(This,beatsPerMinute) \
+ (This)->lpVtbl -> get_BPM(This,beatsPerMinute)
+
+#define IITFileOrCDTrack_put_BPM(This,beatsPerMinute) \
+ (This)->lpVtbl -> put_BPM(This,beatsPerMinute)
+
+#define IITFileOrCDTrack_get_Comment(This,comment) \
+ (This)->lpVtbl -> get_Comment(This,comment)
+
+#define IITFileOrCDTrack_put_Comment(This,comment) \
+ (This)->lpVtbl -> put_Comment(This,comment)
+
+#define IITFileOrCDTrack_get_Compilation(This,isCompilation) \
+ (This)->lpVtbl -> get_Compilation(This,isCompilation)
+
+#define IITFileOrCDTrack_put_Compilation(This,shouldBeCompilation) \
+ (This)->lpVtbl -> put_Compilation(This,shouldBeCompilation)
+
+#define IITFileOrCDTrack_get_Composer(This,composer) \
+ (This)->lpVtbl -> get_Composer(This,composer)
+
+#define IITFileOrCDTrack_put_Composer(This,composer) \
+ (This)->lpVtbl -> put_Composer(This,composer)
+
+#define IITFileOrCDTrack_get_DateAdded(This,dateAdded) \
+ (This)->lpVtbl -> get_DateAdded(This,dateAdded)
+
+#define IITFileOrCDTrack_get_DiscCount(This,discCount) \
+ (This)->lpVtbl -> get_DiscCount(This,discCount)
+
+#define IITFileOrCDTrack_put_DiscCount(This,discCount) \
+ (This)->lpVtbl -> put_DiscCount(This,discCount)
+
+#define IITFileOrCDTrack_get_DiscNumber(This,discNumber) \
+ (This)->lpVtbl -> get_DiscNumber(This,discNumber)
+
+#define IITFileOrCDTrack_put_DiscNumber(This,discNumber) \
+ (This)->lpVtbl -> put_DiscNumber(This,discNumber)
+
+#define IITFileOrCDTrack_get_Duration(This,duration) \
+ (This)->lpVtbl -> get_Duration(This,duration)
+
+#define IITFileOrCDTrack_get_Enabled(This,isEnabled) \
+ (This)->lpVtbl -> get_Enabled(This,isEnabled)
+
+#define IITFileOrCDTrack_put_Enabled(This,shouldBeEnabled) \
+ (This)->lpVtbl -> put_Enabled(This,shouldBeEnabled)
+
+#define IITFileOrCDTrack_get_EQ(This,eq) \
+ (This)->lpVtbl -> get_EQ(This,eq)
+
+#define IITFileOrCDTrack_put_EQ(This,eq) \
+ (This)->lpVtbl -> put_EQ(This,eq)
+
+#define IITFileOrCDTrack_put_Finish(This,finish) \
+ (This)->lpVtbl -> put_Finish(This,finish)
+
+#define IITFileOrCDTrack_get_Finish(This,finish) \
+ (This)->lpVtbl -> get_Finish(This,finish)
+
+#define IITFileOrCDTrack_get_Genre(This,genre) \
+ (This)->lpVtbl -> get_Genre(This,genre)
+
+#define IITFileOrCDTrack_put_Genre(This,genre) \
+ (This)->lpVtbl -> put_Genre(This,genre)
+
+#define IITFileOrCDTrack_get_Grouping(This,grouping) \
+ (This)->lpVtbl -> get_Grouping(This,grouping)
+
+#define IITFileOrCDTrack_put_Grouping(This,grouping) \
+ (This)->lpVtbl -> put_Grouping(This,grouping)
+
+#define IITFileOrCDTrack_get_KindAsString(This,kind) \
+ (This)->lpVtbl -> get_KindAsString(This,kind)
+
+#define IITFileOrCDTrack_get_ModificationDate(This,dateModified) \
+ (This)->lpVtbl -> get_ModificationDate(This,dateModified)
+
+#define IITFileOrCDTrack_get_PlayedCount(This,playedCount) \
+ (This)->lpVtbl -> get_PlayedCount(This,playedCount)
+
+#define IITFileOrCDTrack_put_PlayedCount(This,playedCount) \
+ (This)->lpVtbl -> put_PlayedCount(This,playedCount)
+
+#define IITFileOrCDTrack_get_PlayedDate(This,playedDate) \
+ (This)->lpVtbl -> get_PlayedDate(This,playedDate)
+
+#define IITFileOrCDTrack_put_PlayedDate(This,playedDate) \
+ (This)->lpVtbl -> put_PlayedDate(This,playedDate)
+
+#define IITFileOrCDTrack_get_PlayOrderIndex(This,index) \
+ (This)->lpVtbl -> get_PlayOrderIndex(This,index)
+
+#define IITFileOrCDTrack_get_Rating(This,rating) \
+ (This)->lpVtbl -> get_Rating(This,rating)
+
+#define IITFileOrCDTrack_put_Rating(This,rating) \
+ (This)->lpVtbl -> put_Rating(This,rating)
+
+#define IITFileOrCDTrack_get_SampleRate(This,sampleRate) \
+ (This)->lpVtbl -> get_SampleRate(This,sampleRate)
+
+#define IITFileOrCDTrack_get_Size(This,size) \
+ (This)->lpVtbl -> get_Size(This,size)
+
+#define IITFileOrCDTrack_get_Start(This,start) \
+ (This)->lpVtbl -> get_Start(This,start)
+
+#define IITFileOrCDTrack_put_Start(This,start) \
+ (This)->lpVtbl -> put_Start(This,start)
+
+#define IITFileOrCDTrack_get_Time(This,time) \
+ (This)->lpVtbl -> get_Time(This,time)
+
+#define IITFileOrCDTrack_get_TrackCount(This,trackCount) \
+ (This)->lpVtbl -> get_TrackCount(This,trackCount)
+
+#define IITFileOrCDTrack_put_TrackCount(This,trackCount) \
+ (This)->lpVtbl -> put_TrackCount(This,trackCount)
+
+#define IITFileOrCDTrack_get_TrackNumber(This,trackNumber) \
+ (This)->lpVtbl -> get_TrackNumber(This,trackNumber)
+
+#define IITFileOrCDTrack_put_TrackNumber(This,trackNumber) \
+ (This)->lpVtbl -> put_TrackNumber(This,trackNumber)
+
+#define IITFileOrCDTrack_get_VolumeAdjustment(This,volumeAdjustment) \
+ (This)->lpVtbl -> get_VolumeAdjustment(This,volumeAdjustment)
+
+#define IITFileOrCDTrack_put_VolumeAdjustment(This,volumeAdjustment) \
+ (This)->lpVtbl -> put_VolumeAdjustment(This,volumeAdjustment)
+
+#define IITFileOrCDTrack_get_Year(This,year) \
+ (This)->lpVtbl -> get_Year(This,year)
+
+#define IITFileOrCDTrack_put_Year(This,year) \
+ (This)->lpVtbl -> put_Year(This,year)
+
+#define IITFileOrCDTrack_get_Artwork(This,iArtworkCollection) \
+ (This)->lpVtbl -> get_Artwork(This,iArtworkCollection)
+
+
+#define IITFileOrCDTrack_get_Location(This,location) \
+ (This)->lpVtbl -> get_Location(This,location)
+
+#define IITFileOrCDTrack_UpdateInfoFromFile(This) \
+ (This)->lpVtbl -> UpdateInfoFromFile(This)
+
+#define IITFileOrCDTrack_get_Podcast(This,isPodcast) \
+ (This)->lpVtbl -> get_Podcast(This,isPodcast)
+
+#define IITFileOrCDTrack_UpdatePodcastFeed(This) \
+ (This)->lpVtbl -> UpdatePodcastFeed(This)
+
+#define IITFileOrCDTrack_get_RememberBookmark(This,rememberBookmark) \
+ (This)->lpVtbl -> get_RememberBookmark(This,rememberBookmark)
+
+#define IITFileOrCDTrack_put_RememberBookmark(This,shouldRememberBookmark) \
+ (This)->lpVtbl -> put_RememberBookmark(This,shouldRememberBookmark)
+
+#define IITFileOrCDTrack_get_ExcludeFromShuffle(This,excludeFromShuffle) \
+ (This)->lpVtbl -> get_ExcludeFromShuffle(This,excludeFromShuffle)
+
+#define IITFileOrCDTrack_put_ExcludeFromShuffle(This,shouldExcludeFromShuffle) \
+ (This)->lpVtbl -> put_ExcludeFromShuffle(This,shouldExcludeFromShuffle)
+
+#define IITFileOrCDTrack_get_Lyrics(This,lyrics) \
+ (This)->lpVtbl -> get_Lyrics(This,lyrics)
+
+#define IITFileOrCDTrack_put_Lyrics(This,lyrics) \
+ (This)->lpVtbl -> put_Lyrics(This,lyrics)
+
+#define IITFileOrCDTrack_get_Category(This,category) \
+ (This)->lpVtbl -> get_Category(This,category)
+
+#define IITFileOrCDTrack_put_Category(This,category) \
+ (This)->lpVtbl -> put_Category(This,category)
+
+#define IITFileOrCDTrack_get_Description(This,description) \
+ (This)->lpVtbl -> get_Description(This,description)
+
+#define IITFileOrCDTrack_put_Description(This,description) \
+ (This)->lpVtbl -> put_Description(This,description)
+
+#define IITFileOrCDTrack_get_LongDescription(This,longDescription) \
+ (This)->lpVtbl -> get_LongDescription(This,longDescription)
+
+#define IITFileOrCDTrack_put_LongDescription(This,longDescription) \
+ (This)->lpVtbl -> put_LongDescription(This,longDescription)
+
+#define IITFileOrCDTrack_get_BookmarkTime(This,bookmarkTime) \
+ (This)->lpVtbl -> get_BookmarkTime(This,bookmarkTime)
+
+#define IITFileOrCDTrack_put_BookmarkTime(This,bookmarkTime) \
+ (This)->lpVtbl -> put_BookmarkTime(This,bookmarkTime)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_Location_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *location);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_Location_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_UpdateInfoFromFile_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This);
+
+
+void __RPC_STUB IITFileOrCDTrack_UpdateInfoFromFile_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_Podcast_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isPodcast);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_Podcast_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_UpdatePodcastFeed_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This);
+
+
+void __RPC_STUB IITFileOrCDTrack_UpdatePodcastFeed_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_RememberBookmark_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *rememberBookmark);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_RememberBookmark_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_put_RememberBookmark_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldRememberBookmark);
+
+
+void __RPC_STUB IITFileOrCDTrack_put_RememberBookmark_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_ExcludeFromShuffle_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *excludeFromShuffle);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_ExcludeFromShuffle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_put_ExcludeFromShuffle_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldExcludeFromShuffle);
+
+
+void __RPC_STUB IITFileOrCDTrack_put_ExcludeFromShuffle_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_Lyrics_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *lyrics);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_Lyrics_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_put_Lyrics_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR lyrics);
+
+
+void __RPC_STUB IITFileOrCDTrack_put_Lyrics_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_Category_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *category);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_Category_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_put_Category_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR category);
+
+
+void __RPC_STUB IITFileOrCDTrack_put_Category_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_Description_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *description);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_Description_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_put_Description_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR description);
+
+
+void __RPC_STUB IITFileOrCDTrack_put_Description_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_LongDescription_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *longDescription);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_LongDescription_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_put_LongDescription_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ BSTR longDescription);
+
+
+void __RPC_STUB IITFileOrCDTrack_put_LongDescription_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_get_BookmarkTime_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bookmarkTime);
+
+
+void __RPC_STUB IITFileOrCDTrack_get_BookmarkTime_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propput] */ HRESULT STDMETHODCALLTYPE IITFileOrCDTrack_put_BookmarkTime_Proxy(
+ IITFileOrCDTrack __RPC_FAR * This,
+ /* [in] */ long bookmarkTime);
+
+
+void __RPC_STUB IITFileOrCDTrack_put_BookmarkTime_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITFileOrCDTrack_INTERFACE_DEFINED__ */
+
+
+#ifndef __IITPlaylistWindow_INTERFACE_DEFINED__
+#define __IITPlaylistWindow_INTERFACE_DEFINED__
+
+/* interface IITPlaylistWindow */
+/* [hidden][unique][helpstring][dual][uuid][object] */
+
+
+EXTERN_C const IID IID_IITPlaylistWindow;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("349CBB45-2E5A-4822-8E4A-A75555A186F7")
+ IITPlaylistWindow : public IITWindow
+ {
+ public:
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_SelectedTracks(
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection) = 0;
+
+ virtual /* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE get_Playlist(
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IITPlaylistWindowVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *QueryInterface )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [iid_is][out] */ void __RPC_FAR *__RPC_FAR *ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *AddRef )(
+ IITPlaylistWindow __RPC_FAR * This);
+
+ ULONG ( STDMETHODCALLTYPE __RPC_FAR *Release )(
+ IITPlaylistWindow __RPC_FAR * This);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfoCount )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [out] */ UINT __RPC_FAR *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetTypeInfo )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo __RPC_FAR *__RPC_FAR *ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *GetIDsOfNames )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR __RPC_FAR *rgszNames,
+ /* [in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID __RPC_FAR *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *Invoke )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS __RPC_FAR *pDispParams,
+ /* [out] */ VARIANT __RPC_FAR *pVarResult,
+ /* [out] */ EXCEPINFO __RPC_FAR *pExcepInfo,
+ /* [out] */ UINT __RPC_FAR *puArgErr);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Name )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ BSTR __RPC_FAR *name);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Kind )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ ITWindowKind __RPC_FAR *kind);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Visible )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isVisible);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Visible )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeVisible);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Resizable )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isResizable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Minimized )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMinimized);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Minimized )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMinimized);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Maximizable )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximizable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Maximized )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isMaximized);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Maximized )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeMaximized);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Zoomable )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomable);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Zoomed )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ VARIANT_BOOL __RPC_FAR *isZoomed);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Zoomed )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ VARIANT_BOOL shouldBeZoomed);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Top )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *top);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Top )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ long top);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Left )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *left);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Left )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ long left);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Bottom )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *bottom);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Bottom )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ long bottom);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Right )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *right);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Right )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ long right);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Width )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *width);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Width )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ long width);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Height )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ long __RPC_FAR *height);
+
+ /* [helpstring][propput] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *put_Height )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [in] */ long height);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_SelectedTracks )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+ /* [helpstring][propget] */ HRESULT ( STDMETHODCALLTYPE __RPC_FAR *get_Playlist )(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+ END_INTERFACE
+ } IITPlaylistWindowVtbl;
+
+ interface IITPlaylistWindow
+ {
+ CONST_VTBL struct IITPlaylistWindowVtbl __RPC_FAR *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IITPlaylistWindow_QueryInterface(This,riid,ppvObject) \
+ (This)->lpVtbl -> QueryInterface(This,riid,ppvObject)
+
+#define IITPlaylistWindow_AddRef(This) \
+ (This)->lpVtbl -> AddRef(This)
+
+#define IITPlaylistWindow_Release(This) \
+ (This)->lpVtbl -> Release(This)
+
+
+#define IITPlaylistWindow_GetTypeInfoCount(This,pctinfo) \
+ (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo)
+
+#define IITPlaylistWindow_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo)
+
+#define IITPlaylistWindow_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
+
+#define IITPlaylistWindow_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
+
+
+#define IITPlaylistWindow_get_Name(This,name) \
+ (This)->lpVtbl -> get_Name(This,name)
+
+#define IITPlaylistWindow_get_Kind(This,kind) \
+ (This)->lpVtbl -> get_Kind(This,kind)
+
+#define IITPlaylistWindow_get_Visible(This,isVisible) \
+ (This)->lpVtbl -> get_Visible(This,isVisible)
+
+#define IITPlaylistWindow_put_Visible(This,shouldBeVisible) \
+ (This)->lpVtbl -> put_Visible(This,shouldBeVisible)
+
+#define IITPlaylistWindow_get_Resizable(This,isResizable) \
+ (This)->lpVtbl -> get_Resizable(This,isResizable)
+
+#define IITPlaylistWindow_get_Minimized(This,isMinimized) \
+ (This)->lpVtbl -> get_Minimized(This,isMinimized)
+
+#define IITPlaylistWindow_put_Minimized(This,shouldBeMinimized) \
+ (This)->lpVtbl -> put_Minimized(This,shouldBeMinimized)
+
+#define IITPlaylistWindow_get_Maximizable(This,isMaximizable) \
+ (This)->lpVtbl -> get_Maximizable(This,isMaximizable)
+
+#define IITPlaylistWindow_get_Maximized(This,isMaximized) \
+ (This)->lpVtbl -> get_Maximized(This,isMaximized)
+
+#define IITPlaylistWindow_put_Maximized(This,shouldBeMaximized) \
+ (This)->lpVtbl -> put_Maximized(This,shouldBeMaximized)
+
+#define IITPlaylistWindow_get_Zoomable(This,isZoomable) \
+ (This)->lpVtbl -> get_Zoomable(This,isZoomable)
+
+#define IITPlaylistWindow_get_Zoomed(This,isZoomed) \
+ (This)->lpVtbl -> get_Zoomed(This,isZoomed)
+
+#define IITPlaylistWindow_put_Zoomed(This,shouldBeZoomed) \
+ (This)->lpVtbl -> put_Zoomed(This,shouldBeZoomed)
+
+#define IITPlaylistWindow_get_Top(This,top) \
+ (This)->lpVtbl -> get_Top(This,top)
+
+#define IITPlaylistWindow_put_Top(This,top) \
+ (This)->lpVtbl -> put_Top(This,top)
+
+#define IITPlaylistWindow_get_Left(This,left) \
+ (This)->lpVtbl -> get_Left(This,left)
+
+#define IITPlaylistWindow_put_Left(This,left) \
+ (This)->lpVtbl -> put_Left(This,left)
+
+#define IITPlaylistWindow_get_Bottom(This,bottom) \
+ (This)->lpVtbl -> get_Bottom(This,bottom)
+
+#define IITPlaylistWindow_put_Bottom(This,bottom) \
+ (This)->lpVtbl -> put_Bottom(This,bottom)
+
+#define IITPlaylistWindow_get_Right(This,right) \
+ (This)->lpVtbl -> get_Right(This,right)
+
+#define IITPlaylistWindow_put_Right(This,right) \
+ (This)->lpVtbl -> put_Right(This,right)
+
+#define IITPlaylistWindow_get_Width(This,width) \
+ (This)->lpVtbl -> get_Width(This,width)
+
+#define IITPlaylistWindow_put_Width(This,width) \
+ (This)->lpVtbl -> put_Width(This,width)
+
+#define IITPlaylistWindow_get_Height(This,height) \
+ (This)->lpVtbl -> get_Height(This,height)
+
+#define IITPlaylistWindow_put_Height(This,height) \
+ (This)->lpVtbl -> put_Height(This,height)
+
+
+#define IITPlaylistWindow_get_SelectedTracks(This,iTrackCollection) \
+ (This)->lpVtbl -> get_SelectedTracks(This,iTrackCollection)
+
+#define IITPlaylistWindow_get_Playlist(This,iPlaylist) \
+ (This)->lpVtbl -> get_Playlist(This,iPlaylist)
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylistWindow_get_SelectedTracks_Proxy(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ IITTrackCollection __RPC_FAR *__RPC_FAR *iTrackCollection);
+
+
+void __RPC_STUB IITPlaylistWindow_get_SelectedTracks_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+/* [helpstring][propget] */ HRESULT STDMETHODCALLTYPE IITPlaylistWindow_get_Playlist_Proxy(
+ IITPlaylistWindow __RPC_FAR * This,
+ /* [retval][out] */ IITPlaylist __RPC_FAR *__RPC_FAR *iPlaylist);
+
+
+void __RPC_STUB IITPlaylistWindow_get_Playlist_Stub(
+ IRpcStubBuffer *This,
+ IRpcChannelBuffer *_pRpcChannelBuffer,
+ PRPC_MESSAGE _pRpcMessage,
+ DWORD *_pdwStubPhase);
+
+
+
+#endif /* __IITPlaylistWindow_INTERFACE_DEFINED__ */
+
+#endif /* __iTunesLib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/Plugins/listeningto/players/iTunes/iTunesCOMInterface_i.c b/Plugins/listeningto/players/iTunes/iTunesCOMInterface_i.c new file mode 100644 index 0000000..67e71f6 --- /dev/null +++ b/Plugins/listeningto/players/iTunes/iTunesCOMInterface_i.c @@ -0,0 +1,140 @@ +/* this file contains the actual definitions of */
+/* the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+/* File created by MIDL compiler version 5.01.0164 */
+/* at Tue Sep 06 13:11:55 2005
+ */
+/* Compiler settings for iTunesCOMInterface.idl:
+ Oicf (OptLev=i2), W1, Zp8, env=Win32, ms_ext, c_ext
+ error checks: allocation ref bounds_check enum stub_data
+*/
+//@@MIDL_FILE_HEADING( )
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+ unsigned long x;
+ unsigned short s1;
+ unsigned short s2;
+ unsigned char c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+const IID LIBID_iTunesLib = {0x9E93C96F,0xCF0D,0x43f6,{0x8B,0xA8,0xB8,0x07,0xA3,0x37,0x07,0x12}};
+
+
+const IID IID_IITObject = {0x9FAB0E27,0x70D7,0x4e3a,{0x99,0x65,0xB0,0xC8,0xB8,0x86,0x9B,0xB6}};
+
+
+const IID IID_IITSource = {0xAEC1C4D3,0xAEF1,0x4255,{0xB8,0x92,0x3E,0x3D,0x13,0xAD,0xFD,0xF9}};
+
+
+const IID IID_IITSourceCollection = {0x2FF6CE20,0xFF87,0x4183,{0xB0,0xB3,0xF3,0x23,0xD0,0x47,0xAF,0x41}};
+
+
+const IID IID_IITEncoder = {0x1CF95A1C,0x55FE,0x4f45,{0xA2,0xD3,0x85,0xAC,0x6C,0x50,0x4A,0x73}};
+
+
+const IID IID_IITEncoderCollection = {0x8862BCA9,0x168D,0x4549,{0xA9,0xD5,0xAD,0xB3,0x5E,0x55,0x3B,0xA6}};
+
+
+const IID IID_IITEQPreset = {0x5BE75F4F,0x68FA,0x4212,{0xAC,0xB7,0xBE,0x44,0xEA,0x56,0x97,0x59}};
+
+
+const IID IID_IITEQPresetCollection = {0xAEF4D111,0x3331,0x48da,{0xB0,0xC2,0xB4,0x68,0xD5,0xD6,0x1D,0x08}};
+
+
+const IID IID_IITPlaylist = {0x3D5E072F,0x2A77,0x4b17,{0x9E,0x73,0xE0,0x3B,0x77,0xCC,0xCC,0xA9}};
+
+
+const IID IID_IITOperationStatus = {0x206479C9,0xFE32,0x4f9b,{0xA1,0x8A,0x47,0x5A,0xC9,0x39,0xB4,0x79}};
+
+
+const IID IID_IITConvertOperationStatus = {0x7063AAF6,0xABA0,0x493b,{0xB4,0xFC,0x92,0x0A,0x9F,0x10,0x58,0x75}};
+
+
+const IID IID_IITLibraryPlaylist = {0x53AE1704,0x491C,0x4289,{0x94,0xA0,0x95,0x88,0x15,0x67,0x5A,0x3D}};
+
+
+const IID IID_IITUserPlaylist = {0x0A504DED,0xA0B5,0x465a,{0x8A,0x94,0x50,0xE2,0x0D,0x7D,0xF6,0x92}};
+
+
+const IID IID_IITTrack = {0x4CB0915D,0x1E54,0x4727,{0xBA,0xF3,0xCE,0x6C,0xC9,0xA2,0x25,0xA1}};
+
+
+const IID IID_IITTrackCollection = {0x755D76F1,0x6B85,0x4ce4,{0x8F,0x5F,0xF8,0x8D,0x97,0x43,0xDC,0xD8}};
+
+
+const IID IID_IITVisual = {0x340F3315,0xED72,0x4c09,{0x9A,0xCF,0x21,0xEB,0x4B,0xDF,0x99,0x31}};
+
+
+const IID IID_IITVisualCollection = {0x88A4CCDD,0x114F,0x4043,{0xB6,0x9B,0x84,0xD4,0xE6,0x27,0x49,0x57}};
+
+
+const IID IID_IITWindow = {0x370D7BE0,0x3A89,0x4a42,{0xB9,0x02,0xC7,0x5F,0xC1,0x38,0xBE,0x09}};
+
+
+const IID IID_IITBrowserWindow = {0xC999F455,0xC4D5,0x4aa4,{0x82,0x77,0xF9,0x97,0x53,0x69,0x99,0x74}};
+
+
+const IID IID_IITWindowCollection = {0x3D8DE381,0x6C0E,0x481f,{0xA8,0x65,0xE2,0x38,0x5F,0x59,0xFA,0x43}};
+
+
+const IID IID_IiTunes = {0x9DD6680B,0x3EDC,0x40db,{0xA7,0x71,0xE6,0xFE,0x48,0x32,0xE3,0x4A}};
+
+
+const IID DIID__IiTunesEvents = {0x5846EB78,0x317E,0x4b6f,{0xB0,0xC3,0x11,0xEE,0x8C,0x8F,0xEE,0xF2}};
+
+
+const IID DIID__IITConvertOperationStatusEvents = {0x5C47A705,0x8E8A,0x45a1,{0x9E,0xED,0x71,0xC9,0x93,0xF0,0xBF,0x60}};
+
+
+const CLSID CLSID_iTunesApp = {0xDC0C2640,0x1415,0x4644,{0x87,0x5C,0x6F,0x4D,0x76,0x98,0x39,0xBA}};
+
+
+const CLSID CLSID_iTunesConvertOperationStatus = {0xD06596AD,0xC900,0x41b2,{0xBC,0x68,0x1B,0x48,0x64,0x50,0xFC,0x56}};
+
+
+const IID IID_IITArtwork = {0xD0A6C1F8,0xBF3D,0x4cd8,{0xAC,0x47,0xFE,0x32,0xBD,0xD1,0x72,0x57}};
+
+
+const IID IID_IITArtworkCollection = {0xBF2742D7,0x418C,0x4858,{0x9A,0xF9,0x29,0x81,0xB0,0x62,0xD2,0x3E}};
+
+
+const IID IID_IITURLTrack = {0x1116E3B5,0x29FD,0x4393,{0xA7,0xBD,0x45,0x4E,0x5E,0x32,0x79,0x00}};
+
+
+const IID IID_IITAudioCDPlaylist = {0xCF496DF3,0x0FED,0x4d7d,{0x9B,0xD8,0x52,0x9B,0x6E,0x8A,0x08,0x2E}};
+
+
+const IID IID_IITPlaylistCollection = {0xFF194254,0x909D,0x4437,{0x9C,0x50,0x3A,0xAC,0x2A,0xE6,0x30,0x5C}};
+
+
+const IID IID_IITIPodSource = {0xCF4D8ACE,0x1720,0x4fb9,{0xB0,0xAE,0x98,0x77,0x24,0x9E,0x89,0xB0}};
+
+
+const IID IID_IITFileOrCDTrack = {0x00D7FE99,0x7868,0x4cc7,{0xAD,0x9E,0xAC,0xFD,0x70,0xD0,0x95,0x66}};
+
+
+const IID IID_IITPlaylistWindow = {0x349CBB45,0x2E5A,0x4822,{0x8E,0x4A,0xA7,0x55,0x55,0xA1,0x86,0xF7}};
+
+
+#ifdef __cplusplus
+}
+#endif
+
diff --git a/Plugins/listeningto/players/itunes.cpp b/Plugins/listeningto/players/itunes.cpp index b00e6e4..05fe85a 100644 --- a/Plugins/listeningto/players/itunes.cpp +++ b/Plugins/listeningto/players/itunes.cpp @@ -1,188 +1,491 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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 "..\\commons.h"
-
+#include "..\commons.h"
extern "C"
{
-#include "iTunesCOMInterface_i.c"
+#include ".\iTunes\iTunesCOMInterface_i.c"
}
+/////////////////////////////////////////////////////////////////////////////
+// main
-ITunes::ITunes()
+ITunes::ITunes(int index)
+: Player(index)
{
- name = _T("iTunes");
- needPoll = TRUE;
+ m_name = _T("iTunes");
- filename[0] = L'\0';
+ m_filename[0] = L'\0';
- hwnd = NULL;
- iTunesApp = NULL;
- track = NULL;
- file = NULL;
- ret = NULL;
+ m_comApp = NULL;
+ m_comAppEventSink = NULL;
+ m_comTrack = NULL;
+// m_comFile = NULL;
+ m_comRet = NULL;
+ m_vbServerState = VARIANT_FALSE;
+ m_state = PL_OFFLINE;
}
-
-void ITunes::FindWindow()
+ITunes::~ITunes()
{
- hwnd = ::FindWindow(_T("iTunes"), _T("iTunes"));
+ COM_Stop();
+ FreeData();
}
-
-void ITunes::FreeTempData()
+HWND
+ITunes::FindWindow()
{
-#define RELEASE(_x_) if (_x_ != NULL) { _x_->Release(); _x_ = NULL; }
-
- RELEASE(file);
- RELEASE(track);
- RELEASE(iTunesApp);
-
- if (ret != NULL)
- {
- SysFreeString(ret);
- ret = NULL;
+ HWND hwnd = ::FindWindow(_T("iTunes"), _T("iTunes"));
+ if (hwnd != m_hwnd) {
+ m_hwnd = hwnd;
+ if(m_comApp) COM_ReleaseServer();
+ if(m_hwnd) COM_ConnectServer();
}
+ return m_hwnd;
}
-
-#define CALL(_F_) hr = _F_; if (FAILED(hr)) return FALSE
-
-// Init data and put filename playing in ret and ->fi.filename
-BOOL ITunes::InitAndGetFilename()
+void
+ITunes::EnableDisable()
{
- HRESULT hr;
-
- // Find window
- FindWindow();
- if (hwnd == NULL)
- return FALSE;
-
- CALL( CoCreateInstance(CLSID_iTunesApp, NULL, CLSCTX_LOCAL_SERVER, __uuidof(iTunesApp), (void **)&iTunesApp) );
-
- ITPlayerState state;
- CALL( iTunesApp->get_PlayerState(&state) );
- if (state == ITPlayerStateStopped)
- return FALSE;
-
- CALL( iTunesApp->get_CurrentTrack(&track) );
- if (track == NULL)
- return FALSE;
+ static BOOL old = FALSE;
+ if(m_enabled == old) {
+ return;
+ }
+ else if(m_enabled){
+ COM_Start();
+ }
+ else {
+ COM_Stop();
+ }
+ old = m_enabled;
+}
- CALL( track->QueryInterface(__uuidof(file), (void **)&file) );
+BYTE
+ITunes::GetStatus()
+{
+ if(m_needPoll)
+ FindWindow();
+ return m_state;
+}
- CALL( file->get_Location(&ret) );
+/////////////////////////////////////////////////////////////////////////////
+// COM ...
- return !IsEmpty(ret);
+BOOL
+ITunes::COM_Start()
+{
+ m_needPoll = TRUE;
+ COM_ConnectServer();
+ return TRUE;
}
+BOOL
+ITunes::COM_Stop()
+{
+ COM_ReleaseServer();
+ m_needPoll = FALSE;
+ return TRUE;
+}
-BOOL ITunes::FillCache()
+BOOL
+ITunes::COM_ConnectServer()
{
HRESULT hr;
- long lret;
-
- CALL( track->get_Album(&ret) );
- listening_info.ptszAlbum = U2T(ret);
-
- CALL( track->get_Artist(&ret) );
- listening_info.ptszArtist = U2T(ret);
+ //***** Attach to the running COM instance... *****/
+ //if (SUCCEEDED(ObjGet(CLSID_iTunesApp, __uuidof(m_comApp), (void**)&m_comApp))) {
+
+ // ***** Start new COM instance... *****
+ hr = CoCreateInstance( CLSID_iTunesApp,
+ NULL,
+ CLSCTX_LOCAL_SERVER,
+ __uuidof(m_comApp),
+ (void **)&m_comApp );
+ if(SUCCEEDED(hr)) {
+ m_vbServerState = VARIANT_TRUE;
+ DEBUGOUT("iTunes: \tcom Server ","on");
+ // ***** get the IITTrack interface...
+ CALL( m_comApp->get_CurrentTrack(&m_comTrack) );
+ if (m_comTrack == NULL)
+ goto FAILURE;
+ // ***** Instantiate an IMIM_iTunesEventH object. *****
+ m_comAppEventSink = new IMIM_iTunesEventH(*this, m_comApp, &ITunes::COM_OnEventInvoke);
+ if(!m_comAppEventSink)
+ goto FAILURE;
+ m_state = PL_STOPPED;
+ SetActivePlayer(m_index, m_index);
+
+ BOOL isPause = COM_IsPause();
+ ITPlayerState bState;
+ if(SUCCEEDED(m_comApp->get_PlayerState(&bState)) && isPause != -1)
+ switch(bState) {
+ //TODO: check result for NotifyInfoChanged() needet
+ case ITPlayerStatePlaying:
+ m_state = isPause ? PL_PAUSED : PL_PLAYING;
+ DEBUGOUT("iTune_Evt:\tPlayerState = ", isPause ? "Playing (Pause)" : "Playing");
+ NotifyInfoChanged();
+ break;
+ case ITPlayerStateStopped:
+ m_state = isPause ? PL_PAUSED : PL_STOPPED;
+ DEBUGOUT("iTune_Evt:\tPlayerState = ", isPause ? "Stopped (Pause)" : "Stopped");
+ m_state = PL_STOPPED;
+ break;
+ case ITPlayerStateFastForward:
+ m_state = PL_FORWARD;
+ DEBUGOUT("iTune_Evt:\tPlayerState = ","FastForward");
+ break;
+ case ITPlayerStateRewind:
+ m_state = PL_REWIND;
+ DEBUGOUT("iTune_Evt:\tPlayerState = ","Rewind");
+ break;
+ }//end switch(bState)
+ }
+ else {
+ DEBUGOUT("iTunes: \tcom Server ","off");
+ m_state = PL_OFFLINE;
+ return FALSE;
+ }
+ return TRUE;
- CALL( track->get_Name(&ret) );
- listening_info.ptszTitle = U2T(ret);
+FAILURE:
+ COM_ReleaseServer();
+ return FALSE;
+}
- CALL( track->get_Year(&lret) );
- if (lret > 0)
- {
- listening_info.ptszYear = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
- _itot(lret, listening_info.ptszYear, 10);
+void
+ITunes::COM_ReleaseServer()
+{
+ // Stop listening to events
+ /* When the program is terminating, make sure that we instruct our */
+ /* Event Handler to disconnect from the connection point of the */
+ /* object which implemented the IEventFiringObject interface. */
+ /* We also needs to Release() it (instead of deleting it). */
+ if (m_comAppEventSink) {
+ m_comAppEventSink -> ShutdownConnectionPoint();
+ m_comAppEventSink -> Release();
+ m_comAppEventSink = NULL;
}
+ RELEASE(m_comTrack, m_vbServerState);
+ RELEASE(m_comApp, m_vbServerState);
+ BSTRFREE(m_comRet);
+
+ m_state = PL_OFFLINE;
+ m_needPoll = TRUE;
+ if(loaded)
+ NotifyInfoChanged();
+}
- CALL( track->get_TrackNumber(&lret) );
- if (lret > 0)
- {
- listening_info.ptszTrack = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
- _itot(lret, listening_info.ptszTrack, 10);
- }
+BOOL
+ITunes::COM_infoCache()
+{
+ if( (m_state <= PL_STOPPED) ||
+ (m_comAppEventSink && m_comAppEventSink->m_vbServerState == VARIANT_FALSE) ||
+ (!m_comTrack) )
+ return FALSE;
- CALL( track->get_Genre(&ret) );
- listening_info.ptszGenre = U2T(ret);
+ HRESULT hr;
+ long lret;
+ IITFileOrCDTrack *comFile = NULL;
- CALL( track->get_Duration(&lret) );
- if (lret > 0)
- {
- listening_info.ptszLength = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
+/* TODO: cleanup comment (now we get ITPlayerState from event see m_state member)
+ ITPlayerState state;
+ CALL( m_comApp->get_PlayerState(&state) );
+ if (state == ITPlayerStateStopped ) return FALSE;
+*/
- int s = lret % 60;
- int m = (lret / 60) % 60;
- int h = (lret / 60) / 60;
+ //set m_listening_info.cbSize to make FreeData() posibil
+ m_listening_info.cbSize = sizeof(m_listening_info);
- if (h > 0)
- mir_sntprintf(listening_info.ptszLength, 9, _T("%d:%02d:%02d"), h, m, s);
- else
- mir_sntprintf(listening_info.ptszLength, 9, _T("%d:%02d"), m, s);
- }
+ if(SUCCEEDED(m_comTrack->get_Name(&m_comRet)))
+ m_listening_info.ptszTitle = mir_bstr2t(m_comRet);
- listening_info.ptszType = mir_tstrdup(_T("Music"));
-
- if (listening_info.ptszTitle == NULL)
- {
+ if (!m_listening_info.ptszTitle) {
// Get from filename
- WCHAR *p = wcsrchr(filename, '\\');
+ // ***** get the IITFileOrCDTrack interface...
+ CALL( m_comTrack->QueryInterface(__uuidof(comFile), (void **)&comFile) );
+ if (comFile == NULL)
+ goto FAILURE;
+ CALL( comFile->get_Location(&m_comRet) );
+ if(SysStringLen(m_comRet)==0)
+ goto FAILURE;
+ RELEASE(comFile, m_vbServerState);
+
+ wcscpy(m_filename, m_comRet);
+ WCHAR *p = wcsrchr(m_filename, '\\');
if (p != NULL)
p++;
else
- p = filename;
+ p = m_filename;
- listening_info.ptszTitle = mir_u2t(p);
+ m_listening_info.ptszTitle = mir_u2t(p);
- TCHAR *pt = _tcsrchr(listening_info.ptszTitle, '.');
+ TCHAR *pt = _tcsrchr(m_listening_info.ptszTitle, '.');
if (pt != NULL)
*p = _T('\0');
}
- listening_info.ptszPlayer = mir_tstrdup(name);
-
- listening_info.cbSize = sizeof(listening_info);
- listening_info.dwFlags = LTI_TCHAR;
-
+ m_listening_info.ptszPlayer = mir_tstrdup(m_name);
+ m_listening_info.ptszType = mir_tstrdup(_T("Music"));
+ m_listening_info.dwFlags = LTI_TCHAR;
+
+ if(SUCCEEDED(m_comTrack->get_Album(&m_comRet)))
+ m_listening_info.ptszAlbum = mir_bstr2t(m_comRet);
+
+ if(SUCCEEDED(m_comTrack->get_Artist(&m_comRet)))
+ m_listening_info.ptszArtist = mir_bstr2t(m_comRet);
+
+ if(SUCCEEDED(m_comTrack->get_Year(&lret)))
+ if (lret > 0)
+ {
+ m_listening_info.ptszYear = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
+ _i64tot(lret, m_listening_info.ptszYear, 10);
+ }
+
+ if(SUCCEEDED(m_comTrack->get_TrackNumber(&lret)))
+ if (lret > 0)
+ {
+ m_listening_info.ptszTrack = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
+ _i64tot(lret, m_listening_info.ptszTrack, 10);
+ }
+
+ if(SUCCEEDED(m_comTrack->get_Genre(&m_comRet)))
+ m_listening_info.ptszGenre = mir_bstr2t(m_comRet);
+
+ if(SUCCEEDED(m_comTrack->get_Duration(&lret)))
+ if (lret > 0)
+ {
+ m_listening_info.ptszLength = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
+
+ int s = lret % 60;
+ int m = (lret / 60) % 60;
+ int h = (lret / 60) / 60;
+
+ if (h > 0)
+ mir_sntprintf(m_listening_info.ptszLength, 9, _T("%d:%02d:%02d"), h, m, s);
+ else
+ mir_sntprintf(m_listening_info.ptszLength, 9, _T("%d:%02d"), m, s);
+ }
return TRUE;
-}
-
-BOOL ITunes::GetListeningInfo(LISTENINGTOINFO *lti)
-{
+FAILURE:
FreeData();
+ RELEASE(comFile, m_vbServerState);
+ BSTRFREE(m_comRet);
+ return FALSE;
+}
- if (InitAndGetFilename() && strcmpnullW(filename, ret) != 0)
- {
- // Fill the data cache
- wcscpy(filename, ret);
+// ***** COM_OnEventInvoke() is inoked by the TEventHandler based class object *****
+// ***** when an event is fired from the COM object that implements .FiringObject. *****
+HRESULT
+ITunes::COM_OnEventInvoke(
+ void* pEventHandler,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS FAR* pDispParams,
+ VARIANT FAR* pVarResult,
+ EXCEPINFO FAR* pExcepInfo,
+ UINT FAR* puArgErr )
+{
+ if (!pDispParams)
+ return E_POINTER;
+
+ HRESULT hr = S_OK;
+ //TODO: check if all events work
+ if (pEventHandler==m_comAppEventSink) {
+ switch (dispIdMember) {
+ case ITEventDatabaseChanged: //= 1,
+ {/* not needet*/
+ DEBUGOUT("iTune_Evt:\tDatabase","Changed");
+ } break;
+ case ITEventPlayerPlay: //= 2,
+ {/* Parameters:(ITTrack iTrack)
+ iTrack - An ITTrack object corresponding to the track that has started playing.
+ The ITEventPlayerPlay event is fired when a track begins playing.*/
+ DEBUGOUT("iTune_Evt:\tPlayer","Play");
+ m_state = PL_PLAYING;
+ NotifyInfoChanged();
+ } break;
+ case ITEventPlayerStop: //= 3,
+ {/* Parameters:(ITTrack iTrack)
+ iTrack - An ITTrack object corresponding to the track that has stopped playing.
+ The ITEventPlayerStop event is fired when a track stops playing.*/
+ DEBUGOUT("iTune_Evt:\tPlayer","Stop");
+ m_state = PL_STOPPED;
+ NotifyInfoChanged();
+ } break;
+ case ITEventPlayerPlayingTrackChanged: //= 4,
+ {/* Parameters:(ITTrack iTrack)
+ iTrack - An ITTrack object corresponding to the track that is now playing.
+ The ITEventPlayerPlayingTrackChanged event is fired when information about
+ the currently playing track has changed. This event is fired when the user
+ changes information about the currently playing track (e.g. the name of the track).
+ This event is also fired when iTunes plays the next joined CD track in a CD playlist,
+ since joined CD tracks are treated as a single track.*/
+ //RELEASE(m_comTrack, TRUE);
+ //m_comTrack = pDispParams->rgvarg[0].pdispVal;
+ DEBUGOUT("iTune_Evt:\tPlayer","PlayingTrackChanged");
+ m_state = PL_PLAYING;
+ NotifyInfoChanged();
+ } break;
+ case ITEventUserInterfaceEnabled: //= 5,
+ {/* no info, dont know what to do with this event*/
+ DEBUGOUT("iTune_Evt:\tUserInterfaceEnabled","");
+ } break;
+ case ITEventCOMCallsDisabled: //= 6,
+ {/* Parameters:(ITCOMDisabledReason reason)
+ reason - The reason the COM interface is being disabled. This is typically ITCOMDisabledReasonDialog.
+ The ITEventCOMCallsDisabled event is fired when calls to the iTunes COM interface will be deferred.
+ Typically, iTunes will defer COM calls when any modal dialog is being displayed.
+ When the user dismisses the last modal dialog, COM calls will be enabled again,
+ and any deferred COM calls will be executed.
+ You can use this event to avoid making a COM call which will be deferred.*/
+ switch (pDispParams->rgvarg[0].uintVal){
+ case ITCOMDisabledReasonOther:
+ DEBUGOUT("iTune_Evt:\tCOMCallsDisabled = ","ReasonOther");
+ break;
+ case ITCOMDisabledReasonDialog:
+ DEBUGOUT("iTune_Evt:\tCOMCallsDisabled = ","ReasonDialog");
+ break;
+ case ITCOMDisabledReasonQuitting:
+ DEBUGOUT("iTune_Evt:\tCOMCallsDisabled = ","ReasonQuitting");
+ break;
+ }
+ if(m_comAppEventSink)
+ m_comAppEventSink->m_vbServerState = VARIANT_FALSE;
+ } break;
+ case ITEventCOMCallsEnabled: //= 7,
+ {/* Parameters:()
+ The ITEventCOMCallsEnabled event is fired when calls to the
+ iTunes COM interface will no longer be deferred. Typically, iTunes will defer
+ COM calls when any modal dialog is being displayed. When the user dismisses
+ the last modal dialog, COM calls will be enabled again,
+ and any deferred COM calls will be executed. */
+ DEBUGOUT("iTune_Evt:\tCOMCallsEnabled","");
+ if(m_comAppEventSink)
+ m_comAppEventSink->m_vbServerState = VARIANT_TRUE;
+ } break;
+ case ITEventQuitting: //= 8,
+ {/* Parameters:()
+ The ITEventQuitting event is fired when iTunes is about to quit.
+ If the user attempts to quit iTunes while a client still has outstanding
+ iTunes COM objects instantiated, iTunes will display a warning dialog.
+ The user can still choose to quit iTunes anyway, in which case this event will be fired.
+ After this event is fired, any existing iTunes COM objects will no longer be valid.
+ This event is only used to notify clients that iTunes is quitting,
+ clients cannot prevent this from happening.*/
+ DEBUGOUT("iTune_Evt:\tQuitting","");
+ m_state = PL_OFFLINE;
+ m_vbServerState = VARIANT_FALSE;
+ COM_ReleaseServer();
+ } break;
+ case ITEventAboutToPromptUserToQuit: //= 9,
+ {/* Parameters:()
+ The ITEventAboutToPromptUserToQuit event is fired when iTunes is about prompt the user to quit.
+ This event gives clients the opportunity to prevent the warning dialog prompt from occurring.
+ If the user attempts to quit iTunes while a client still has outstanding iTunes COM objects
+ instantiated, iTunes will display a warning dialog.
+ This event is fired just before the warning dialog is shown. iTunes will then wait up to 5 seconds
+ for clients to release any outstanding iTunes COM objects.
+ If all objects are released during this time, the warning dialog will not be shown and iTunes
+ will quit immediately. Otherwise, the warning dialog will be shown. If the user chooses to quit
+ iTunes anyway, the ITEventQuitting event is fired.
+ See iTunesEventsInterface.onQuittingEvent() for more details. */
+ DEBUGOUT("iTune_Evt:\tAboutToPromptUserToQuit","");
+ } break;
+ case ITEventSoundVolumeChanged: //= 10
+ {/* Parameters:(int newVolume)
+ newVolume - The new sound output volume (0 = minimum, 100 = maximum).
+ The ITEventSoundVolumeChanged event is fired when the sound output volume has changed.*/
+ #ifdef DEBUG
+ char temp[5];
+ _i64toa(pDispParams->rgvarg[0].intVal,temp,10);
+ DEBUGOUT("iTune_Evt:\tSoundVolumeChanged = ",temp);
+ #endif
+ } break;
+
+ case 0x00009999:
+ {//RPCoff() - this is not a interface member (it is only a event from sink object if count m_cRef == 1);
+ DEBUGOUT("iTune_Evt:\t","ServerDisconect");
+ //m_state = PL_OFFLINE;
+ } break;
+ }
+ } //end if (pEventHandler==m_comPlaybackEventSink)
+
+ return( hr );
+}
- if (!FillCache())
- FreeData();
+BOOL
+ITunes::COM_IsPause()
+{
+ BOOL res = -1;
+ VARIANT_BOOL previousEnabled = VARIANT_FALSE;
+ VARIANT_BOOL nextEnabled = VARIANT_FALSE;
+ ITPlayButtonState playPauseStopState = ITPlayButtonStatePlayDisabled;
+ if(SUCCEEDED(m_comApp->GetPlayerButtonsState(&previousEnabled, &playPauseStopState, &nextEnabled)))
+ {//TODO: check if switch is realy needet
+ res = FALSE;
+ switch(playPauseStopState){
+ case ITPlayButtonStatePlayDisabled:
+ /*m_state = PL_?*/; break;
+ case ITPlayButtonStatePlayEnabled:
+ /*m_state = PL_?*/; break;
+ case ITPlayButtonStatePauseEnabled:
+ res = TRUE; break;
+ case ITPlayButtonStatePauseDisabled:
+ /*m_state = PL_?*/; break;
+ case ITPlayButtonStateStopEnabled:
+ /*m_state = PL_?*/; break;
+ case ITPlayButtonStateStopDisabled:
+ /*m_state = PL_?*/; break;
+ }
}
+ return res;
+}
- FreeTempData();
-
- return Player::GetListeningInfo(lti);
+BOOL
+ITunes::GetListeningInfo(LISTENINGTOINFO *lti)
+{
+ FreeData();
+ if(m_needPoll && FindWindow() == NULL)
+ return FALSE;
+ return COM_infoCache() ? Player::GetListeningInfo(lti) : FALSE;
}
diff --git a/Plugins/listeningto/players/itunes.h b/Plugins/listeningto/players/itunes.h index bce9318..df7c99b 100644 --- a/Plugins/listeningto/players/itunes.h +++ b/Plugins/listeningto/players/itunes.h @@ -1,48 +1,104 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
+#pragma once
+
extern "C"
{
-#include "iTunesCOMInterface.h"
+#include ".\iTunes\iTunesCOMInterface.h"
}
+#include "TEventHandler.h"
+using namespace TEventHandlerNamespace;
+
+// ***** Make a forward declaration so that our TEventHandler template class can use it. *****
+class ITunes;
+
+// ***** Declare an event handling class using the TEventHandler template. *****
+typedef TEventHandler<ITunes, IiTunes, _IiTunesEvents> IMIM_iTunesEventH;
class ITunes : public Player
{
protected:
- WCHAR filename[1024];
+ HWND FindWindow(); //find Player Window
+ virtual void EnableDisable();
+
+ //com object
+ /* ***** Declare an instance of a COMApplication smart pointer. ***** */
+ IiTunes *m_comApp;
+ /* ***** Declare an instance of a IITTrack smart pointer. ***** */
+ IITTrack *m_comTrack;
+
+ /* ***** Declare a pointer to a TEventHandler class which is specially tailored
+ / ***** to receiving events from the _IiTunesEvents events of an
+ / ***** IiTunes object (It is designed to be a sink object) *****/
+ IMIM_iTunesEventH* m_comAppEventSink;
+
+ WCHAR m_filename[1024];
+ VARIANT_BOOL m_vbServerState; //hold the server state VARIANT_TRUE == server is running
+ BSTR m_comRet; //global BSTR for free use
+ BOOL COM_Start();
+ BOOL COM_Stop();
+ BOOL COM_ConnectServer(); //start the COM instance
+ void COM_ReleaseServer(); //stop the COM instance, disconect and free all
+ BOOL COM_infoCache(); //get the listeningTo info
+ BOOL COM_IsPause();
- HWND hwnd;
- IiTunes *iTunesApp;
- IITTrack *track;
- IITFileOrCDTrack *file;
- BSTR ret;
+ /* ***** common function that handle events fired from the COM object. *****/
+ HRESULT COM_OnEventInvoke
+ (
+ void* pEventHandler, //client sync Interface (m_comAppEventSink)
+ DISPID dispIdMember, //server event Interface member
+ REFIID riid, //always NULL (see MSDN)
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS FAR* pDispParams,
+ VARIANT FAR* pVarResult,
+ EXCEPINFO FAR* pExcepInfo,
+ UINT FAR* puArgErr
+ );
- void FindWindow();
- BOOL InitTempData();
- void FreeTempData();
- BOOL InitAndGetFilename();
- int GetMetadata(char *metadata, TCHAR **data);
- BOOL FillCache();
+ virtual ~ITunes();
public:
- ITunes();
+ ITunes(int index);
+ BYTE GetStatus();
virtual BOOL GetListeningInfo(LISTENINGTOINFO *lti);
};
diff --git a/Plugins/listeningto/players/mRadio.cpp b/Plugins/listeningto/players/mRadio.cpp new file mode 100644 index 0000000..16274a2 --- /dev/null +++ b/Plugins/listeningto/players/mRadio.cpp @@ -0,0 +1,488 @@ +/*
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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 "..\commons.h"
+
+/////////////////////////////////////////////////////////////////////////////
+// main
+
+mRadio::mRadio(int index)
+: Player(index)
+{
+ m_proto = "mRadio";
+ m_name = _T("mRadio");
+ m_version = 0;
+
+ m_hContact = INVALID_HANDLE_VALUE;
+ m_ptszURL = NULL;
+ m_state = PL_OFFLINE;
+
+ m_hRadioStatus = 0;
+ m_hProtoAck = 0; //only for mradio + 0.0.1.x
+ m_hDbSettingChanged = 0; //only for mradio + 0.0.1.x
+}
+
+mRadio::~mRadio()
+{
+ COM_Stop();
+ FreeData();
+}
+
+void
+mRadio::EnableDisable()
+{
+ static BOOL old = FALSE;
+ if(m_enabled == old) {
+ return;
+ }
+ else if(m_enabled){
+ COM_Start();
+ }
+ else {
+ COM_Stop();
+ }
+ old = m_enabled;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// PLUGIN ...mRadio
+
+BOOL
+mRadio::COM_Start()
+{
+ m_version = (DWORD)DBGetContactSettingDword(0, m_proto, "version", 0);
+ if(m_version >= 0x00000201) {
+ //check if radio station is online
+ m_ptszURL = DBGetStringT(NULL, m_proto, "ActiveURL");
+ if(m_ptszURL) {
+ m_hContact = FindContact(m_ptszURL);
+ m_state = PL_PLAYING;
+ SetActivePlayer(m_index, m_index);
+ NotifyInfoChanged();
+ }
+ //hook ME_RADIO_STATUS
+ int (__cdecl mRadio::*hookProc)(WPARAM, LPARAM);
+ hookProc = &mRadio::EVT_RadioStatus;
+ m_hRadioStatus = HookEventObj(ME_RADIO_STATUS, (MIRANDAHOOKOBJ)*(void **)&hookProc, this);
+ return TRUE;
+ }
+ else
+ if(m_version) { //only for mradio + 0.0.1.x
+ //hook ME_PROTO_ACK
+ //ACKTYPE_STATUS - ID_STATUS_ONLINE : hook ME_RADIO_STATUS
+ //ACKTYPE_STATUS - ID_STATUS_OFFLINE: UnhookRadioStatus
+ int (__cdecl mRadio::*hookProc)(WPARAM, LPARAM);
+ hookProc = &mRadio::EVT_ProtoAck;
+ m_hProtoAck = HookEventObj(ME_PROTO_ACK, (MIRANDAHOOKOBJ)*(void **)&hookProc, this);
+
+ //check if radio proto is online and simulate a ME_PROTO_ACK event
+ if(ID_STATUS_ONLINE == CallProtoService(m_proto, PS_GETSTATUS, NULL, NULL)) {
+ ACKDATA ack = {0};
+ ack.cbSize = sizeof(ack);
+ ack.type = ACKTYPE_STATUS;
+ ack.result = ACKRESULT_SUCCESS;
+ ack.szModule = m_proto;
+ ack.lParam = ID_STATUS_ONLINE;
+ EVT_ProtoAck(NULL, (LPARAM)&ack);
+ }
+ //check if radio station is online and simulate a ME_RADIO_STATUS event
+ if(MRC_PLAY == CallService(MS_RADIO_COMMAND, (WPARAM)MRC_STATUS, (LPARAM)RD_STATUS_GET)) {
+ DEBUGOUT("mRadio_Start:\tStatus = ","MRC_PLAY");
+ EVT_RadioStatus_1x(MRC_PLAY, NULL);
+ }
+ return TRUE;
+ }
+ return FALSE;
+}
+
+BOOL
+mRadio::COM_Stop()
+{
+ EVT_Unhook(&m_hRadioStatus);
+ if(m_version < 0x00000201) {
+ EVT_Unhook(&m_hProtoAck);
+ COM_ReleaseServer();
+ return TRUE;
+ }
+ m_version = 0;
+ m_hContact = INVALID_HANDLE_VALUE;
+ m_state = PL_OFFLINE;
+ MIR_FREE(m_ptszURL);
+ return TRUE;
+}
+
+int __cdecl
+mRadio::EVT_RadioStatus(WPARAM wParam, LPARAM lParam)
+{
+ switch((int)wParam) {
+ case RD_STATUS_NEWTAG: //111 tag data changed
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_NEWTAG");
+ if(m_ptszURL) NotifyInfoChanged();
+ return 0;
+ case RD_STATUS_NOSTATION: //000 no active station found
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_NOSTATION");
+ m_state = PL_OFFLINE;
+ m_hContact = INVALID_HANDLE_VALUE;
+ MIR_FREE(m_ptszURL);
+ if(loaded) NotifyInfoChanged();
+ return 0;
+ case RD_STATUS_NEWSTATION: //112, lParam: contact handle
+ m_hContact = (HANDLE)lParam;
+ if(PtrIsValid(m_hContact)) {
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_NEWSTATION (on)");
+ }
+ else {
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_NEWSTATION (off)");
+ }
+ return 0;
+ case RD_STATUS_NEWTRACK: //110, LParam - url
+ //at this point RD_STATUS_PLAYING is true (RD_STATUS_PLAYING is nevere send)
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_NEWTRACK");
+ MIR_FREE(m_ptszURL);
+ if(lParam) {
+ m_ptszURL = mir_u2t((LPWSTR)lParam);
+ m_state = PL_PLAYING;
+ SetActivePlayer(m_index, m_index);
+ NotifyInfoChanged();
+ }
+ return 0;
+ case RD_STATUS_PLAYING: //001 media is playing
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_PLAYING");
+ m_state = PL_PLAYING;
+ break;
+ case RD_STATUS_PAUSED: //002, lParam: 1 - pause, 0 - continued
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ", lParam ? "MRC_PAUSE (pause)" : "MRC_PAUSE (play)");
+ m_state = lParam ? PL_PAUSED : PL_PLAYING;
+ break;
+ case RD_STATUS_STOPPED: //003 media is stopped (only for playlists)
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_STOPPED");
+ m_state = PL_STOPPED;
+ break;
+ case RD_STATUS_CONNECT: //004 plugin try to connect to the station
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_CONNECT");
+ m_state = PL_STOPPED;
+ return 0;
+ case RD_STATUS_ABORT: //005 plugin want to abort while try to connect
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_ABORT");
+ m_state = PL_OFFLINE;
+ return 0;
+ case RD_STATUS_POSITION: //107 position was changed
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_POSITION");
+ break;
+ case RD_STATUS_MUTED: //108 Mute/Unmute command was sent
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","RD_STATUS_MUTED");
+ return 0;
+ case RD_STATUS_RECORD: //109 "Record" action called
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ", lParam ? "RD_STATUS_RECORD (on)" : "RD_STATUS_RECORD (off)");
+ return 0;
+ #ifdef DEBUG
+ case MRC_RECORD: //, LParam - 0 (stop) / 1 (record)
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ", lParam ? "MRC_RECORD (on)" : "MRC_RECORD (off)");
+ return 0;
+ default:
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","??");
+ DebugBreak(); //shoud not happen
+ return 0;
+ #endif
+ } //end switch
+ NotifyInfoChanged();
+ return 0;
+}
+
+HANDLE /* based on pl_mradio.pas function Fill*/
+mRadio::FindContact(LPTSTR ptszURL)
+{
+ //walk through all the contacts stored in the DB
+ HANDLE hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDFIRST, 0, 0);
+ while (hContact != NULL) {
+ if(ptszURL) {
+ LPTSTR ptszDB = DBGetStringT(hContact,m_proto, "StationURL");
+ if(ptszDB) {
+ if(!_tcsicmp(ptszDB,ptszURL)) {
+ mir_free(ptszDB);
+ return hContact;
+ }
+ mir_free(ptszDB);
+ }
+ }
+ else
+ if(ID_STATUS_ONLINE == DBGetContactSettingWord(hContact,m_proto,"Status",WORD(WAT_RES_NOTFOUND))) {
+ return hContact;
+ }
+ hContact = (HANDLE)CallService(MS_DB_CONTACT_FINDNEXT, (WPARAM) hContact, 0);
+ }
+ return INVALID_HANDLE_VALUE;
+}
+
+BOOL
+mRadio::GetListeningInfo(LISTENINGTOINFO *lti)
+{
+ FreeData();
+ return COM_infoCache() ? Player::GetListeningInfo(lti) : FALSE;
+}
+
+BOOL
+mRadio::COM_infoCache()
+{
+ if( (m_state <= PL_STOPPED) ||
+ (m_hContact == INVALID_HANDLE_VALUE) ||
+ (!m_hContact) )
+ return FALSE;
+
+ m_listening_info.cbSize = sizeof(m_listening_info);
+ m_listening_info.ptszPlayer = mir_tstrdup(m_name);
+ m_listening_info.ptszType = mir_tstrdup(_T("Radio"));
+ m_listening_info.dwFlags = LTI_TCHAR;
+
+ // Copy new data
+ // m_listening_info.ptszAlbum = not supportet
+ // m_listening_info.ptszLength = not supportet (Length of the track, formatted as [HH:]MM:SS.)
+ // m_listening_info.ptszTrack = not supportet
+ // m_listening_info.ptszYear, = not supportet
+ // m_listening_info.???? = DBGetStringT(NULL, m_proto, "ActiveCodec");
+
+ if(!(m_listening_info.ptszArtist = DBGetStringT(NULL, m_proto, "Artist"))) {
+ m_listening_info.ptszArtist = DBGetStringT(m_hContact, "CList", "MyHandle");
+ //strUnknown
+ }
+
+ if(!(m_listening_info.ptszTitle = DBGetStringT(NULL, m_proto, "Title"))) {
+ if(!(m_listening_info.ptszTitle = DBGetStringT(m_hContact, "CList", "StatusMsg"))) {
+ m_listening_info.ptszTitle = DBGetStringT(NULL, m_proto, "ActiveURL");
+ }
+ }
+
+ //check if Title == Artist
+ if( m_listening_info.ptszArtist &&
+ m_listening_info.ptszTitle &&
+ !_tcscmp(m_listening_info.ptszArtist, m_listening_info.ptszTitle))
+ {
+ MIR_FREE(m_listening_info.ptszArtist);
+ m_listening_info.ptszArtist = DBGetStringT(m_hContact, "CList", "MyHandle");
+ }
+
+ if(!(m_listening_info.ptszGenre = DBGetStringT(NULL, m_proto, "Genre"))) {
+ m_listening_info.ptszGenre = DBGetStringT(m_hContact, m_proto, "Genre");
+ }
+
+ return TRUE;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// only for mradio + 0.0.1.x (never need for + 0.0.2.x)
+
+BOOL /* only for mradio + 0.0.1.x - based on pl_mradio.pas function InitmRadio*/
+mRadio::COM_ConnectServer()
+{
+ if(m_version >= 0x00000201) {
+ m_state = PL_PLAYING;
+ SetActivePlayer(m_index, m_index);
+ NotifyInfoChanged();
+ DEBUGOUT("mRadio_Player:\tServer = ","on");
+ return TRUE;
+ }
+
+ //first check Status
+ if( PtrIsValid(m_hContact) &&
+ (ID_STATUS_ONLINE == (WORD)DBGetContactSettingWord(m_hContact, m_proto, "Status", ID_STATUS_OFFLINE)))
+ {
+ DEBUGOUT("mRadio_Player:\tServer = ","station is online");
+ m_state = PL_PLAYING;
+ SetActivePlayer(m_index, m_index);
+ NotifyInfoChanged();
+ }
+ //hook ME_DB_CONTACT_SETTINGCHANGED
+ if(!m_hDbSettingChanged) {
+ int (__cdecl mRadio::*hookProc)(WPARAM, LPARAM);
+ hookProc = &mRadio::EVT_DbSettingChanged;
+ m_hDbSettingChanged = HookEventObj(ME_DB_CONTACT_SETTINGCHANGED, (MIRANDAHOOKOBJ)*(void **)&hookProc, this);
+ }
+ DEBUGOUT("mRadio_Player:\tServer = ","on");
+
+ return TRUE;
+}
+
+void /* only for mradio + 0.0.1.x - based on pl_mradio.pas function ClearmRadio*/
+mRadio::COM_ReleaseServer()
+{
+ EVT_Unhook(&m_hDbSettingChanged);
+ DEBUGOUT("mRadio_Player:\tServer = ","off");
+ m_hContact = INVALID_HANDLE_VALUE;
+ MIR_FREE(m_ptszURL);
+
+ m_state = PL_OFFLINE;
+ m_version = 0;
+ if(loaded)
+ NotifyInfoChanged();
+}
+
+int __cdecl /* only for mradio + 0.0.1.x*/
+mRadio::EVT_RadioStatus_1x(WPARAM wParam, LPARAM lParam)
+{
+ switch((int)wParam) {
+ case MRC_STOP: //, LParam - 0
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","MRC_STOP");
+ //mradio + 0.0.1.8
+ if(m_state == PL_PLAYING) {
+ COM_ReleaseServer();
+ return 0;
+ }
+ if(PtrIsValid(m_hContact)) {
+ m_state = PL_STOPPED;
+ NotifyInfoChanged();
+ }
+ //mradio <= 0.0.1.7 fire ME_RADIO_STATUS - MRC_STOP too late
+ else
+ if(m_hDbSettingChanged){
+ COM_ReleaseServer();
+ }
+ break;
+ case MRC_PLAY: //, LParam - url 0.0.1.x
+ MIR_FREE(m_ptszURL);
+ //mradio <= 0.0.1.7
+ //...fire ME_RADIO_STATUS - MRC_PLAY too early
+ //...have no way to get m_hContact (active station)
+ if(lParam) {
+ m_ptszURL = mir_u2t((LPWSTR)lParam);
+ m_hContact = FindContact(m_ptszURL);
+ }
+ else {
+ m_hContact = FindContact();
+ }
+
+ //RadioStatus 0.0.1.x is buggy we need to check the contact status
+ if(PtrIsValid(m_hContact)) {
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","MRC_PLAY");
+ COM_ConnectServer();
+ }
+ else {
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","MRC_PLAY (PL_OFFLINE)");
+ COM_ReleaseServer();
+ }
+ break;
+ case MRC_PAUSE: //, LParam - 0 (pause) / 1 (play)
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ", lParam ? "MRC_PAUSE (play)" : "MRC_PAUSE (pause)");
+ m_state = lParam ? PL_PLAYING : PL_PAUSED;
+ NotifyInfoChanged();
+ break;
+ case MRC_SEEK: //, LParam - lParam is value in sec
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ","MRC_SEEK");
+ break;
+ case MRC_RECORD: //, LParam - 0 (stop) / 1 (record)
+ DEBUGOUT("mRadio_Evt:\tRadioStatus = ", lParam ? "MRC_RECORD (on)" : "MRC_RECORD (off)");
+ break;
+ }
+ return 0;
+}
+
+int __cdecl /* only for mradio + 0.0.1.x - based on pl_mradio.pas function SettingsChanged*/
+mRadio::EVT_ProtoAck(WPARAM wParam,LPARAM lParam)
+{
+ ACKDATA *ack = ( ACKDATA* )lParam;
+ if(ack->type != ACKTYPE_STATUS)
+ return 0;
+ if(ack->result != ACKRESULT_SUCCESS)
+ return 0;
+ if(strcmp(ack->szModule, m_proto))
+ return 0;
+#ifdef DEBUG
+ if(wParam) DebugBreak(); //shoud not happen
+ //int dummy = (int)ack->lParam;
+#endif
+ switch( (int)ack->lParam ) {
+ case ID_STATUS_ONLINE:
+ DEBUGOUT("mRadio_Evt:\tProtoAck = ","ID_STATUS_ONLINE");
+ if(!m_hRadioStatus) {
+ //hook ME_RADIO_STATUS
+ int (__cdecl mRadio::*hookProc)(WPARAM, LPARAM);
+ hookProc = &mRadio::EVT_RadioStatus_1x;
+ m_hRadioStatus = HookEventObj(ME_RADIO_STATUS, (MIRANDAHOOKOBJ)*(void **)&hookProc, this);
+ }
+ break;
+ case ID_STATUS_OFFLINE:
+ DEBUGOUT("mRadio_Evt:\tProtoAck = ","ID_STATUS_OFFLINE");
+ EVT_Unhook(&m_hDbSettingChanged);
+ EVT_Unhook(&m_hRadioStatus);
+ break;
+ }
+ return 0;
+}
+
+int __cdecl /* only for mradio + 0.0.1.x - based on pl_mradio.pas function SettingsChanged*/
+mRadio::EVT_DbSettingChanged(WPARAM wParam,LPARAM lParam)
+{
+ //return as fast as posibil
+ DBCONTACTWRITESETTING* cws = (DBCONTACTWRITESETTING*)lParam;
+ if(!strcmp(cws->szModule,m_proto)) {
+ //ugly process for Status change coz mradio <= 0.0.1.7 fire
+ //ME_RADIO_STATUS - MRC_PLAY too early
+ //ME_RADIO_STATUS - MRC_STOP too late
+ if( cws->value.type == DBVT_WORD &&
+ !strcmp(cws->szSetting, "Status"))
+ {
+ if(cws->value.wVal != ID_STATUS_ONLINE && m_hContact == (HANDLE)wParam) {
+ DEBUGOUT("mRadio_Evt:\tDbSettingChanged = ","ID_STATUS_OFFLINE");
+ m_hContact = INVALID_HANDLE_VALUE;
+ m_state = PL_STOPPED; //COM_ReleaseServer set PL_OFFLINE later)
+ }
+ else
+ if(cws->value.wVal == ID_STATUS_ONLINE) {
+ DEBUGOUT("mRadio_Evt:\tDbSettingChanged = ","ID_STATUS_ONLINE");
+ m_hContact = (HANDLE)wParam;
+ m_state = PL_PLAYING;
+ SetActivePlayer(m_index, m_index);
+ NotifyInfoChanged();
+ }
+ }
+ else //songinfo change ?
+ if( !wParam &&
+ PtrIsValid(m_hContact) && (
+ !strcmp(cws->szSetting, "Artist") ||
+ !strcmp(cws->szSetting, "Title") ||
+ !strcmp(cws->szSetting, "Genre") ))
+ {
+ DEBUGOUT("mRadio_Evt:\tDbSettingChanged = ",cws->szSetting);
+ m_state = PL_PLAYING;
+ NotifyInfoChanged();
+ }
+ }
+ return 0;
+}
+
+
diff --git a/Plugins/listeningto/players/mRadio.h b/Plugins/listeningto/players/mRadio.h new file mode 100644 index 0000000..8241b81 --- /dev/null +++ b/Plugins/listeningto/players/mRadio.h @@ -0,0 +1,86 @@ +/*
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+*/
+
+#pragma once
+
+
+class mRadio : public Player
+{
+protected:
+ virtual void EnableDisable();
+
+ char* m_proto;
+ DWORD m_version;
+
+ LPTSTR m_ptszURL;
+ HANDLE m_hContact; //CurrentStation
+ HANDLE FindContact(LPTSTR ptszURL = NULL); //Fill
+
+ BOOL COM_Start();
+ BOOL COM_Stop();
+ BOOL COM_infoCache(); //get the listeningTo info
+
+ HANDLE m_hRadioStatus; //HookEventObj on ME_RADIO_STATUS
+ int __cdecl EVT_RadioStatus(WPARAM wParam, LPARAM lParam);
+
+ virtual ~mRadio();
+
+/////////////////////////////////////////////////////////////////////////////
+// only for mradio + 0.0.1.x (never need for + 0.0.2.x)
+
+ BOOL COM_ConnectServer(); //InitmRadio
+ void COM_ReleaseServer(); //ClearmRadio
+
+ int __cdecl EVT_RadioStatus_1x(WPARAM wParam, LPARAM lParam);
+
+ HANDLE m_hProtoAck; //HookEventObj on ME_PROTO_ACK
+ int __cdecl EVT_ProtoAck(WPARAM wParam,LPARAM lParam);
+
+ HANDLE m_hDbSettingChanged; //HookEventObj on ME_DB_CONTACT_SETTINGCHANGED
+ int __cdecl EVT_DbSettingChanged(WPARAM wParam, LPARAM lParam);
+
+/////////////////////////////////////////////////////////////////////////////
+
+public:
+ //common
+ mRadio (int index);
+
+ //Plugin ...
+ virtual BOOL GetListeningInfo(LISTENINGTOINFO *lti);
+};
diff --git a/Plugins/listeningto/players/mlt_winamp/GEN.H b/Plugins/listeningto/players/mlt_winamp/GEN.H deleted file mode 100644 index d22f220..0000000 --- a/Plugins/listeningto/players/mlt_winamp/GEN.H +++ /dev/null @@ -1,22 +0,0 @@ -#define GEN_INIT_SUCCESS 0
-
-
-typedef struct {
- int version;
- char *description;
- int (*init)();
- void (*config)();
- void (*quit)();
- HWND hwndParent;
- HINSTANCE hDllInstance;
-} winampGeneralPurposePlugin;
-
-#define GPPHDR_VER 0x10
-#ifdef __cplusplus
-extern "C" {
-#endif
-//extern winampGeneralPurposePlugin *gen_plugins[256];
-typedef winampGeneralPurposePlugin * (*winampGeneralPurposePluginGetter)();
-#ifdef __cplusplus
-}
-#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/mswlm.cpp b/Plugins/listeningto/players/mswlm.cpp new file mode 100644 index 0000000..a8d2787 --- /dev/null +++ b/Plugins/listeningto/players/mswlm.cpp @@ -0,0 +1,434 @@ +/*
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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 "..\commons.h"
+
+extern Player *players[NUM_PLAYERS];
+extern int activePlayer;
+
+/////////////////////////////////////////////////////////////////////////////
+// WLM Windows Live Messanger forward declaration
+
+#define WLM_WINDOWCLASS _T("MsnMsgrUIManager")
+
+static LRESULT CALLBACK WLM_ReceiverWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+static VOID CALLBACK WLM_SendTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
+
+static UINT_PTR hSendTimer = NULL;
+static WindowsLiveMessanger *singleton = NULL;
+
+typedef struct{
+ WCHAR* pID;
+ TCHAR* pClass;
+ BOOL* off;
+} wlmclass ;
+
+static wlmclass wlmcs[] = {
+ {L"WLM", _T("WMPlayerApp"), &players[WMP]->m_enabled}, //WMP latest
+ {L"WLM", _T("WMP Skin Host"), &players[WMP]->m_enabled}, //WMP latest (Skin Host window)
+ {L"WLM", _T("Media Player 2"), &players[WMP]->m_enabled}, //WMP old
+ {L"iTunes", _T("iTunes"), &players[ITUNES]->m_enabled}, //
+ {L"", NULL, NULL} //
+};
+
+static TCHAR *wcs[] = {
+ _T("WMPlayerApp"), //WMP latest
+ _T("WMP Skin Host"), //WMP latest (Skin Host window)
+ _T("Media Player 2") //WMP old
+};
+
+/////////////////////////////////////////////////////////////////////////////
+// common
+
+WindowsLiveMessanger::WindowsLiveMessanger(int index)
+: Player(index)
+{
+ m_name = _T("WindowsMediaPlayer");
+ m_window_classes = wcs;
+ m_window_classes_num = MAX_REGS(wcs);
+
+// m_comAppH = NULL;
+// m_comApp = NULL;
+// m_comAppEventSink = NULL;
+// m_comRet = NULL;
+// m_vbServerState = VARIANT_FALSE;
+ m_state = PL_OFFLINE;
+// m_pView = NULL;
+// _Module.Init(NULL, hInst, &LIBID_ATLLib);
+}
+
+WindowsLiveMessanger::~WindowsLiveMessanger()
+{
+ switch(m_enabled){
+ case 1: //WLM
+ WLM_Stop();
+ break;
+ }
+ FreeData();
+}
+
+void
+WindowsLiveMessanger::EnableDisable()
+{
+ static BOOL old = FALSE;
+ if(m_enabled == old) return;
+
+ switch(old){ //stop ...
+ case 0: break;
+ case 1: WLM_Stop(); break; //WLM
+ }
+ switch(m_enabled){ //start ...
+ case 0: {
+ if(loaded)
+ NotifyInfoChanged();
+ } break;
+ case 1: WLM_Start(); break; //WLM
+ }
+ old = m_enabled;
+}
+
+BOOL
+WindowsLiveMessanger::GetListeningInfo(LISTENINGTOINFO *lti)
+{
+ switch(m_enabled){
+ case 1: //COM
+// FreeData();
+// return COM_infoCache() ? Player::GetListeningInfo(lti) : FALSE;
+ case 2: //WLM
+ if(m_needPoll && FindWindow() == NULL)
+ return FALSE;
+ return Player::GetListeningInfo(lti);
+ }
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// WLM ...Windows Live Messanger
+
+BOOL
+WindowsLiveMessanger::WLM_Start()
+{
+ // Create windows class
+ WNDCLASS wc = {0};
+ wc.lpfnWndProc = WLM_ReceiverWndProc;
+ wc.hInstance = hInst;
+ wc.lpszClassName = WLM_WINDOWCLASS;
+
+ cWndclass = RegisterClass(&wc);
+ DWORD err = GetLastError();
+
+ if (!cWndclass) {
+ TCHAR msg[1024];
+ wsprintf(msg, TranslateT("Failed to register %s class."),wc.lpszClassName);
+ MessageBox(NULL, msg, _T(MODULE_NAME), MB_ICONSTOP|MB_OK);
+
+ singleton = NULL;
+ return FALSE;
+ }
+ // Create a window.
+ m_received[0] = L'\0';
+ m_last_received[0] = L'\0';
+ singleton = this;
+ ZeroMemory(&m_window_class, sizeof m_window_class);
+ m_hwndclass = CreateWindow(WLM_WINDOWCLASS, _T("Miranda ListeningTo WLM receiver"),
+ 0, 0, 0, 0, 0, NULL, NULL, hInst, NULL);
+
+ return m_hwndclass == NULL ? FALSE : TRUE;
+}
+
+BOOL
+WindowsLiveMessanger::WLM_Stop()
+{
+ KILLTIMER(hSendTimer);
+ m_state = PL_OFFLINE;
+ DestroyWindow(m_hwndclass);
+ m_hwndclass = NULL;
+ UnregisterClass (MAKEINTATOM(cWndclass),hInst);
+ cWndclass = 0;
+ singleton = NULL;
+
+ return TRUE;
+}
+
+HWND
+WindowsLiveMessanger::FindWindow()
+{
+ HWND hwnd = NULL;
+ for(int i = 0; i < m_window_classes_num; i++) {
+ hwnd = ::FindWindow(m_window_classes[i], NULL);
+ if (hwnd != NULL)
+ break;
+ }
+ if (hwnd != m_hwnd) {
+ m_hwnd = hwnd;
+ }
+ return m_hwnd;
+}
+
+BYTE
+WindowsLiveMessanger::GetStatus()
+{
+ if(FindWindow() == 0)
+ m_state = PL_OFFLINE;
+ return m_state;
+}
+
+void
+WindowsLiveMessanger::WLM_NewData(const WCHAR *data, size_t len)
+{
+ EnterCriticalSection(&cs);
+
+ OutputDebugStringW(L"WLM_mess:\t");
+ OutputDebugStringW(data);
+ OutputDebugStringW(L"\n");
+
+ len = min(len, 1023);
+ if (wcsncmp(m_received, data, len) != 0)
+ {
+ wcsncpy(m_received, data, len);
+ m_received[len] = L'\0';
+
+/*#ifdef UNICODE
+ m_log(_T("WLM_ReceiverWndProc"), _T("WMP : New data: [%d] %s"), len, received);
+#else
+ m_log(_T("WLM_ReceiverWndProc"), _T("WMP : New data: [%d] %S"), len, received);
+#endif
+*/
+ KILLTIMER(hSendTimer);
+ hSendTimer = SetTimer(NULL, NULL, 1000/*300*/, (TIMERPROC)WLM_SendTimerProc); // Do the processing after we return true
+ }
+/* else
+ {
+ m_log(_T("WLM_NewData"), _T("END: Text is the same as last time"));
+ }
+*/
+ LeaveCriticalSection(&cs);
+}
+
+
+void /*data received from LiveMessanger Status plugin*/
+WindowsLiveMessanger::WLM_ProcessReceived()
+{
+ EnterCriticalSection(&cs);
+ bool send = true;
+ FreeData();
+
+ /*/ Do the processing
+ /* MSNActivityString = L"<PlayerID>\\0<ActivityType>\\0<bool>%d\\0<message>%s\\0<title>%s\\0<artist>%s\\0<album>%s\\0<WMContentID>%s\\<NULL>0"
+ PlayerID: 'VLC' WindowsMediaPlayer send 'WMP'
+ ActivityType: 'Music' show music-icon and link to msn online shop
+ 'Games' show game-icon, no link
+ 'Office' show office-icon
+ 'Empty' show no icon
+ 'Video' not supportet by original WLM but other Messengers use it (show Video icon)
+ 'Radio' not supportet by original WLM but other Messengers use it (show Radio icon)
+ bool: 0 activity off - use private status message (always send 0 if player stop !!!)
+ 1 activity on - use activity message
+ message: activity message (use variable {.} or not ...
+ '{0}' <title>
+ '{1}' <artist>
+ '{2}' <album>
+ WMContentID: WindowsMedia-Content ID - GUID identifying the content (GUID for mp3, wav etc)
+ the WMContentID field doesn't appear to affect anything (though the iTunes code sends iTunes instead?
+ NULL: NULL termination
+
+ eg:
+ L"VLC\\0Music\\01\\0playing: {0} - {1} ({2})\\0Endless Quest\\0Enigma\\015 Years After\\0\\0"
+ show message: 'playing: Endless Quest - Enigma (15 Years After)' with icon-music
+
+ L"VLC\\0Radio\\01\\0playing: {0} - {1} ({2})\\0Endless Quest\\0Enigma\\http://www.rockantenne.de/webradio/rockantenne.wmx\\0\\0"
+ show message: 'listening Radio: Endless Quest - Enigma (http://www.rockantenne.de/webradio/rockantenne.wmx)' with icon-radio(if supportet)
+
+ L"VLC\\0Video\\01\\0watching: {0} - {1} ({2})\\0Rambo II\\0chapter 1\\0\\0\\0"
+ show message: 'watching: Rambo II - chapter 1' with icon-Video (if supportet)
+
+ L"VLC\0Music\00\0\0\0\0\0\0"
+ disable activity message and show status message from messanger
+ */
+
+ WCHAR *p1 = wcsstr(m_received, L"\\0");
+
+ if (m_received[0] == L'\0' || p1 == NULL)
+ {
+ LeaveCriticalSection(&cs);
+ NotifyInfoChanged();
+ return;
+ }
+
+ // Process string
+ WCHAR *parts[8] = {0};
+ int pCount = 0;
+ WCHAR *p = m_received;
+ do {
+ *p1 = L'\0';
+ parts[pCount] = p;
+ pCount ++;
+ p = p1 + 2;
+ p1 = wcsstr(p, L"\\0");
+ } while( p1 != NULL && pCount < 7 );
+ if (p1 != NULL)
+ *p1 = L'\0';
+ parts[pCount] = p;
+
+
+ //identify the player
+ HWND hwnd = NULL;
+ if(m_window_class[0] == NULL){
+ send = false;
+ m_hwnd = NULL;
+ for(int i = 0; i < SIZEOF(wlmcs); i++) {
+ if(_wcsicmp(parts[0], wlmcs[i].pID) == 0) {
+ if(wlmcs[i].off) { // wcsncmp
+ break;
+ }
+ else if (NULL == (hwnd = ::FindWindow(wlmcs[i].pClass, WcharToTchar(parts[4])))) {
+ continue;
+ }
+ send = true;
+ m_hwnd = hwnd;
+ _tcscpy(m_window_class ,wlmcs[i].pClass);
+ m_window_classes[0] = m_window_class;
+ m_window_classes_num = 1;
+ break;
+ }
+ }
+ }
+ //set player status
+ int status = IsEmpty(parts[2]) ? 0 : _wtoi(parts[2]);
+ switch(status){
+ case 0:
+ m_state = GetStatus() ? PL_STOPPED : PL_OFFLINE;
+ break;
+ case 1:
+ m_state = PL_PLAYING;
+ break;
+ }
+
+ // Fill cache
+ if (pCount > 4 && !IsEmpty(parts[1]) && (!IsEmpty(parts[4]) || !IsEmpty(parts[5])))
+ {
+ m_listening_info.cbSize = sizeof(m_listening_info);
+ m_listening_info.dwFlags = LTI_TCHAR;
+
+ m_listening_info.ptszType = U2T(parts[1]);
+ m_listening_info.ptszTitle = U2T(parts[4]);
+ m_listening_info.ptszArtist = U2T(parts[5]);
+ m_listening_info.ptszAlbum = U2T(parts[6]);
+
+ m_listening_info.ptszPlayer = mir_tstrdup(m_name);
+ }
+
+
+ // Put back the '\\'s
+ for(int i = 1; i <= pCount; i++)
+ *(parts[i] - 2) = L'\\';
+ if (p1 != NULL)
+ *p1 = L'\\';
+
+ LeaveCriticalSection(&cs);
+
+ NotifyInfoChanged();
+}
+
+VOID
+CALLBACK WLM_SendTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
+{
+ if (!loaded)
+ return;
+ KILLTIMER(hSendTimer);
+
+ if (singleton != NULL)
+ singleton->WLM_ProcessReceived();
+}
+
+
+
+LRESULT
+CALLBACK WLM_ReceiverWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
+{
+ switch (message)
+ {
+ case WM_COPYDATA :
+ {
+ if (!loaded)
+ return FALSE;
+
+ if( singleton == NULL ||
+ !singleton->m_enabled ||
+ (activePlayer!=singleton->m_index && activePlayer!=-1) )
+ return FALSE;
+
+ COPYDATASTRUCT* pData = (PCOPYDATASTRUCT) lParam;
+ if (pData->dwData != 0x547 || pData->cbData == 0 || pData->lpData == NULL)
+ return FALSE;
+
+ if(wcsncmp((WCHAR *)pData->lpData, L"WMP", 3) == 0 && players[WMP]->m_enabled)
+ return FALSE;
+
+
+// LPWSTR p = (WCHAR *) pData->lpData;
+// LPWSTR p1 = wcsstr(p, L"\\0");
+
+ if (singleton != NULL) {
+ if( wParam &&
+ GetClassName((HWND) wParam, singleton->m_window_class, SIZEOF(singleton->m_window_class)))
+ {
+ wParam, singleton->m_window_classes = (TCHAR **)&singleton->m_window_class;
+ singleton->m_window_classes_num = 1;
+ }
+ bool fBlocked = ( InSendMessageEx(NULL) & (ISMEX_REPLIED|ISMEX_SEND) ) == ISMEX_SEND;
+ if (fBlocked) {
+ ReplyMessage(TRUE);
+ }
+ singleton->WLM_NewData((WCHAR *) pData->lpData, pData->cbData / 2);
+ }
+
+ return TRUE;
+ }
+ case WM_DESTROY :
+ SetActivePlayer(singleton->m_index, -1);
+// PostQuitMessage(0);
+ break;
+ }
+
+ return DefWindowProc(hWnd, message, wParam, lParam);
+}
+
+
diff --git a/Plugins/listeningto/players/mswlm.h b/Plugins/listeningto/players/mswlm.h new file mode 100644 index 0000000..4e31b8b --- /dev/null +++ b/Plugins/listeningto/players/mswlm.h @@ -0,0 +1,76 @@ +/*
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+*/
+
+#pragma once
+
+class WindowsLiveMessanger : public Player
+{
+protected: //only WLM
+ WCHAR m_received[1024];
+ WCHAR m_last_received[1024];
+
+ HWND FindWindow(); //find Player Window
+
+ BOOL WLM_Start(); //start
+ BOOL WLM_Stop(); //stop
+
+protected:
+ ATOM cWndclass;
+ HWND m_hwndclass;
+
+ void EnableDisable();
+
+ virtual ~WindowsLiveMessanger();
+
+public:
+ //common
+ TCHAR **m_window_classes;
+ int m_window_classes_num;
+ TCHAR m_window_class[128];
+ WindowsLiveMessanger(int index);
+
+ //COM ...Remoting the Windows Media Player Control
+ BOOL GetListeningInfo(LISTENINGTOINFO *lti);
+
+ //WLM ...Windows Live Messanger
+ BYTE GetStatus();
+ void WLM_ProcessReceived();
+ void WLM_NewData(const WCHAR *data, size_t len);
+
+};
diff --git a/Plugins/listeningto/players/mswmp.cpp b/Plugins/listeningto/players/mswmp.cpp new file mode 100644 index 0000000..82ce68d --- /dev/null +++ b/Plugins/listeningto/players/mswmp.cpp @@ -0,0 +1,985 @@ +/*
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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 "..\commons.h"
+
+extern "C"
+{
+#include ".\wmp\wmp.h"
+#include ".\wmp\wmpids.h"
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// WLM Windows Live Messanger forward declaration
+
+/*
+#define WMP_WINDOWCLASS _T("MsnMsgrUIManager")
+
+static LRESULT CALLBACK WLM_ReceiverWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+static VOID CALLBACK WLM_SendTimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
+
+static UINT_PTR hSendTimer = NULL;
+static WindowsMediaPlayer *singleton = NULL;
+*/
+static TCHAR *wcs[] = {
+ _T("WMPlayerApp"), //WMP latest
+ _T("WMP Skin Host"), //WMP latest (Skin Host window)
+ _T("Media Player 2") //WMP old
+};
+
+//static LRESULT CALLBACK WMP_OCXreceiverWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
+//static WindowsMediaPlayer *singleton = NULL;
+
+/////////////////////////////////////////////////////////////////////////////
+// common
+
+WindowsMediaPlayer::WindowsMediaPlayer(int index)
+: Player(index)
+{
+ m_name = _T("WindowsMediaPlayer");
+// m_window_classes = wcs;
+// m_window_classes_num = MAX_REGS(wcs);
+
+ m_comAppH = NULL;
+ m_comApp = NULL;
+ m_comAppEventSink = NULL;
+ m_comRet = NULL;
+// m_vbServerState = VARIANT_FALSE;
+ m_state = PL_OFFLINE;
+ m_pView = NULL;
+ m_bFullPlayer = FALSE;
+// _Module.Init(NULL, hInst, &LIBID_ATLLib);
+}
+
+WindowsMediaPlayer::~WindowsMediaPlayer()
+{
+ switch(m_enabled){
+ case 1: //COM
+ COM_Stop();
+ // _Module.Term();
+ break;
+/* case 2: //WLM
+ WLM_Stop();
+ break; */
+ }
+ FreeData();
+}
+
+void
+WindowsMediaPlayer::EnableDisable()
+{
+ static BOOL old = FALSE;
+ if(m_enabled == old) return;
+
+ switch(old){ //stop ...
+ case 0: break;
+ case 1: COM_Stop(); break; //COM
+// case 2: WLM_Stop(); break; //WLM
+ }
+ switch(m_enabled){ //start ...
+ case 0: {
+ if(loaded)
+ NotifyInfoChanged();
+ } break;
+ case 1: COM_Start(); break; //COM
+// case 2: WLM_Start(); break; //WLM
+ }
+ old = m_enabled;
+}
+
+BOOL
+WindowsMediaPlayer::CreateWnd()
+{
+ // Create windows class
+ WNDCLASS wc = {0};
+ wc.lpfnWndProc = DefWindowProc /*WMP_OCXreceiverWndProc TestWndProc*/;
+ wc.hInstance = hInst;
+ wc.lpszClassName = _T("MIMlisteningToWMP");
+
+ cWndclass = RegisterClass(&wc);
+ DWORD err = GetLastError();
+
+ if (!cWndclass) {
+ TCHAR msg[1024];
+ wsprintf(msg, TranslateT("Failed to register %s class."),wc.lpszClassName);
+ MessageBox(NULL, msg, _T(MODULE_NAME), MB_ICONSTOP|MB_OK);
+
+// singleton = NULL;
+ return FALSE;
+ }
+
+ // Create a window.
+/* if (WLM) {
+ m_received[0] = L'\0';
+ m_last_received[0] = L'\0';
+ singleton = this;
+ m_hwndclass = CreateWindow(WMP_WINDOWCLASS, _T("Miranda ListeningTo WMP receiver"),
+ 0, 0, 0, 0, 0, NULL, NULL, hInst, NULL);
+ }
+ else { */
+ m_hwndclass = CreateWindow(_T("MIMlisteningToWMP"), _T("Miranda ListeningTo WMP OCX receiver"),
+ WS_OVERLAPPEDWINDOW | WS_DISABLED, CW_USEDEFAULT, CW_USEDEFAULT,
+ CW_USEDEFAULT, CW_USEDEFAULT, NULL/*HWND_MESSAGE*/, NULL, hInst, NULL);
+// singleton = m_hwndclass ? this : NULL;
+// }
+
+ return m_hwndclass == NULL ? FALSE : TRUE;
+}
+
+BOOL
+WindowsMediaPlayer::GetListeningInfo(LISTENINGTOINFO *lti)
+{
+ switch(m_enabled){
+ case 1: //COM
+ FreeData();
+ return COM_infoCache() ? Player::GetListeningInfo(lti) : FALSE;
+/* case 2: //WLM
+ if(m_needPoll && FindWindow() == NULL)
+ return FALSE;
+ return Player::GetListeningInfo(lti); */
+ }
+ return FALSE;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// COM ...Remoting the Windows Media Player Control
+
+BOOL
+WindowsMediaPlayer::COM_Start()
+{
+ m_pView = 0;
+ m_hwndclass = 0;
+ HRESULT hr = S_OK;
+
+ hr = _Module.Init(NULL, hInst, &LIBID_ATLLib);
+ if(FAILED(hr))
+ return FALSE;
+
+ if(!CreateWnd()) {
+ _Module.Term();
+ return FALSE;
+ }
+
+ IObjectWithSite *spHostObject = NULL;
+ IAxWinHostWindow *spHost = NULL;
+ CComObject<CRemoteHost> *pRemoteHost = NULL;
+
+ // Create an ActiveX control container
+ m_pView = new CAxWindow();
+ if(!m_pView) hr = E_OUTOFMEMORY;
+
+ if(SUCCEEDED(hr)){
+ m_pView->Create(m_hwndclass, NULL, NULL, WS_CHILD | WS_DISABLED);
+ if(::IsWindow(m_pView->m_hWnd)) {
+ hr = m_pView->QueryHost(__uuidof(spHostObject), (void **)&spHostObject);
+ if(!spHostObject) {
+ hr = E_POINTER;
+ }
+ }
+ }
+
+ // Create remote host which implements IServiceProvider and IWMPRemoteMediaServices
+ if(SUCCEEDED(hr)) {
+ hr = CComObject<CRemoteHost>::CreateInstance(&pRemoteHost);
+ if(pRemoteHost) {
+ pRemoteHost->AddRef();
+ }
+ else {
+ hr = E_POINTER;
+ }
+ }
+
+ // Set site to the remote host
+ if(SUCCEEDED(hr)) {
+ hr = spHostObject->SetSite((IWMPRemoteMediaServices *)pRemoteHost);
+ }
+ if(SUCCEEDED(hr)) {
+ hr = m_pView->QueryHost(__uuidof(spHost), (void **)&spHost);
+ if(!spHost) hr = E_NOINTERFACE;
+ }
+
+ // Create WMP Control here
+ if(SUCCEEDED(hr)) {
+ hr = spHost->CreateControl(CComBSTR(L"{6BF52A52-394A-11d3-B153-00C04F79FAA6}"), m_pView->m_hWnd, NULL);
+ }
+ // get a IWMPPlayer4 object
+ if(SUCCEEDED(hr)) {
+ hr = m_pView->QueryControl(&m_comAppH);
+ if(!m_comAppH) hr = E_NOINTERFACE;
+ }
+
+ // Release object
+ RELEASE(spHost, TRUE);
+ RELEASE(spHostObject, TRUE);
+ RELEASE(pRemoteHost, TRUE);
+
+ // get a IWMPPlayerApplication object
+ if(SUCCEEDED(hr)) {
+ hr = m_comAppH->get_playerApplication(&m_comApp);
+ }
+ // ***** Instantiate an IMIM_wmpEventH object. *****
+ if(SUCCEEDED(hr)) {
+ m_comAppEventSink = new IMIM_wmpEventH(*this, m_comAppH, &WindowsMediaPlayer::COM_OnEventInvoke);
+ if(!m_comAppEventSink) hr = E_OUTOFMEMORY;
+ }
+
+ //check if wmp is docked / play
+ if(SUCCEEDED(hr) && COM_IsPlayerDocked()) {
+ COM_ConnectServer();
+ }
+
+ return TRUE;
+}
+
+BOOL
+WindowsMediaPlayer::COM_Stop()
+{
+ // Stop listening to events
+ /* When the program is terminating, make sure that we instruct our */
+ /* Event Handler to disconnect from the connection point of the */
+ /* object which implemented the IEventFiringObject interface. */
+ /* We also needs to Release() it (instead of deleting it). */
+ if (m_comAppEventSink) {
+ m_comAppEventSink -> ShutdownConnectionPoint();
+ m_comAppEventSink -> Release();
+ m_comAppEventSink = NULL;
+ }
+
+ m_state = PL_OFFLINE;
+ DEBUGOUT("wmp_Player:\tServer = ","off");
+
+// if(m_state)
+// COM_ReleaseServer();
+
+ RELEASE(m_comApp, TRUE);
+ RELEASE(m_comAppH,TRUE);
+ if (m_pView)
+ m_pView->DestroyWindow();
+ delete m_pView;
+ BSTRFREE(m_comRet);
+
+ if(DestroyWindow(m_hwndclass))
+ m_hwndclass = NULL;
+ if(UnregisterClass (MAKEINTATOM(cWndclass),hInst))
+ cWndclass = 0;
+
+ _Module.Term();
+
+ return TRUE;
+}
+
+BOOL
+WindowsMediaPlayer::COM_ConnectServer()
+{
+ DEBUGOUT("wmp_Player:\tServer = ","on");
+ if(SetActivePlayer(m_index, m_index))
+ COM_PlayState(99); //this start timer depend on status
+
+ return TRUE;
+}
+
+void
+WindowsMediaPlayer::COM_ReleaseServer()
+{
+ DEBUGOUT("wmp_Player:\tServer = ","off");
+ m_state = PL_OFFLINE;
+ if(loaded)
+ NotifyInfoChanged();
+}
+
+BOOL
+WindowsMediaPlayer::COM_infoCache()
+{
+ if( (!m_comAppH) ||
+ (m_comAppEventSink && m_comAppEventSink->m_vbServerState == VARIANT_FALSE) ||
+ (m_state <= PL_STOPPED) ||
+ (m_state == PL_PAUSED) )
+ return FALSE;
+
+ HRESULT hr;
+ //get current media object
+ IWMPMedia *spMedia;
+ if(FAILED(m_comAppH->get_currentMedia(&spMedia)))
+ return FALSE;
+
+ struct info_t {
+ TCHAR* &ptszValue;
+ WCHAR* ptszFormat;
+ WCHAR* ptszAlias;
+ } static info[] = {
+ {m_listening_info.ptszAlbum, L"Album", L"WM/AlbumTitle"},
+ {m_listening_info.ptszArtist, L"Artist", L"AlbumArtist" }, //WM/AlbumArtist
+ {m_listening_info.ptszGenre, L"Genre", L"WM/Genre" },
+ {m_listening_info.ptszTitle, L"Name", L"Title" },
+ {m_listening_info.ptszTrack, L"WM/TrackNumber", L"WM/PartOfSet" },
+ {m_listening_info.ptszYear, L"WM/Year", NULL }
+ };
+
+ m_listening_info.cbSize = sizeof(m_listening_info);
+ m_listening_info.ptszPlayer = mir_tstrdup(m_name);
+ m_listening_info.dwFlags = LTI_TCHAR;
+
+ BSTR strResult = SysAllocString( L"");
+ BSTR strFormat = SysAllocString( L"MediaType");
+
+ hr = spMedia->getItemInfo(strFormat, &strResult);
+ switch (strResult[0]) {
+ case 'a':
+ case 'A':
+ m_listening_info.ptszType = mir_tstrdup(_T("Music"));
+ break;
+ case 'v':
+ case 'V':
+ m_listening_info.ptszType = mir_tstrdup(_T("Video"));
+ break;
+ case 'r':
+ case 'R':
+ m_listening_info.ptszType = mir_tstrdup(_T("Radio"));
+ break;
+ default:
+ m_listening_info.ptszType = mir_tstrdup(_T("Other"));
+ }
+
+ for(int i = 0; i < SIZEOF(info); i++) {
+ //try main (ptszFormat)
+ SysReAllocString(&strFormat,info[i].ptszFormat);
+ if(FAILED(hr = spMedia->getItemInfo(strFormat, &strResult)))
+ break;
+ if(SysStringLen(strResult)>0) {
+ info[i].ptszValue = mir_bstr2t(strResult);
+ continue;
+ }
+ //try alias (ptszAlias)
+ SysReAllocString(&strFormat,info[i].ptszAlias);
+ if(FAILED(hr = spMedia->getItemInfo(strFormat, &strResult)))
+ break;
+ info[i].ptszValue = mir_bstr2t(strResult);
+ }
+
+ if(SUCCEEDED(hr)) {
+ //Length of the track, formatted as [HH:]MM:SS.
+ if(SUCCEEDED(hr = spMedia->get_durationString(&strResult)))
+ m_listening_info.ptszLength = mir_bstr2t(strResult);
+ }
+
+ RELEASE(spMedia, TRUE)
+ BSTRFREE(strResult);
+ BSTRFREE(strFormat);
+ if(SUCCEEDED(hr)) {
+ return TRUE;
+ }
+ FreeData();
+ return FALSE;
+}
+
+BOOL
+WindowsMediaPlayer::COM_IsPlayerDocked()
+{
+ HRESULT hr = E_POINTER;
+ VARIANT_BOOL bstate = FALSE;
+
+ hr = m_comApp->get_playerDocked(&bstate);
+ if (SUCCEEDED(hr) && bstate == VARIANT_FALSE) {
+ m_bFullPlayer = TRUE;
+ DEBUGOUT("wmp_Player:\tDocked = ","on");
+ return TRUE; //Player is online (undocket = Full Player)
+ }
+ else //Player change from undocket to docked
+ if(m_comAppH /*&& m_bFullPlayer*/){
+// m_bFullPlayer = FALSE;
+ IWMPControls *spControls = NULL;
+ hr = m_comAppH->get_controls(&spControls);
+ //This method causes Windows Media Player to release any system resources it is using,
+ //such as the audio device. The current media file, however, is not released.
+ if(SUCCEEDED(hr) && spControls) spControls->stop();
+ //This method closes the current digital media file, not the Player itself.
+ hr = m_comAppH->close();
+ RELEASE(spControls, TRUE);
+ }
+ DEBUGOUT("wmp_Player:\tDocked = ","off");
+ m_bFullPlayer = FALSE;
+ return FALSE; //Player is offline or docked to a other Host
+}
+
+void
+WindowsMediaPlayer::COM_PlayState(long NewState)
+{
+ HRESULT hr = S_OK;
+ WMPPlayState pwmpps;
+ if(NewState > (long)wmppsLast)
+ hr = m_comAppH->get_playState(&pwmpps);
+ else
+ pwmpps = (WMPPlayState)NewState;
+
+ if(SUCCEEDED(hr)) {
+ switch(pwmpps){
+ case wmppsUndefined: /*= 0*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Undefined");
+ m_state = PL_STOPPED; //PL_OFFLINE;
+ NotifyInfoChanged();
+ break;
+ case wmppsStopped: /*= 1*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Stopped");
+ m_state = PL_STOPPED;
+ NotifyInfoChanged();
+ break;
+ case wmppsPaused: /*= 2*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Paused");
+ m_state = PL_PAUSED;
+ NotifyInfoChanged();
+ break;
+ case wmppsPlaying: /*= 3*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Playing");
+ m_state = PL_PLAYING;
+ NotifyInfoChanged();
+ break;
+ case wmppsScanForward: /*= 4*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","ScanForward");
+ m_state = PL_FORWARD;
+ NotifyInfoChanged();
+ break;
+ case wmppsScanReverse: /*= 5*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","ScanReverse");
+ m_state = PL_REWIND;
+ NotifyInfoChanged();
+ break;
+ case wmppsBuffering: /*= 6*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Buffering");
+ break;
+ case wmppsWaiting: /*= 7*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Waiting");
+ break;
+ case wmppsMediaEnded: /*= 8*/
+// do not use this event !!
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","MediaEnded");
+ break;
+ case wmppsTransitioning: /*= 9*/
+// do not use this event !!
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Transitioning");
+ break;
+ case wmppsReady: /*= 10*/
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Ready");
+ m_state = PL_STOPPED;
+ NotifyInfoChanged();
+ break;
+ case wmppsReconnecting: /*= 11*/
+// do not use this event !!
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Reconnecting");
+ break;
+ case wmppsLast: /*= 12*/
+// do not use this event !!
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","Last");
+ break;
+ default:
+ DEBUGOUT("wmp_Evt:\tPlayStateChange = ","#NV");
+ break;
+ }//end switch(pwmpps)
+ }
+}
+
+// ***** COM_OnEventInvoke() is inoked by the TEventHandler based class object *****
+// ***** when an event is fired from the COM object that implements .FiringObject. *****
+HRESULT
+WindowsMediaPlayer::COM_OnEventInvoke(
+ void* pEventHandler,
+ DISPID dispIdMember,
+ REFIID riid,
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS FAR* pDispParams,
+ VARIANT FAR* pVarResult,
+ EXCEPINFO FAR* pExcepInfo,
+ UINT FAR* puArgErr )
+{
+ if (!pDispParams)
+ return E_POINTER;
+
+ if (pDispParams->cNamedArgs != 0)
+ return DISP_E_NONAMEDARGS;
+
+ HRESULT hr = S_OK;
+ //TODO: check if all events work
+ if (pEventHandler==m_comAppEventSink) {
+ switch (dispIdMember) {
+ case DISPID_WMPCOREEVENT_PLAYSTATECHANGE:
+ {/* [id(0x000013ed), helpstring("Sent when the control changes PlayState")]
+ void PlayStateChange([in] long NewState); */
+ COM_PlayState(pDispParams->rgvarg[0].lVal);
+ } break;
+ case DISPID_WMPCOREEVENT_OPENSTATECHANGE:
+ {/* [id(0x00001389), helpstring("Sent when the control changes OpenState")]
+ void OpenStateChange([in] long NewState); */
+ #ifdef DEBUG
+ char* temp;
+ switch(pDispParams->rgvarg[0].lVal){
+ case wmposUndefined:
+ temp="Undefined"; break;
+ case wmposPlaylistChanging:
+ temp="PlaylistChanging"; break;
+ case wmposPlaylistLocating:
+ temp="PlaylistLocating"; break;
+ case wmposPlaylistConnecting:
+ temp="PlaylistConnecting"; break;
+ case wmposPlaylistLoading:
+ temp="PlaylistLoading"; break;
+ case wmposPlaylistOpening:
+ temp="PlaylistOpening"; break;
+ case wmposPlaylistOpenNoMedia:
+ temp="PlaylistOpenNoMedia"; break;
+ case wmposPlaylistChanged:
+ temp="PlaylistChanged"; break;
+
+ case wmposMediaChanging:
+ temp="MediaChanging"; break;
+ case wmposMediaLocating:
+ temp="MediaLocating"; break;
+ case wmposMediaConnecting:
+ temp="MediaConnecting"; break;
+ case wmposMediaLoading:
+ temp="MediaLoading"; break;
+ case wmposMediaOpening:
+ temp="MediaOpening"; break;
+ case wmposMediaOpen:
+ temp="MediaOpen"; break;
+
+ case wmposBeginCodecAcquisition:
+ temp="BeginCodecAcquisition"; break;
+ case wmposEndCodecAcquisition:
+ temp="EndCodecAcquisition"; break;
+ case wmposBeginLicenseAcquisition:
+ temp="BeginLicenseAcquisition"; break;
+ case wmposEndLicenseAcquisition:
+ temp="EndLicenseAcquisition"; break;
+ case wmposBeginIndividualization:
+ temp="BeginIndividualization"; break;
+ case wmposEndIndividualization:
+ temp="EndIndividualization"; break;
+ case wmposMediaWaiting:
+ temp="MediaWaiting"; break;
+ case wmposOpeningUnknownURL:
+ temp="OpeningUnknownURL"; break;
+ }//end switch(WMPOpenState)
+ DEBUGOUT("wmp_Evt:\tOpenStateChange = ", temp);
+ #endif
+ //ugly workaround for some wmp version on multimedia key press (if not docked)
+ //TODO: find better way to disable multimedia key press
+ //COM_IsPlayerDocked() stop play immediately
+ if(!m_bFullPlayer) COM_IsPlayerDocked();
+ } break;
+
+ // DIID_WMPOCXEvents (These are the events that will be fired from OCX itself)
+ case DISPID_WMPOCXEVENT_SWITCHEDTOPLAYERAPPLICATION:
+ {/* [id(0x00001965), helpstring("Sent when display switches to player application")]
+ void SwitchedToPlayerApplication(); */
+ DEBUGOUT("wmp_Evt:\tSwitchedToPlayerApplication","");
+ } break;
+ case DISPID_WMPOCXEVENT_SWITCHEDTOCONTROL:
+ {/* [id(0x00001966), helpstring("Sent when display switches to control")]
+ void SwitchedToControl(); */
+ DEBUGOUT("wmp_Evt:\tSwitchedToControl","");
+ } break;
+ case DISPID_WMPOCXEVENT_PLAYERDOCKEDSTATECHANGE:
+ {/* [id(0x00001967), helpstring("Sent when the player docks or undocks")]
+ void PlayerDockedStateChange(); */
+ DEBUGOUT("wmp_Evt:\tPlayerDockedStateChange","");
+ COM_IsPlayerDocked() ? COM_ConnectServer() : COM_ReleaseServer();
+ } break;
+ case DISPID_WMPOCXEVENT_PLAYERRECONNECT:
+ {/* [id(0x00001968), helpstring("Sent when the OCX reconnects to the player")]
+ void PlayerReconnect(); */
+ DEBUGOUT("wmp_Evt:\tPlayerReconnect","");
+ } break;
+
+ // DIID_WMPCoreEvents
+ //case DISPID_WMPCOREEVENT_STATUSCHANGE:
+ //{/* [id(0x0000138a), helpstring("Sent when the status string changes")]
+ // void StatusChange(); */
+ // m_comAppH->get_status(&m_comRet);
+ // OutputDebugStringW(L"wmp_Evt:\tStatusChange \n\t");
+ // OutputDebugStringW(m_comRet);
+ // OutputDebugStringW(L"\n");
+ //} break;
+
+ // DIID_WMPCoreEvents CONTROL
+ //case DISPID_WMPCOREEVENT_AUDIOLANGUAGECHANGE:
+ //{/* [id(0x000013ee), helpstring("Sent when the current audio language has changed")]
+ // void AudioLanguageChange([in] long LangID); */
+ // DEBUGOUT("wmp_Evt:\tAudioLanguageChange","");
+ //} break;
+
+ // DIID_WMPCoreEvents SEEK
+ case DISPID_WMPCOREEVENT_ENDOFSTREAM:
+ {/* [id(0x00001451), helpstring("Sent when the end of file is reached")]
+ void EndOfStream([in] long Result); */
+ DEBUGOUT("wmp_Evt:\tEndOfStream","");
+ } break;
+ case DISPID_WMPCOREEVENT_POSITIONCHANGE:
+ {/* [id(0x00001452), helpstring("Indicates that the current position of the movie has changed")]
+ void PositionChange( [in] double oldPosition, [in] double newPosition); */
+ DEBUGOUT("wmp_Evt:\tPositionChange","");
+ } break;
+ case DISPID_WMPCOREEVENT_MARKERHIT:
+ {/* [id(0x00001453), helpstring("Sent when a marker is reached")]
+ void MarkerHit([in] long MarkerNum); */
+ DEBUGOUT("wmp_Evt:\tMarkerHit","");
+ } break;
+ case DISPID_WMPCOREEVENT_DURATIONUNITCHANGE:
+ {/* [id(0x00001454), helpstring("Indicates that the unit used to express duration and position has changed")]
+ void DurationUnitChange([in] long NewDurationUnit); */
+ DEBUGOUT("wmp_Evt:\tDurationUnitChange","");
+ } break;
+
+ // DIID_WMPCoreEvents CONTENT
+ //case DISPID_WMPCOREEVENT_SCRIPTCOMMAND:
+ //{/* [id(0x000014b5), helpstring("Sent when a synchronized command or URL is received")]
+ // void ScriptCommand([in] BSTR scType, [in] BSTR Param); */
+ // DEBUGOUT("wmp_Evt:\tScriptCommand","");
+ //} break;
+
+ // DIID_WMPCoreEvents NETWORK
+ //case DISPID_WMPCOREEVENT_DISCONNECT:
+ //{/* [id(0x00001519), helpstring("Sent when the control is disconnected from the server")]
+ // void Disconnect([in] long Result); */
+ // DEBUGOUT("wmp_Evt:\tDisconnect","");
+ //} break;
+ case DISPID_WMPCOREEVENT_BUFFERING:
+ {/* [id(0x0000151a), helpstring("Sent when the control begins or ends buffering")]
+ void Buffering([in] VARIANT_BOOL Start); */
+ DEBUGOUT("wmp_Evt:\tBuffering","");
+ } break;
+ case DISPID_WMPCOREEVENT_NEWSTREAM:
+ {/* [id(0x0000151b), helpstring("Sent when a new stream is started in a channel")]
+ void NewStream(); */
+ DEBUGOUT("wmp_Evt:\tNewStream","");
+ } break;
+
+ // DIID_WMPCoreEvents ERROR
+ case DISPID_WMPCOREEVENT_ERROR:
+ {/* [id(0x0000157d), helpstring("Sent when the control has an error condition")]
+ void Error(); */
+ DEBUGOUT("wmp_Evt:\tError","");
+ } break;
+
+ // DIID_WMPCoreEvents WARNING
+ case DISPID_WMPCOREEVENT_WARNING:
+ {/* [id(0x000015e1), helpstring("Sent when the control encounters a problem")]
+ void Warning([in] long WarningType, [in] long Param, [in] BSTR Description); */
+ DEBUGOUT("wmp_Evt:\tWarning","");
+ } break;
+
+ // DIID_WMPCoreEvents CDROM
+ case DISPID_WMPCOREEVENT_CDROMMEDIACHANGE:
+ {/* [id(0x00001645), helpstring("Indicates that the CD ROM media has changed")]
+ void CdromMediaChange([in] long CdromNum); */
+ DEBUGOUT("wmp_Evt:\tCdromMediaChange","");
+ } break;
+
+ // DIID_WMPCoreEvents PLAYLIST
+ //case DISPID_WMPCOREEVENT_PLAYLISTCHANGE:
+ //{/* [id(0x000016a9), helpstring("Sent when a playlist changes")]
+ // void PlaylistChange([in] IDispatch* Playlist, [in] WMPPlaylistChangeEventType change); */
+ // char temp[5];
+ // _i64toa(pDispParams->rgvarg[0].lVal, temp, 10);
+ // DEBUGOUT("wmp_Evt:\tPlaylistChange = ",temp);
+ //} break;
+ //case DISPID_WMPCOREEVENT_MEDIACHANGE:
+ //{/* [id(0x000016aa), helpstring("Sent when a media object changes")]
+ // void MediaChange([in] IDispatch* Item); */
+ // DEBUGOUT("wmp_Evt:\tMediaChange","");
+ //} break;
+ case DISPID_WMPCOREEVENT_CURRENTMEDIAITEMAVAILABLE:
+ {/* [id(0x000016ab), helpstring("Sent when a current media item becomes available")]
+ void CurrentMediaItemAvailable([in] BSTR bstrItemName); */
+ DEBUGOUT("wmp_Evt:\tCurrentMediaItemAvailable","");
+ } break;
+ case DISPID_WMPCOREEVENT_CURRENTPLAYLISTCHANGE:
+ {/* [id(0x000016ac), helpstring("Sent when the current playlist changes")]
+ void CurrentPlaylistChange([in] WMPPlaylistChangeEventType change); */
+ DEBUGOUT("wmp_Evt:\tCurrentPlaylistChange","");
+ } break;
+ case DISPID_WMPCOREEVENT_CURRENTPLAYLISTITEMAVAILABLE:
+ {/* [id(0x000016ad), helpstring("Sent when a current playlist item becomes available")]
+ void CurrentPlaylistItemAvailable([in] BSTR bstrItemName); */
+ DEBUGOUT("wmp_Evt:\tCurrentPlaylistItemAvailable","");
+ } break;
+ //case DISPID_WMPCOREEVENT_CURRENTITEMCHANGE:
+ //{/* [id(0x000016ae), helpstring("Sent when the item selection on the current playlist changes")]
+ // void CurrentItemChange([in] IDispatch* pdispMedia); */
+ // DEBUGOUT("wmp_Evt:\tCurrentItemChange","");
+ //} break;
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONCHANGE:
+ {/* [id(0x000016af), helpstring("Sent when the media collection needs to be requeried")]
+ void MediaCollectionChange(); */
+ DEBUGOUT("wmp_Evt:\tMediaCollectionChange","");
+ } break;
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGADDED:
+ {/* [id(0x000016b0), helpstring("Sent when an attribute string is added in the media collection")]
+ void MediaCollectionAttributeStringAdded([in] BSTR bstrAttribName, [in] BSTR bstrAttribVal); */
+ DEBUGOUT("wmp_Evt:\tMediaCollectionAttributeStringAdded","");
+ } break;
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGREMOVED:
+ {/* [id(0x000016b1), helpstring("Sent when an attribute string is removed from the media collection")]
+ void MediaCollectionAttributeStringRemoved( [in] BSTR bstrAttribName, [in] BSTR bstrAttribVal); */
+ DEBUGOUT("wmp_Evt:\tMediaCollectionAttributeStringRemoved","");
+ } break;
+ case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONCHANGE:
+ {/* [id(0x000016b2), helpstring("Sent when playlist collection needs to be requeried")]
+ void PlaylistCollectionChange(); */
+ DEBUGOUT("wmp_Evt:\tPlaylistCollectionChange","");
+ } break;
+ case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTADDED:
+ {/* [id(0x000016b3), helpstring("Sent when a playlist is added to the playlist collection")]
+ void PlaylistCollectionPlaylistAdded([in] BSTR bstrPlaylistName); */
+ DEBUGOUT("wmp_Evt:\tPlaylistCollectionPlaylistAdded","");
+ } break;
+ case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTREMOVED:
+ {/* [id(0x000016b4), helpstring("Sent when a playlist is removed from the playlist collection")]
+ void PlaylistCollectionPlaylistRemoved([in] BSTR bstrPlaylistName); */
+ DEBUGOUT("wmp_Evt:\tPlaylistCollectionPlaylistRemoved","");
+ } break;
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONCONTENTSCANADDEDITEM:
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONCONTENTSCANPROGRESS:
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONSEARCHFOUNDITEM:
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONSEARCHPROGRESS:
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONSEARCHCOMPLETE:
+ {/* not found in lib, but present in wmpids.h*/
+ DEBUGOUT("wmp_Evt:\tMediaCollection... ","check this event !!");
+ } break;
+ case DISPID_WMPCOREEVENT_PLAYLISTCOLLECTIONPLAYLISTSETASDELETED:
+ {/* [id(0x000016ba), helpstring("Sent when a playlist has been set or reset as deleted")]
+ void PlaylistCollectionPlaylistSetAsDeleted([in] BSTR bstrPlaylistName, [in] VARIANT_BOOL varfIsDeleted); */
+ DEBUGOUT("wmp_Evt:\tPlaylistCollectionPlaylistSetAsDeleted","");
+ } break;
+ //case DISPID_WMPCOREEVENT_MODECHANGE:
+ //{/* [id(0x000016bb), helpstring("Playlist playback mode has changed")]
+ // void ModeChange([in] BSTR ModeName, [in] VARIANT_BOOL NewValue); */
+ // DEBUGOUT("wmp_Evt:\tModeChange","");
+ //} break;
+ case DISPID_WMPCOREEVENT_MEDIACOLLECTIONATTRIBUTESTRINGCHANGED:
+ {/* [id(0x000016bc), helpstring("Sent when an attribute string is changed in the media collection")]
+ void MediaCollectionAttributeStringChanged([in] BSTR bstrAttribName, [in] BSTR bstrOldAttribVal, [in] BSTR bstrNewAttribVal); */
+ DEBUGOUT("wmp_Evt:\tMediaCollectionAttributeStringChanged","");
+ } break;
+ case DISPID_WMPCOREEVENT_MEDIAERROR:
+ {/* [id(0x000016bd), helpstring("Sent when the media object has an error condition")]
+ void MediaError([in] IDispatch* pMediaObject); */
+ DEBUGOUT("wmp_Evt:\tMediaError","");
+ } break;
+ case DISPID_WMPCOREEVENT_DOMAINCHANGE:
+ {/* [id(0x000016be), helpstring("Send a current domain")]
+ void DomainChange([in] BSTR strDomain); */
+ DEBUGOUT("wmp_Evt:\tDomainChange","");
+ } break;
+ case DISPID_WMPCOREEVENT_OPENPLAYLISTSWITCH:
+ {/* [id(0x000016bf), helpstring("Current playlist switch with no open state change")]
+ void OpenPlaylistSwitch([in] IDispatch* pItem); */
+ DEBUGOUT("wmp_Evt:\tOpenPlaylistSwitch","");
+ } break;
+
+ // DIID_WMPOCXEvents Key / mouse
+ case DISPID_WMPOCXEVENT_CLICK:
+ {/* [id(0x00001969), helpstring("Occurs when a user clicks the mouse")]
+ void Click([in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY); */
+ DEBUGOUT("wmp_Evt:\tClick","");
+ } break;
+ case DISPID_WMPOCXEVENT_DOUBLECLICK:
+ {/* [id(0x0000196a), helpstring("Occurs when a user double-clicks the mouse")]
+ void DoubleClick([in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY); */
+ DEBUGOUT("wmp_Evt:\tDoubleClick","");
+ } break;
+ case DISPID_WMPOCXEVENT_KEYDOWN:
+ {/* [id(0x0000196b), helpstring("Occurs when a key is pressed")]
+ void KeyDown([in] short nKeyCode, [in] short nShiftState); */
+ DEBUGOUT("wmp_Evt:\tKeyDown","");
+ } break;
+ case DISPID_WMPOCXEVENT_KEYPRESS:
+ {/* [id(0x0000196c), helpstring("Occurs when a key is pressed and released")]
+ void KeyPress([in] short nKeyAscii); */
+ DEBUGOUT("wmp_Evt:\tKeyPress","");
+ } break;
+ case DISPID_WMPOCXEVENT_KEYUP:
+ {/* [id(0x0000196d), helpstring("Occurs when a key is released")]
+ void KeyUp([in] short nKeyCode, [in] short nShiftState); */
+ DEBUGOUT("wmp_Evt:\tKeyUp","");
+ } break;
+ case DISPID_WMPOCXEVENT_MOUSEDOWN:
+ {/* [id(0x0000196e), helpstring("Occurs when a mouse button is pressed")]
+ void MouseDown([in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY); */
+ DEBUGOUT("wmp_Evt:\tMouseDown","");
+ } break;
+ case DISPID_WMPOCXEVENT_MOUSEMOVE:
+ {/* [id(0x0000196f), helpstring("Occurs when a mouse pointer is moved")]
+ void MouseMove([in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY); */
+ DEBUGOUT("wmp_Evt:\tMouseMove","");
+ } break;
+ case DISPID_WMPOCXEVENT_MOUSEUP:
+ {/* [id(0x00001970), helpstring("Occurs when a mouse button is released")]
+ void MouseUp([in] short nButton, [in] short nShiftState, [in] long fX, [in] long fY); */
+ DEBUGOUT("wmp_Evt:\tMouseUp","");
+ } break;
+
+ // OTHER Events
+ case 0x00001971:
+ {/* [id(0x00001971), helpstring("Occurs when a device is connected")]
+ void DeviceConnect([in] IWMPSyncDevice* pDevice); */
+ DEBUGOUT("wmp_Evt:\tDeviceConnect","");
+ } break;
+ case 0x00001972:
+ {/* [id(0x00001972), helpstring("Occurs when a device is disconnected")]
+ void DeviceDisconnect([in] IWMPSyncDevice* pDevice); */
+ DEBUGOUT("wmp_Evt:\tDeviceDisconnect","");
+ } break;
+ case 0x00001973:
+ {/* [id(0x00001973), helpstring("Occurs when a device status changes")]
+ void DeviceStatusChange([in] IWMPSyncDevice* pDevice, [in] WMPDeviceStatus NewStatus); */
+ DEBUGOUT("wmp_Evt:\tDeviceStatusChange","");
+ } break;
+ case 0x00001974:
+ {/* [id(0x00001974), helpstring("Occurs when a device sync state changes")]
+ void DeviceSyncStateChange([in] IWMPSyncDevice* pDevice, [in] WMPSyncState NewState); */
+ DEBUGOUT("wmp_Evt:\tDeviceSyncStateChange","");
+ } break;
+ case 0x00001975:
+ {/* [id(0x00001975), helpstring("Occurs when a device's media has an error")]
+ void DeviceSyncError([in] IWMPSyncDevice* pDevice, [in] IDispatch* pMedia); */
+ DEBUGOUT("wmp_Evt:\tDeviceSyncError","");
+ } break;
+ case 0x00001976:
+ {/* [id(0x00001976), helpstring("Occurs when createPartnership call completes")]
+ void CreatePartnershipComplete([in] IWMPSyncDevice* pDevice, [in] HRESULT hrResult); */
+ DEBUGOUT("wmp_Evt:\tCreatePartnershipComplete","");
+ } break;
+ default:
+ hr = DISP_E_MEMBERNOTFOUND;
+ break;
+ }
+ } //end if (pEventHandler==m_comPlaybackEventSink)
+
+ return( hr );
+}
+
+/////////////////////////////////////////////////////////////////////////////
+// COM ...CRemoteHost
+
+WindowsMediaPlayer::CRemoteHost::CRemoteHost()
+{
+}
+
+WindowsMediaPlayer::CRemoteHost::~CRemoteHost()
+{
+}
+
+//***************************************************************************
+// QueryService()
+// API from IServiceProvider
+//***************************************************************************
+HRESULT
+WindowsMediaPlayer::CRemoteHost::QueryService(REFGUID guidService, REFIID riid, void ** ppv)
+{
+ return ppv? QueryInterface(riid, ppv) : E_POINTER;
+}
+
+//***************************************************************************
+// GetServiceType()
+// Always return Remote so that the player OCX runs at remote state
+//***************************************************************************
+HRESULT
+WindowsMediaPlayer::CRemoteHost::GetServiceType(BSTR * pbstrType)
+{
+ HRESULT hr = E_POINTER;
+ if(pbstrType)
+ {
+ *pbstrType = ::SysAllocString(L"Remote");
+ hr = *pbstrType? S_OK : E_POINTER;
+ }
+ return hr;
+}
+
+//***************************************************************************
+// GetApplicationName()
+// Return the application name. It will be shown in player's menu View >
+// Switch to applications
+//***************************************************************************
+HRESULT
+WindowsMediaPlayer::CRemoteHost::GetApplicationName(BSTR * pbstrName)
+{
+ HRESULT hr = E_POINTER;
+ if(pbstrName)
+ {
+// CComBSTR bstrAppName = _T("");
+// bstrAppName.LoadString(IDS_PROJNAME);
+// *pbstrName = bstrAppName.Detach();
+ *pbstrName = ::SysAllocString(L"Miranda ListeningTo");
+ hr = *pbstrName? S_OK : E_POINTER;
+ }
+ return hr;
+}
+
+//***************************************************************************
+// GetScriptableObject()
+// There is no scriptable object in this application
+//***************************************************************************
+HRESULT
+WindowsMediaPlayer::CRemoteHost::GetScriptableObject(BSTR * pbstrName, IDispatch ** ppDispatch)
+{
+ if(pbstrName)
+ {
+ *pbstrName = NULL;
+ }
+ if(ppDispatch)
+ {
+ *ppDispatch = NULL;
+ }
+ return E_NOTIMPL;
+}
+
+//***************************************************************************
+// GetCustomUIMode()
+// When UI mode of the player OCX is set to custom, this function is called
+// to give the skin file path that will be loaded to the player OCX.
+//
+//***************************************************************************
+HRESULT
+WindowsMediaPlayer::CRemoteHost::GetCustomUIMode(BSTR * pbstrFile)
+{
+ return E_NOTIMPL;
+}
+
+
diff --git a/Plugins/listeningto/players/mswmp.h b/Plugins/listeningto/players/mswmp.h new file mode 100644 index 0000000..c7c27a0 --- /dev/null +++ b/Plugins/listeningto/players/mswmp.h @@ -0,0 +1,165 @@ +/*
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+*/
+
+#pragma once
+
+#ifndef _WIN32_WINNT
+#define _WIN32_WINNT 0x0400
+#endif
+
+//TODO: change to non-ATL code
+#define _ATL_DLL
+#define _ATL_APARTMENT_THREADED
+#include <atlbase.h>
+#include <atlcom.h>
+#include <atlwin.h>
+
+extern "C"
+{
+#include ".\wmp\wmp.h"
+#include ".\wmp\wmpids.h"
+}
+
+#include "TEventHandler.h"
+using namespace TEventHandlerNamespace;
+
+// ***** Make a forward declaration so that our TEventHandler template class can use it. *****
+class WindowsMediaPlayer;
+
+// ***** Declare an event handling class using the TEventHandler template. *****
+typedef TEventHandler<WindowsMediaPlayer, IWMPPlayer4, _WMPOCXEvents> IMIM_wmpEventH;
+
+class WindowsMediaPlayer : public Player
+{
+protected: //only WLM
+// WCHAR m_received[1024];
+// WCHAR m_last_received[1024];
+
+// TCHAR **m_window_classes;
+// int m_window_classes_num;
+// HWND FindWindow(); //find Player Window
+
+// BOOL WLM_Start(); //start
+// BOOL WLM_Stop(); //stop
+
+protected:
+ ATOM cWndclass;
+ HWND m_hwndclass;
+ BOOL m_bFullPlayer;
+
+ void EnableDisable();
+
+ //com (Remoting the Windows Media Player Control)
+ class CRemoteHost :
+ public CComObjectRootEx<CComSingleThreadModel>,
+ public IServiceProvider,
+ public IWMPRemoteMediaServices
+ {
+ public:
+ CRemoteHost();
+ virtual ~CRemoteHost();
+
+ //DECLARE_PROTECT_FINAL_CONSTRUCT()
+ BEGIN_COM_MAP(CRemoteHost)
+ COM_INTERFACE_ENTRY(IServiceProvider)
+ COM_INTERFACE_ENTRY(IWMPRemoteMediaServices)
+ END_COM_MAP()
+
+ // IServiceProvider
+ STDMETHOD(QueryService)(REFGUID guidService, REFIID riid, void ** ppv);
+ // IWMPRemoteMediaServices
+ STDMETHOD(GetServiceType)(BSTR * pbstrType);
+ STDMETHOD(GetApplicationName)(BSTR * pbstrName);
+ STDMETHOD(GetScriptableObject)(BSTR * pbstrName, IDispatch ** ppDispatch);
+ STDMETHOD(GetCustomUIMode)(BSTR * pbstrFile);
+ };
+
+ CComModule _Module;
+ /* ***** Declare an instance of a COMApplication smart pointer. ***** */
+ IWMPPlayer4 *m_comAppH; //Host (include IWMPCore and IWMPPlayer1-4)
+ CAxWindow *m_pView; //ActiveX control container
+ /* ***** interface provides methods for switching between a remoted
+ ***** Windows Media Player control and the full mode of the Player. ***** */
+ IWMPPlayerApplication *m_comApp;
+ /* ***** Declare a pointer to a TEventHandler class which is specially tailored
+ ***** to receiving events from the _WMPOCXEvents events of an
+ ***** IWMPPlayer4 object (It is designed to be a sink object) *****/
+ IMIM_wmpEventH* m_comAppEventSink;
+
+ BSTR m_comRet; //global BSTR for free use
+
+ BOOL COM_Start(); //start the Host instance
+ BOOL COM_Stop(); //stop the Host instance, disconect and free all
+ BOOL COM_ConnectServer(); //start the COM instance
+ void COM_ReleaseServer();
+ BOOL COM_infoCache();
+ //helper
+ BOOL COM_IsPlayerDocked();
+ void COM_PlayState(long NewState);
+ BOOL CreateWnd();
+
+ /* ***** common function that handle events fired from the COM object. *****/
+ HRESULT COM_OnEventInvoke
+ (
+ void* pEventHandler, //client sync Interface (m_comAppEventSink)
+ DISPID dispIdMember, //server event Interface member
+ REFIID riid, //always NULL (see MSDN)
+ LCID lcid,
+ WORD wFlags,
+ DISPPARAMS FAR* pDispParams,
+ VARIANT FAR* pVarResult,
+ EXCEPINFO FAR* pExcepInfo,
+ UINT FAR* puArgErr
+ );
+
+ virtual ~WindowsMediaPlayer();
+
+public:
+ //common
+ WindowsMediaPlayer(int index);
+
+ //COM ...Remoting the Windows Media Player Control
+ BOOL GetListeningInfo(LISTENINGTOINFO *lti);
+
+/* //WLM ...Windows Live Messanger
+ BYTE GetStatus();
+ void WLM_ProcessReceived();
+ void WLM_NewData(const WCHAR *data, size_t len);
+ */
+};
diff --git a/Plugins/listeningto/players/player.cpp b/Plugins/listeningto/players/player.cpp index b444422..977abab 100644 --- a/Plugins/listeningto/players/player.cpp +++ b/Plugins/listeningto/players/player.cpp @@ -1,33 +1,49 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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 "..\\commons.h"
-
-
-extern void HasNewListeningInfo();
-
-
+#include "..\commons.h"
-Player::Player() : name(_T("Player")), enabled(FALSE), needPoll(FALSE)
+Player::Player(int index) : m_index (index), m_name(_T("Player")), m_enabled(FALSE), m_needPoll(FALSE), m_state(PL_OFFLINE)
{
- ZeroMemory(&listening_info, sizeof(listening_info));
+ m_hwnd = NULL;
+ ZeroMemory(&m_listening_info, sizeof(m_listening_info));
InitializeCriticalSection(&cs);
}
@@ -37,25 +53,29 @@ Player::~Player() DeleteCriticalSection(&cs);
}
-void Player::NotifyInfoChanged()
+void
+Player::NotifyInfoChanged(int ID)
{
- if (enabled)
- HasNewListeningInfo();
+ //check if prev event set a timer (handle doubble events)
+ if(hTimer)
+ return;
+ HasNewListeningInfo((ID<0)? m_index : ID);
}
-BOOL Player::GetListeningInfo(LISTENINGTOINFO *lti)
+BOOL
+Player::GetListeningInfo(LISTENINGTOINFO *lti)
{
EnterCriticalSection(&cs);
BOOL ret;
- if (listening_info.cbSize == 0)
+ if (m_listening_info.cbSize == 0)
{
ret = FALSE;
}
else
{
if (lti != NULL)
- CopyListeningInfo(lti, &listening_info);
+ CopyListeningInfo(lti, &m_listening_info);
ret = TRUE;
}
@@ -64,57 +84,84 @@ BOOL Player::GetListeningInfo(LISTENINGTOINFO *lti) return ret;
}
-void Player::FreeData()
+void
+Player::FreeData()
{
EnterCriticalSection(&cs);
- if (listening_info.cbSize != 0)
- FreeListeningInfo(&listening_info);
+ if (m_listening_info.cbSize != 0)
+ FreeListeningInfo(&m_listening_info);
LeaveCriticalSection(&cs);
}
-LISTENINGTOINFO * Player::LockListeningInfo()
+LISTENINGTOINFO*
+Player::LockListeningInfo()
{
EnterCriticalSection(&cs);
- return &listening_info;
+ return &m_listening_info;
}
-void Player::ReleaseListeningInfo()
+void
+Player::ReleaseListeningInfo()
{
LeaveCriticalSection(&cs);
}
+//Retrieves a reference to a COM object from an existing process
+HRESULT
+Player::ObjGet(REFCLSID rclsid, REFIID riid, void** pDispatch)
+{
+ //based on c++ example http://support.microsoft.com/kb/238610
+ HRESULT hr;
+ IUnknown *pUnk = NULL;
+
+ for(int i=1;i<=5;i++) { //try attaching for up to 5 attempts
+ hr = GetActiveObject(rclsid, NULL, (IUnknown**)&pUnk);
+ if(SUCCEEDED(hr)) {
+ hr = pUnk->QueryInterface(riid, pDispatch);
+ break;
+ }
+ ::Sleep(200);
+ }
+ //Release the no-longer-needed IUnknown...
+ RELEASE(pUnk, TRUE);
+
+ return hr;
+}
+//--------------------------------------------------------
-ExternalPlayer::ExternalPlayer()
+ExternalPlayer::ExternalPlayer(int index)
+: Player(index)
{
- name = _T("ExternalPlayer");
- needPoll = TRUE;
+ m_name = _T("ExternalPlayer");
+ m_needPoll = TRUE;
- window_classes = NULL;
- num_window_classes = 0;
- found_window = FALSE;
+ m_window_classes = NULL;
+ m_window_classes_num = 0;
}
ExternalPlayer::~ExternalPlayer()
{
}
-HWND ExternalPlayer::FindWindow()
+HWND
+ExternalPlayer::FindWindow()
{
- HWND hwnd = NULL;
- for(int i = 0; i < num_window_classes; i++)
+ m_hwnd = NULL;
+ for(int i = 0; i < m_window_classes_num; i++)
{
- hwnd = ::FindWindow(window_classes[i], NULL);
- if (hwnd != NULL)
+ m_hwnd = ::FindWindow(m_window_classes[i], NULL);
+ if (m_hwnd != NULL)
break;
}
- return hwnd;
+ return m_hwnd;
}
-BOOL ExternalPlayer::GetListeningInfo(LISTENINGTOINFO *lti)
+BOOL
+ExternalPlayer::GetListeningInfo(LISTENINGTOINFO *lti)
{
if (FindWindow() == NULL)
return FALSE;
@@ -122,40 +169,50 @@ BOOL ExternalPlayer::GetListeningInfo(LISTENINGTOINFO *lti) return Player::GetListeningInfo(lti);
}
+//--------------------------------------------------------
-
-CodeInjectionPlayer::CodeInjectionPlayer()
+CodeInjectionPlayer::CodeInjectionPlayer(int index)
+: ExternalPlayer(index)
{
- name = _T("CodeInjectionPlayer");
- dll_name = NULL;
- message_window_class = NULL;
- next_request_time = 0;
+ m_name = _T("CodeInjectionPlayer");
+ m_dll_name = NULL;
+ m_message_window_class = NULL;
+ m_next_request_time = 0;
}
CodeInjectionPlayer::~CodeInjectionPlayer()
{
}
-void CodeInjectionPlayer::InjectCode()
+BYTE
+CodeInjectionPlayer::GetStatus()
+{
+ if(FindWindow() == 0)
+ m_state = PL_OFFLINE;
+ return m_state;
+}
+
+void
+CodeInjectionPlayer::InjectCode()
{
if (!opts.enable_code_injection)
return;
- else if (next_request_time > GetTickCount())
+ else if (m_next_request_time > GetTickCount())
return;
// Window is opened?
- HWND hwnd = FindWindow();
- if (hwnd == NULL)
+ m_hwnd = FindWindow();
+ if (m_hwnd == NULL) {
+ m_state = PL_OFFLINE;
return;
+ }
// Msg Window is registered? (aka plugin is running?)
- HWND msgHwnd = ::FindWindow(message_window_class, NULL);
+ HWND msgHwnd = ::FindWindow(m_message_window_class, NULL);
if (msgHwnd != NULL)
return;
-
- next_request_time = GetTickCount() + 30000;
-
+ m_next_request_time = GetTickCount() + 30000;
// Get the dll path
char dll_path[1024] = {0};
@@ -171,7 +228,7 @@ void CodeInjectionPlayer::InjectCode() size_t len = p - dll_path;
- mir_snprintf(p, 1024 - len, "listeningto\\%s.dll", dll_name);
+ mir_snprintf(p, 1024 - len, "listeningto\\%s.dll", m_dll_name);
len = strlen(dll_path);
@@ -182,7 +239,7 @@ void CodeInjectionPlayer::InjectCode() // Do the code injection
unsigned long pid;
- GetWindowThreadProcessId(hwnd, &pid);
+ GetWindowThreadProcessId(m_hwnd, &pid);
HANDLE hProcess = OpenProcess(PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION
| PROCESS_VM_WRITE | PROCESS_VM_READ, FALSE, pid);
if (hProcess == NULL)
@@ -213,9 +270,10 @@ void CodeInjectionPlayer::InjectCode() CloseHandle(hProcess);
}
-BOOL CodeInjectionPlayer::GetListeningInfo(LISTENINGTOINFO *lti)
+BOOL
+CodeInjectionPlayer::GetListeningInfo(LISTENINGTOINFO *lti)
{
- if (enabled)
+ if (m_enabled)
InjectCode();
return ExternalPlayer::GetListeningInfo(lti);
diff --git a/Plugins/listeningto/players/player.h b/Plugins/listeningto/players/player.h index 45396ad..ec80420 100644 --- a/Plugins/listeningto/players/player.h +++ b/Plugins/listeningto/players/player.h @@ -1,42 +1,88 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
+#pragma once
+
+#define PL_OFFLINE 0
+#define PL_STOPPED 1
+#define PL_STARTET 2
+#define PL_PLAYING 3
+#define PL_PAUSED 4
+#define PL_FORWARD 5
+#define PL_REWIND 6
+
+#define CALL(_F_) hr = _F_; if (FAILED(hr)) goto FAILURE
+#define RELEASE(_x_,_y_) { if (_x_ != NULL && _y_ != 0) _x_->Release(); _x_ = NULL; }
+#define BSTRFREE(_x_) { SysFreeString(_x_); _x_ = NULL; }
+#define mir_bstr2t(_X_) ( SysStringLen(_X_)>0 ? mir_u2t(_X_) : NULL )
+
+extern UINT_PTR hTimer;
+extern void HasNewListeningInfo(int ID);
+extern BOOL SetActivePlayer(int ID, int newVal);
class Player
{
protected:
- LISTENINGTOINFO listening_info;
- CRITICAL_SECTION cs;
+ LISTENINGTOINFO m_listening_info;
+ CRITICAL_SECTION cs;
+ HWND m_hwnd;
+
+ void NotifyInfoChanged(int ID = -1);
+ virtual HRESULT ObjGet(REFCLSID rclsid, REFIID riid, void** pDispatch);
+ void EVT_Unhook(HANDLE *h){if(*h) {UnhookEvent(*h); *h = NULL;}}
- void NotifyInfoChanged();
+private:
public:
- BOOL enabled;
- BOOL needPoll;
- TCHAR *name;
+ BOOL m_enabled;
+ BOOL m_needPoll;
+ BYTE m_state;
+ TCHAR* m_name;
+ int m_index;
- Player();
+ Player(int index);
virtual ~Player();
virtual BOOL GetListeningInfo(LISTENINGTOINFO *lti);
virtual void FreeData();
+ virtual BYTE GetStatus() {return m_state;};
// Helpers to write to this object's listening info
virtual LISTENINGTOINFO * LockListeningInfo();
@@ -50,14 +96,13 @@ public: class ExternalPlayer : public Player
{
protected:
- TCHAR **window_classes;
- int num_window_classes;
- BOOL found_window;
+ TCHAR **m_window_classes;
+ int m_window_classes_num;
virtual HWND FindWindow();
public:
- ExternalPlayer();
+ ExternalPlayer(int index);
virtual ~ExternalPlayer();
virtual BOOL GetListeningInfo(LISTENINGTOINFO *lti);
@@ -67,15 +112,16 @@ public: class CodeInjectionPlayer : public ExternalPlayer
{
protected:
- char *dll_name;
- TCHAR *message_window_class;
- DWORD next_request_time;
+ char* m_dll_name;
+ TCHAR* m_message_window_class;
+ DWORD m_next_request_time;
virtual void InjectCode();
public:
- CodeInjectionPlayer();
+ CodeInjectionPlayer(int index);
virtual ~CodeInjectionPlayer();
+ virtual BYTE GetStatus();
virtual BOOL GetListeningInfo(LISTENINGTOINFO *lti);
};
diff --git a/Plugins/listeningto/players/watrack.cpp b/Plugins/listeningto/players/watrack.cpp index bace34d..3633228 100644 --- a/Plugins/listeningto/players/watrack.cpp +++ b/Plugins/listeningto/players/watrack.cpp @@ -1,104 +1,95 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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 "..\commons.h"
-#include "..\\commons.h"
-
-
-static WATrack *instance = NULL;
-
-int NewStatusCallback(WPARAM wParam, LPARAM lParam)
+WATrack::WATrack(int index)
+: Player(index)
{
- if (!loaded)
- return 0;
- if (instance != NULL)
- instance->NewStatus(wParam, lParam);
- return 0;
+ m_name = _T("WATrack");
+ m_hNewStatusHook = NULL;
}
-
-WATrack::WATrack()
-{
- name = _T("WATrack");
- instance = this;
- hNewStatusHook = NULL;
-}
-
-
-
WATrack::~WATrack()
{
- if (hNewStatusHook != NULL)
- {
- UnhookEvent(hNewStatusHook);
- hNewStatusHook = NULL;
- }
- instance = NULL;
+ EVT_Unhook(&m_hNewStatusHook);
}
-
-void WATrack::EnableDisable()
+void
+WATrack::EnableDisable()
{
- if (!ServiceExists(MS_WAT_GETMUSICINFO))
- {
- enabled = FALSE;
+ if (!ServiceExists(MS_WAT_GETMUSICINFO)) {
+ m_enabled = FALSE;
return;
}
- if (hNewStatusHook == NULL)
- hNewStatusHook = HookEvent(ME_WAT_NEWSTATUS, NewStatusCallback);
+ if (!m_hNewStatusHook) {
+ //hook ME_WAT_NEWSTATUS
+ int (__cdecl WATrack::*hookProc)(WPARAM, LPARAM);
+ hookProc = &WATrack::NewStatus;
+ m_hNewStatusHook = HookEventObj(ME_WAT_NEWSTATUS, (MIRANDAHOOKOBJ)*(void **)&hookProc, this);
+ }
}
-
-void WATrack::NewStatus(int event, int value)
+int __cdecl
+WATrack::NewStatus(WPARAM wParam, LPARAM lParam)
{
+ if (!loaded) return 0;
EnterCriticalSection(&cs);
- if (event == WAT_EVENT_PLUGINSTATUS && value != 0)
- {
- FreeData();
- }
- else
- {
- GetData();
- }
+ (wParam == WAT_EVENT_PLUGINSTATUS && lParam != 0) ? FreeData() : GetData();
LeaveCriticalSection(&cs);
NotifyInfoChanged();
+ return 0;
}
-
-void WATrack::GetData()
+void
+WATrack::GetData()
{
#ifdef UNICODE
-
SONGINFO *si = NULL;
-
- int playing = CallService(MS_WAT_GETMUSICINFO, WAT_INF_UNICODE, (LPARAM) &si);
-
+ INT_PTR playing = CallService(MS_WAT_GETMUSICINFO, WAT_INF_UNICODE, (LPARAM) &si);
#else
-
SONGINFOA *si = NULL;
-
- int playing = CallService(MS_WAT_GETMUSICINFO, WAT_INF_ANSI, (LPARAM) &si);
-
+ INT_PTR playing = CallService(MS_WAT_GETMUSICINFO, WAT_INF_ANSI, (LPARAM) &si);
#endif
FreeData();
@@ -114,40 +105,40 @@ void WATrack::GetData() // Copy new data
- listening_info.ptszAlbum = DUP(si->album);
- listening_info.ptszArtist = DUP(si->artist);
- listening_info.ptszTitle = DUP(si->title);
- listening_info.ptszYear = DUP(si->year);
+ m_listening_info.ptszAlbum = DUP(si->album);
+ m_listening_info.ptszArtist = DUP(si->artist);
+ m_listening_info.ptszTitle = DUP(si->title);
+ m_listening_info.ptszYear = DUP(si->year);
if (si->track > 0)
{
- listening_info.ptszTrack = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
- _itot(si->track, listening_info.ptszTrack, 10);
+ m_listening_info.ptszTrack = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
+ _i64tot(si->track, m_listening_info.ptszTrack, 10);
}
- listening_info.ptszGenre = DUP(si->genre);
+ m_listening_info.ptszGenre = DUP(si->genre);
if (si->total > 0)
{
- listening_info.ptszLength = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
+ m_listening_info.ptszLength = (TCHAR*) mir_alloc(10 * sizeof(TCHAR));
int s = si->total % 60;
int m = (si->total / 60) % 60;
int h = (si->total / 60) / 60;
if (h > 0)
- mir_sntprintf(listening_info.ptszLength, 9, _T("%d:%02d:%02d"), h, m, s);
+ mir_sntprintf(m_listening_info.ptszLength, 9, _T("%d:%02d:%02d"), h, m, s);
else
- mir_sntprintf(listening_info.ptszLength, 9, _T("%d:%02d"), m, s);
+ mir_sntprintf(m_listening_info.ptszLength, 9, _T("%d:%02d"), m, s);
}
if (si->width > 0)
- listening_info.ptszType = mir_tstrdup(_T("Video"));
+ m_listening_info.ptszType = mir_tstrdup(_T("Video"));
else
- listening_info.ptszType = mir_tstrdup(_T("Music"));
+ m_listening_info.ptszType = mir_tstrdup(_T("Music"));
- listening_info.ptszPlayer = DUPD(si->player, name);
+ m_listening_info.ptszPlayer = DUPD(si->player, m_name);
- listening_info.cbSize = sizeof(listening_info);
- listening_info.dwFlags = LTI_TCHAR;
+ m_listening_info.cbSize = sizeof(m_listening_info);
+ m_listening_info.dwFlags = LTI_TCHAR;
}
diff --git a/Plugins/listeningto/players/watrack.h b/Plugins/listeningto/players/watrack.h index 2a7da3b..3e9d055 100644 --- a/Plugins/listeningto/players/watrack.h +++ b/Plugins/listeningto/players/watrack.h @@ -1,35 +1,55 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
+#pragma once
class WATrack : public Player
{
protected:
- HANDLE hNewStatusHook;
+ virtual void EnableDisable();
+
+ HANDLE m_hNewStatusHook; //HookEventObj on ME_WAT_NEWSTATUS
+ int __cdecl NewStatus(WPARAM wParam, LPARAM lParam);
- void GetData();
+ void GetData();
public:
- WATrack();
+ WATrack(int index);
virtual ~WATrack();
-
- void NewStatus(int event, int value);
-
- virtual void EnableDisable();
};
diff --git a/Plugins/listeningto/players/winamp.cpp b/Plugins/listeningto/players/winamp.cpp index 8579538..6eca97e 100644 --- a/Plugins/listeningto/players/winamp.cpp +++ b/Plugins/listeningto/players/winamp.cpp @@ -1,35 +1,56 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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 "..\\commons.h"
+#include "..\commons.h"
static TCHAR *wcs[] = {
_T("Winamp v1.x")
};
-Winamp::Winamp()
+Winamp::Winamp(int index)
+: CodeInjectionPlayer(index)
{
- name = _T("Winamp");
- window_classes = wcs;
- num_window_classes = MAX_REGS(wcs);
- message_window_class = MIRANDA_WINDOWCLASS _T(".Winamp");
- dll_name = "gen_mlt";
+ m_name = _T("Winamp");
+ m_window_classes = wcs;
+ m_window_classes_num = MAX_REGS(wcs);
+ m_message_window_class = MIRANDA_WINDOWCLASS _T(".Winamp");
+ m_dll_name = "gen_mlt";
}
diff --git a/Plugins/listeningto/players/winamp.h b/Plugins/listeningto/players/winamp.h index 69a9d04..68bf0bb 100644 --- a/Plugins/listeningto/players/winamp.h +++ b/Plugins/listeningto/players/winamp.h @@ -1,25 +1,46 @@ /*
-Copyright (C) 2005-2009 Ricardo Pescuma Domenecci
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
+#pragma once
class Winamp : public CodeInjectionPlayer
{
public:
- Winamp();
+ Winamp(int index);
};
diff --git a/Plugins/listeningto/players/winamp_mlt/GEN.H b/Plugins/listeningto/players/winamp_mlt/GEN.H new file mode 100644 index 0000000..a63da34 --- /dev/null +++ b/Plugins/listeningto/players/winamp_mlt/GEN.H @@ -0,0 +1,37 @@ +#ifndef NULLSOFT_WINAMP_GEN_H
+#define NULLSOFT_WINAMP_GEN_H
+
+#include <windows.h>
+
+#define GEN_INIT_SUCCESS 0
+
+// return values from the winampUninstallPlugin(HINSTANCE hdll, HWND parent, int param)
+// which determine if we can uninstall the plugin immediately or on winamp restart
+//
+// uninstall support was added from 5.0+ and uninstall now support from 5.5+
+// it is down to you to ensure that if uninstall now is returned that it will not cause a crash
+// (ie don't use if you've been subclassing the main window)
+#define GEN_PLUGIN_UNINSTALL_NOW 0x1
+#define GEN_PLUGIN_UNINSTALL_REBOOT 0x0
+
+typedef struct {
+ int version;
+ char *description;
+ int (*init)();
+ void (*config)();
+ void (*quit)();
+ HWND hwndParent;
+ HINSTANCE hDllInstance;
+} winampGeneralPurposePlugin;
+
+#define GPPHDR_VER 0x10
+#ifdef __cplusplus
+extern "C" {
+#endif
+//extern winampGeneralPurposePlugin *gen_plugins[256];
+typedef winampGeneralPurposePlugin * (*winampGeneralPurposePluginGetter)();
+#ifdef __cplusplus
+}
+#endif
+
+#endif
\ No newline at end of file diff --git a/Plugins/listeningto/players/mlt_winamp/mlt_winamp.cpp b/Plugins/listeningto/players/winamp_mlt/mlt_winamp.cpp index 948ded1..cef04b4 100644 --- a/Plugins/listeningto/players/mlt_winamp/mlt_winamp.cpp +++ b/Plugins/listeningto/players/winamp_mlt/mlt_winamp.cpp @@ -1,20 +1,40 @@ /*
-Copyright (C) 2006 Ricardo Pescuma Domenecci
-
-This is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+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 Library General Public
-License along with this file; see the file license.txt. If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.
+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.
*/
@@ -39,6 +59,8 @@ winampGeneralPurposePlugin plugin = { init,
config,
quit,
+ 0, // handle to Winamp main window, loaded by winamp when this dll is loaded
+ 0 // hinstance to this dll, loaded by winamp when this dll is loaded
};
@@ -121,9 +143,8 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvRe return TRUE;
}
-
// Winamp interface function
-extern "C" winampGeneralPurposePlugin * winampGetGeneralPurposePlugin()
+extern "C" __declspec(dllexport) winampGeneralPurposePlugin * winampGetGeneralPurposePlugin()
{
KillTimer(hMsgWnd, 0);
@@ -138,7 +159,7 @@ BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) {
class_name[sizeof(class_name)-1] = '\0';
- if (strcmpi(MIRANDA_WINDOWCLASS, class_name) == 0)
+ if (_strcmpi(MIRANDA_WINDOWCLASS, class_name) == 0)
{
COPYDATASTRUCT *cds = (COPYDATASTRUCT *)lParam;
SendMessage(hwnd, WM_COPYDATA, (WPARAM) plugin.hwndParent, (LPARAM) cds);
@@ -445,6 +466,10 @@ void quit() if (oldWndProc != NULL)
SetWindowLong(hPlWnd, GWL_WNDPROC, (LONG) oldWndProc);
+
+ if (FindWindow(MIRANDA_WINDOWCLASS, NULL) != NULL)
+ SendData(L"0\\0Winamp\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0");
+
}
diff --git a/Plugins/listeningto/players/mlt_winamp/mlt_winamp.def b/Plugins/listeningto/players/winamp_mlt/mlt_winamp.def index bd6c52c..bd6c52c 100644 --- a/Plugins/listeningto/players/mlt_winamp/mlt_winamp.def +++ b/Plugins/listeningto/players/winamp_mlt/mlt_winamp.def diff --git a/Plugins/listeningto/players/mlt_winamp/mlt_winamp.dsp b/Plugins/listeningto/players/winamp_mlt/mlt_winamp.dsp index 65c0805..65c0805 100644 --- a/Plugins/listeningto/players/mlt_winamp/mlt_winamp.dsp +++ b/Plugins/listeningto/players/winamp_mlt/mlt_winamp.dsp diff --git a/Plugins/listeningto/players/mlt_winamp/mlt_winamp.dsw b/Plugins/listeningto/players/winamp_mlt/mlt_winamp.dsw index 9cc7b29..9cc7b29 100644 --- a/Plugins/listeningto/players/mlt_winamp/mlt_winamp.dsw +++ b/Plugins/listeningto/players/winamp_mlt/mlt_winamp.dsw diff --git a/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj b/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj new file mode 100644 index 0000000..afdba74 --- /dev/null +++ b/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj @@ -0,0 +1,149 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>listeningto_winamp_mlt</ProjectName>
+ <ProjectGuid>{8BBB15B7-D08B-475A-A58C-0C71D39FADB8}</ProjectGuid>
+ <RootNamespace>gen_mlt</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <UseOfAtl>false</UseOfAtl>
+ <CharacterSet>MultiByte</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ <Import Project="$(VCTargetsPath)Microsoft.CPP.UpgradeFromVC60.props" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/winamp/gen_mlt\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/winamp/gen_mlt\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj/listeningto/$(ProjectName)\</IntDir>
+ <LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Debug/mlt_winamp_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MinimalRebuild>true</MinimalRebuild>
+ <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
+ <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <BrowseInformation>true</BrowseInformation>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0416</Culture>
+ </ResourceCompile>
+ <Link>
+ <ModuleDefinitionFile>
+ </ModuleDefinitionFile>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/mlt_winamp_9.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>MaxSpeed</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;MLT_WINAMP_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <StringPooling>true</StringPooling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <AssemblerListingLocation>
+ </AssemblerListingLocation>
+ <ObjectFileName>$(IntDir)</ObjectFileName>
+ <ProgramDataBaseFileName>$(IntDir)</ProgramDataBaseFileName>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DisableSpecificWarnings>4996;%(DisableSpecificWarnings)</DisableSpecificWarnings>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0416</Culture>
+ </ResourceCompile>
+ <Link>
+ <ModuleDefinitionFile>
+ </ModuleDefinitionFile>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ <Bscmake>
+ <OutputFile>$(OutDir)$(TargetName).bsc</OutputFile>
+ </Bscmake>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="mlt_winamp.cpp">
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="mlt_winamp.def" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj.filters b/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj.filters new file mode 100644 index 0000000..511e32a --- /dev/null +++ b/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj.filters @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{febcb178-060c-479b-973e-b9cc659717c8}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{2327cb95-5ec0-4aae-9d45-6e00de9782a9}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{17a113b7-0106-4c67-8d48-d186a2cd9bc2}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="mlt_winamp.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <None Include="mlt_winamp.def">
+ <Filter>Source Files</Filter>
+ </None>
+ </ItemGroup>
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj.user b/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj.user new file mode 100644 index 0000000..695b5c7 --- /dev/null +++ b/Plugins/listeningto/players/winamp_mlt/mlt_winamp_10.vcxproj.user @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project>
\ No newline at end of file diff --git a/Plugins/listeningto/players/winamp_mlt/mlt_winamp_9.vcproj b/Plugins/listeningto/players/winamp_mlt/mlt_winamp_9.vcproj new file mode 100644 index 0000000..f16d7e7 --- /dev/null +++ b/Plugins/listeningto/players/winamp_mlt/mlt_winamp_9.vcproj @@ -0,0 +1,247 @@ +<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="listeningto_winamp_mlt"
+ ProjectGUID="{8BBB15B7-D08B-475A-A58C-0C71D39FADB8}"
+ RootNamespace="gen_mlt"
+ TargetFrameworkVersion="0"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/winamp/gen_mlt"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ UseOfATL="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="_DEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Debug/mlt_winamp_9.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL"
+ MinimalRebuild="true"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ AssemblerListingLocation=""
+ ObjectFile="$(IntDir)/"
+ ProgramDataBaseFileName="$(IntDir)/"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1046"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\$(RootNamespace).dll"
+ LinkIncremental="2"
+ ModuleDefinitionFile=""
+ GenerateDebugInformation="true"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ OutputFile="$(OutDir)\$(TargetName).bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/winamp/gen_mlt"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj/listeningto/$(ProjectName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC60.vsprops"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="2"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/mlt_winamp_9.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MLT_WINAMP_EXPORTS"
+ StringPooling="true"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="true"
+ AssemblerListingLocation=""
+ ObjectFile="$(IntDir)/"
+ ProgramDataBaseFileName="$(IntDir)/"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DisableSpecificWarnings="4996"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1046"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ OutputFile="$(OutDir)\$(RootNamespace).dll"
+ LinkIncremental="1"
+ ModuleDefinitionFile=""
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ OutputFile="$(OutDir)\$(TargetName).bsc"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath="mlt_winamp.cpp"
+ >
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ PreprocessorDefinitions=""
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="mlt_winamp.def"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/Plugins/listeningto/players/mlt_winamp/wa_ipc.h b/Plugins/listeningto/players/winamp_mlt/wa_ipc.h index df29611..7e1f75d 100644 --- a/Plugins/listeningto/players/mlt_winamp/wa_ipc.h +++ b/Plugins/listeningto/players/winamp_mlt/wa_ipc.h @@ -1,5 +1,5 @@ /*
-** Copyright (C) 2006 Nullsoft, Inc.
+** Copyright (C) 1997-2008 Nullsoft, Inc.
**
** This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held
** liable for any damages arising from the use of this software.
@@ -30,22 +30,22 @@ typedef int intptr_t; **
*/
-/* message used to sent many messages to winamp's main window.
-** most all of the IPC_* messages involve sending the message in the form of:
-** result = SendMessage(hwnd_winamp,WM_WA_IPC,(parameter),IPC_*);
+/* Most of the IPC_* messages involve sending the message in the form of:
+** result = SendMessage(hwnd_winamp,WM_WA_IPC,(parameter),IPC_*);
+** Where different then this is specified (typically with WM_COPYDATA variants)
**
** When you use SendMessage(hwnd_winamp,WM_WA_IPC,(parameter),IPC_*) and specify a IPC_*
** which is not currently implemented/supported by the Winamp version being used then it
** will return 1 for 'result'. This is a good way of helping to check if an api being
** used which returns a function pointer, etc is even going to be valid.
*/
+
#define WM_WA_IPC WM_USER
-/* but some of them use WM_COPYDATA. be afraid.
-*/
#define WINAMP_VERSION_MAJOR(winampVersion) ((winampVersion & 0x0000FF00) >> 12)
#define WINAMP_VERSION_MINOR(winampVersion) (winampVersion & 0x000000FF) // returns, i.e. 0x12 for 5.12 and 0x10 for 5.1...
+
#define IPC_GETVERSION 0
/* int version = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVERSION);
**
@@ -61,9 +61,17 @@ typedef int intptr_t; ** Notes: For 5.02 this api will return the same value as for a 5.01 build.
** For 5.07 this api will return the same value as for a 5.06 build.
*/
+
+
#define IPC_GETVERSIONSTRING 1
+
#define IPC_GETREGISTEREDVERSION 770
+/* (requires Winamp 5.0+)
+** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETREGISTEREDVERSION);
+**
+** This will open the Winamp Preferences and show the Winamp Pro page.
+*/
typedef struct {
@@ -83,6 +91,7 @@ typedef struct { #define IPC_PLAYFILE 100 // dont be fooled, this is really the same as enqueufile
#define IPC_ENQUEUEFILE 100
#define IPC_PLAYFILEW 1100
+#define IPC_ENQUEUEFILEW 1100
/* This is sent as a WM_COPYDATA with IPC_PLAYFILE as the dwData member and the string
** of the file / playlist to be enqueued into the playlist editor as the lpData member.
** This will just enqueue the file or files since you can use this to enqueue a playlist.
@@ -125,6 +134,7 @@ typedef struct { ** since it won't be any fun.
*/
+
#define IPC_CHDIR 103
/* This is sent as a WM_COPYDATA type message with IPC_CHDIR as the dwData value and the
** directory you want to change to as the lpData member.
@@ -157,10 +167,12 @@ typedef struct { **
** If mode = 1 then it will return the current track length (in seconds).
** Will return -1 if there are no tracks (or possibly if Winamp cannot get the length).
+**
+** If mode = 2 then it will return the current track length (in milliseconds).
+** Will return -1 if there are no tracks (or possibly if Winamp cannot get the length).
*/
-
#define IPC_JUMPTOTIME 106
/* (requires Winamp 1.60+)
** SendMessage(hwnd_winamp,WM_WA_IPC,ms,IPC_JUMPTOTIME);
@@ -170,6 +182,7 @@ typedef struct { ** This returns -1 if Winamp is not playing, 1 on end of file, or 0 if it was successful.
*/
+
#define IPC_GETMODULENAME 109
#define IPC_EX_ISRIGHTEXE 666
/* usually shouldnt bother using these, but here goes:
@@ -179,6 +192,7 @@ typedef struct { ** matches. lame, I know.
*/
+
#define IPC_WRITEPLAYLIST 120
/* (requires Winamp 1.666+)
** int cur = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_WRITEPLAYLIST);
@@ -219,6 +233,13 @@ typedef struct { */
+#define IPC_GETVOLUME(hwnd_winamp) SendMessage(hwnd_winamp,WM_WA_IPC,-666,IPC_SETVOLUME)
+/* (requires Winamp 2.0+)
+** int curvol = IPC_GETVOLUME(hwnd_winamp);
+** This will return the current volume of Winamp or
+*/
+
+
#define IPC_SETPANNING 123
/* (requires Winamp 2.0+)
** SendMessage(hwnd_winamp,WM_WA_IPC,panning,IPC_SETPANNING);
@@ -293,6 +314,7 @@ typedef struct { which band, and the bottom word specifies the value.
*/
+
#define IPC_ADDBOOKMARK 129
#define IPC_ADDBOOKMARKW 131
/* (requires Winamp 2.4+)
@@ -347,6 +369,8 @@ typedef struct { ** This is useful for when you're an output plugin and you want to see if the stop/close
** happening is a full stop or if you are just between tracks. This returns non zero if
** it is a full stop or zero if it is just a new track.
+** benski> i think it's actually the other way around -
+** !0 for EOF and 0 for user pressing stop
*/
@@ -374,6 +398,8 @@ typedef struct { ** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_REFRESHPLCACHE);
** IPC_REFRESHPLCACHE will flush the playlist cache buffer and you send this if you want
** Winamp to go refetch the titles for all of the entries in the current playlist.
+**
+** 5.3+: pass a wchar_t * string in wParam, and it'll do a strnicmp() before clearing the cache
*/
@@ -433,8 +459,6 @@ typedef struct { #define IPC_ISWNDVISIBLE 261 // same param as IPC_GETWND
-
-
/************************************************************************
***************** in-process only (WE LOVE PLUGINS)
************************************************************************/
@@ -451,6 +475,7 @@ typedef struct { #define IPC_GETSKIN 201
+#define IPC_GETSKINW 1201
/* (requires Winamp 2.04+, only usable from plug-ins (not external apps))
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)skinname_buffer,IPC_GETSKIN);
** IPC_GETSKIN puts the directory where skin bitmaps can be found
@@ -501,6 +526,10 @@ typedef struct { */
+#define IPC_GETHTTPGETTERW 1240
+/* int (*httpRetrieveFileW)(HWND hwnd, char *url, wchar_t *file, wchar_t *dlgtitle); */
+
+
#define IPC_MBOPEN 241
/* (requires Winamp 2.05+)
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_MBOPEN);
@@ -509,7 +538,6 @@ typedef struct { */
-
#define IPC_CHANGECURRENTFILE 245
/* (requires Winamp 2.05+)
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)file,IPC_CHANGECURRENTFILE);
@@ -517,6 +545,13 @@ typedef struct { */
+#define IPC_CHANGECURRENTFILEW 1245
+/* (requires Winamp 5.3+)
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)file,IPC_CHANGECURRENTFILEW);
+** IPC_CHANGECURRENTFILEW will set the current playlist item.
+*/
+
+
#define IPC_GETMBURL 246
/* (requires Winamp 2.2+)
** char buffer[4096]; // Urls can be VERY long
@@ -533,6 +568,7 @@ typedef struct { ** IPC_MBBLOCK will block the Minibrowser from updates if value is set to 1
*/
+
#define IPC_MBOPENREAL 249
/* (requires Winamp 2.4+)
** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)url,IPC_MBOPENREAL);
@@ -541,6 +577,7 @@ typedef struct { ** IPC_MBBLOCK has been set to 1
*/
+
#define IPC_ADJUST_OPTIONSMENUPOS 280
/* (requires Winamp 2.9+)
** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_OPTIONSMENUPOS);
@@ -548,6 +585,7 @@ typedef struct { ** menu item above the options/skins/vis menus.
*/
+
#define IPC_GET_HMENU 281
/* (requires Winamp 2.9+)
** HMENU hMenu=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)0,IPC_GET_HMENU);
@@ -560,6 +598,7 @@ typedef struct { ** other values will return NULL.
*/
+
#define IPC_GET_EXTENDED_FILE_INFO 290 //pass a pointer to the following struct in wParam
#define IPC_GET_EXTENDED_FILE_INFO_HOOKABLE 296
/* (requires Winamp 2.9+)
@@ -573,7 +612,7 @@ typedef struct { const char *filename;
const char *metadata;
char *ret;
- int retlen;
+ size_t retlen;
} extendedFileInfoStruct;
@@ -589,6 +628,7 @@ typedef struct { int titlelen;
} basicFileInfoStruct;
+
#define IPC_GET_BASIC_FILE_INFOW 1291 //pass a pointer to the following struct in wParam
typedef struct {
const wchar_t *filename;
@@ -605,12 +645,21 @@ typedef struct { #define IPC_GET_EXTLIST 292 //returns doublenull delimited. GlobalFree() it when done. if data is 0, returns raw extlist, if 1, returns something suitable for getopenfilename
#define IPC_GET_EXTLISTW 1292 // wide char version of above
+
#define IPC_INFOBOX 293
typedef struct {
HWND parent;
char *filename;
} infoBoxParam;
+
+#define IPC_INFOBOXW 1293
+typedef struct {
+ HWND parent;
+ const wchar_t *filename;
+} infoBoxParamW;
+
+
#define IPC_SET_EXTENDED_FILE_INFO 294 //pass a pointer to the a extendedFileInfoStruct in wParam
/* (requires Winamp 2.9+)
** to use, create an extendedFileInfoStruct, point the values filename and metadata to the
@@ -620,12 +669,14 @@ typedef struct { ** Call IPC_WRITE_EXTENDED_FILE_INFO once you're done setting all the metadata you want to update
*/
+
#define IPC_WRITE_EXTENDED_FILE_INFO 295
/* (requires Winamp 2.9+)
** writes all the metadata set thru IPC_SET_EXTENDED_FILE_INFO to the file
** returns 1 if the file has been successfully updated, 0 if error
*/
+
#define IPC_FORMAT_TITLE 297
typedef struct
{
@@ -639,11 +690,12 @@ typedef struct void (*TAGFREEFUNC)(char * tag,void * p);
} waFormatTitle;
+
#define IPC_FORMAT_TITLE_EXTENDED 298 // similiar to IPC_FORMAT_TITLE, but falls back to Winamp's %tags% if your passed tag function doesn't handle it
typedef struct
{
- const wchar_t *filename;
- int useExtendedInfo; // set to 1 if you want the Title Formatter to query the input plugins for any tags that your tag function fails on
+ const wchar_t *filename;
+ int useExtendedInfo; // set to 1 if you want the Title Formatter to query the input plugins for any tags that your tag function fails on
const wchar_t *spec; // NULL=default winamp spec
void *p;
@@ -654,12 +706,22 @@ typedef struct void (*TAGFREEFUNC)(wchar_t *tag, void *p);
} waFormatTitleExtended;
-#define IPC_GETUNCOMPRESSINTERFACE 331
-/* returns a function pointer to uncompress().
-** int (*uncompress)(unsigned char *dest, unsigned long *destLen, const unsigned char *source, unsigned long sourceLen);
-** right out of zlib, useful for decompressing zlibbed data.
-** if you pass the parm of 0x10100000, it will return a wa_inflate_struct * to an inflate API.
-*/
+
+#define IPC_COPY_EXTENDED_FILE_INFO 299
+typedef struct
+{
+ const char *source;
+ const char *dest;
+} copyFileInfoStruct;
+
+
+#define IPC_COPY_EXTENDED_FILE_INFOW 1299
+typedef struct
+{
+ const wchar_t *source;
+ const wchar_t *dest;
+} copyFileInfoStructW;
+
typedef struct {
int (*inflateReset)(void *strm);
@@ -669,43 +731,205 @@ typedef struct { unsigned long (*crc32)(unsigned long crc, const unsigned char *buf, unsigned int len);
} wa_inflate_struct;
+#define IPC_GETUNCOMPRESSINTERFACE 331
+/* returns a function pointer to uncompress().
+** int (*uncompress)(unsigned char *dest, unsigned long *destLen, const unsigned char *source, unsigned long sourceLen);
+** right out of zlib, useful for decompressing zlibbed data.
+** if you pass the parm of 0x10100000, it will return a wa_inflate_struct * to an inflate API.
+*/
+
+
+typedef struct _prefsDlgRec {
+ HINSTANCE hInst; // dll instance containing the dialog resource
+ int dlgID; // resource identifier of the dialog
+ void *proc; // window proceedure for handling the dialog defined as
+ // LRESULT CALLBACK PrefsPage(HWND,UINT,WPARAM,LPARAM)
+
+ char *name; // name shown for the prefs page in the treelist
+ intptr_t where; // section in the treelist the prefs page is to be added to
+ // 0 for General Preferences
+ // 1 for Plugins
+ // 2 for Skins
+ // 3 for Bookmarks (no longer in the 5.0+ prefs)
+ // 4 for Prefs (the old 'Setup' section - no longer in 5.0+)
+
+ intptr_t _id;
+ struct _prefsDlgRec *next; // no longer implemented as a linked list, now used by Winamp for other means
+} prefsDlgRec;
+
+typedef struct _prefsDlgRecW {
+ HINSTANCE hInst; // dll instance containing the dialog resource
+ int dlgID; // resource identifier of the dialog
+ void *proc; // window proceedure for handling the dialog defined as
+ // LRESULT CALLBACK PrefsPage(HWND,UINT,WPARAM,LPARAM)
+
+ wchar_t *name; // name shown for the prefs page in the treelist
+ intptr_t where; // section in the treelist the prefs page is to be added to
+ // 0 for General Preferences
+ // 1 for Plugins
+ // 2 for Skins
+ // 3 for Bookmarks (no longer in the 5.0+ prefs)
+ // 4 for Prefs (the old 'Setup' section - no longer in 5.0+)
+
+ intptr_t _id;
+ struct _prefsDlgRec *next; // no longer implemented as a linked list, now used by Winamp for other means
+} prefsDlgRecW;
#define IPC_ADD_PREFS_DLG 332
+#define IPC_ADD_PREFS_DLGW 1332
#define IPC_REMOVE_PREFS_DLG 333
/* (requires Winamp 2.9+)
-** to use, allocate a prefsDlgRec structure (either on the heap or some global
-** data, but NOT on the stack), initialze the members:
-** hInst to the DLL instance where the resource is located
-** dlgID to the ID of the dialog,
-** proc to the window procedure for the dialog
-** name to the name of the prefs page in the prefs.
-** where to 0 (eventually we may add more options)
-** then, SendMessage(hwnd_winamp,WM_WA_IPC,&prefsRec,IPC_ADD_PREFS_DLG);
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&prefsRec,IPC_ADD_PREFS_DLG);
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&prefsRec,IPC_REMOVE_PREFS_DLG);
+**
+** IPC_ADD_PREFS_DLG:
+** To use this you need to allocate a prefsDlgRec structure (either on the heap or with
+** some global data but NOT on the stack) and then initialise the members of the structure
+** (see the definition of the prefsDlgRec structure above).
+**
+** hInst - dll instance of where the dialog resource is located.
+** dlgID - id of the dialog resource.
+** proc - dialog window procedure for the prefs dialog.
+** name - name of the prefs page as shown in the preferences list.
+** where - see above for the valid locations the page can be added.
+**
+** Then you do SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&prefsRec,IPC_ADD_PREFS_DLG);
+**
+** example:
+**
+** prefsDlgRec* prefsRec = 0;
+** prefsRec = GlobalAlloc(GPTR,sizeof(prefsDlgRec));
+** prefsRec->hInst = hInst;
+** prefsRec->dlgID = IDD_PREFDIALOG;
+** prefsRec->name = "Pref Page";
+** prefsRec->where = 0;
+** prefsRec->proc = PrefsPage;
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&prefsRec,IPC_ADD_PREFS_DLG);
+**
**
-** you can also IPC_REMOVE_PREFS_DLG with the address of the same prefsRec,
-** but you shouldn't really ever have to.
+** IPC_REMOVE_PREFS_DLG:
+** To use you pass the address of the same prefsRec you used when adding the prefs page
+** though you shouldn't really ever have to do this but it's good to clean up after you
+** when you're plugin is being unloaded.
**
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&prefsRec,IPC_REMOVE_PREFS_DLG);
+**
+** IPC_ADD_PREFS_DLGW
+** requires Winamp 5.53+
*/
-#define IPC_OPENPREFSTOPAGE 380 // pass an id of a builtin page, or a &prefsDlgRec of prefs page to open
-typedef struct _prefsDlgRec {
- HINSTANCE hInst;
- int dlgID;
- void *proc;
- char *name;
- intptr_t where; // 0 for options, 1 for plugins, 2 for skins, 3 for bookmarks, 4 for prefs
+#define IPC_OPENPREFSTOPAGE 380
+/* SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&prefsRec,IPC_OPENPREFSTOPAGE);
+**
+** There are two ways of opening a preferences page.
+**
+** The first is to pass an id of a builtin preferences page (see below for ids) or a
+** &prefsDlgRec of the preferences page to open and this is normally done if you are
+** opening a prefs page you added yourself.
+**
+** If the page id does not or the &prefsRec is not valid then the prefs dialog will be
+** opened to the first page available (usually the Winamp Pro page).
+**
+** (requires Winamp 5.04+)
+** Passing -1 for param will open the preferences dialog to the last page viewed.
+**
+** Note: v5.0 to 5.03 had a bug in this api
+**
+** On the first call then the correct prefs page would be opened to but on the next call
+** the prefs dialog would be brought to the front but the page would not be changed to the
+** specified.
+** In 5.04+ it will change to the prefs page specified if the prefs dialog is already open.
+*/
+
+/* Builtin Preference page ids (valid for 5.0+)
+** (stored in the lParam member of the TVITEM structure from the tree item)
+**
+** These can be useful if you want to detect a specific prefs page and add things to it
+** yourself or something like that ;)
+**
+** Winamp Pro 20
+** General Preferences 0
+** File Types 1
+** Playlist 23
+** Titles 21
+** Playback 42 (added in 5.25)
+** Station Info 41 (added in 5.11 & removed in 5.5)
+** Video 24
+** Localization 25 (added in 5.5)
+** Skins 40
+** Classic Skins 22
+** Plugins 30
+** Input 31
+** Output 32
+** Visualisation 33
+** DSP/Effect 34
+** General Purpose 35
+**
+** Note:
+** Custom page ids begin from 60
+** The value of the normal custom pages (Global Hotkeys, Jump To File, etc) is not
+** guaranteed since it depends on the order in which the plugins are loaded which can
+** change on different systems.
+**
+** Global Hotkeys, Jump To File, Media Library (under General Preferences and child pages),
+** Media Library (under Plugins), Portables, CD Ripping and Modern Skins are custom pages
+** created by the plugins shipped with Winamp.
+*/
- intptr_t _id;
- struct _prefsDlgRec *next;
-} prefsDlgRec;
+
+#define IPC_GETINIFILE 334
+/* (requires Winamp 2.9+)
+** char *ini=(char*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETINIFILE);
+** This returns a pointer to the full file path of winamp.ini.
+**
+** char ini_path[MAX_PATH] = {0};
+**
+** void GetIniFilePath(HWND hwnd){
+** if(SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVERSION) >= 0x2900){
+** // this gets the string of the full ini file path
+** lstrcpyn(ini_path,(char*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETINIFILE),sizeof(ini_path));
+** }
+** else{
+** char* p = ini_path;
+** p += GetModuleFileName(0,ini_path,sizeof(ini_path)) - 1;
+** while(p && *p != '.'){p--;}
+** lstrcpyn(p+1,"ini",sizeof(ini_path));
+** }
+** }
+*/
+
+
+#define IPC_GETINIDIRECTORY 335
+/* (requires Winamp 2.9+)
+** char *dir=(char*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETINIDIRECTORY);
+** This returns a pointer to the directory where winamp.ini can be found and is
+** useful if you want store config files but you don't want to use winamp.ini.
+*/
-#define IPC_GETINIFILE 334 // returns a pointer to winamp.ini
-#define IPC_GETINIDIRECTORY 335 // returns a pointer to the directory to put config files in (if you dont want to use winamp.ini)
#define IPC_GETPLUGINDIRECTORY 336
-#define IPC_GETM3UDIRECTORY 337 // returns a char pointer to the directory where winamp.m3u is stored in.
-#define IPC_GETM3UDIRECTORYW 338 // returns a wchar_t pointer to the directory where winamp.m3u is stored in.
+/* (requires Winamp 5.11+)
+** char *plugdir=(char*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETPLUGINDIRECTORY);
+** This returns a pointer to the directory where Winamp has its plugins stored and is
+** useful if you want store config files in plugins.ini in the plugins folder or for
+** accessing any local files in the plugins folder.
+*/
+
+
+#define IPC_GETM3UDIRECTORY 337
+/* (requires Winamp 5.11+)
+** char *m3udir=(char*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETM3UDIRECTORY);
+** This returns a pointer to the directory where winamp.m3u (and winamp.m3u8 if supported) is stored in.
+*/
+
+
+#define IPC_GETM3UDIRECTORYW 338
+/* (requires Winamp 5.3+)
+** wchar_t *m3udirW=(wchar_t*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETM3UDIRECTORYW);
+** This returns a pointer to the directory where winamp.m3u (and winamp.m3u8 if supported) is stored in.
+*/
+
#define IPC_SPAWNBUTTONPOPUP 361 // param =
// 0 = eject
@@ -715,15 +939,49 @@ typedef struct _prefsDlgRec { // 4 = play
// 5 = stop
-#define IPC_OPENURLBOX 360 // pass a HWND to a parent, returns a HGLOBAL that needs to be freed with GlobalFree(), if successful
-#define IPC_OPENFILEBOX 362 // pass a HWND to a parent
-#define IPC_OPENDIRBOX 363 // pass a HWND to a parent
-// pass an HWND to a parent. call this if you take over the whole UI so that the dialogs are not appearing on the
-// bottom right of the screen since the main winamp window is at 3000x3000, call again with NULL to reset
-#define IPC_SETDIALOGBOXPARENT 364
+#define IPC_OPENURLBOX 360
+/* (requires Winamp 5.0+)
+** HGLOBAL hglobal = (HGLOBAL)SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(HWND)parent,IPC_OPENURLBOX);
+** You pass a hwnd for the dialog to be parented to (which modern skin support uses).
+** This will return a HGLOBAL that needs to be freed with GlobalFree() if this worked.
+*/
+
+
+#define IPC_OPENFILEBOX 362
+/* (requires Winamp 5.0+)
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(HWND)parent,IPC_OPENFILEBOX);
+** You pass a hwnd for the dialog to be parented to (which modern skin support uses).
+*/
+
+
+#define IPC_OPENDIRBOX 363
+/* (requires Winamp 5.0+)
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(HWND)parent,IPC_OPENDIRBOX);
+** You pass a hwnd for the dialog to be parented to (which modern skin support uses).
+*/
+
+
+#define IPC_SETDIALOGBOXPARENT 364
+/* (requires Winamp 5.0+)
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(HWND)parent,IPC_SETDIALOGBOXPARENT);
+** Pass 'parent' as the window which will be used as the parent for a number of the built
+** in Winamp dialogs and is useful when you are taking over the whole of the UI so that
+** the dialogs will not appear at the bottom right of the screen since the main winamp
+** window is located at 3000x3000 by gen_ff when this is used. Call this again with
+** parent = null to reset the parent back to the orginal Winamp window.
+*/
+#define IPC_GETDIALOGBOXPARENT 365
+/* (requires Winamp 5.51+)
+** HWND hwndParent = SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)0, IPC_GETDIALOGBOXPARENT);
+** hwndParent can/must be passed to all modal dialogs (including MessageBox) thats uses winamp as a parent
+*/
+#define IPC_UPDATEDIALOGBOXPARENT 366
+/* (requires Winamp 5.53+)
+** if you previous called IPC_SETDIALOGBOXPARENT, call this every time your window resizes
+*/
#define IPC_DRO_MIN 401 // reserved for DrO
#define IPC_SET_JTF_COMPARATOR 409
@@ -742,28 +1000,56 @@ typedef struct _prefsDlgRec { #define IPC_GET_GENSKINBITMAP 503
-#define IPC_GET_EMBEDIF 505 // pass an embedWindowState
-// returns an HWND embedWindow(embedWindowState *); if the data is NULL, otherwise returns the HWND directly
typedef struct
{
HWND me; //hwnd of the window
- int flags;
+ #define EMBED_FLAGS_NORESIZE 0x1
+ // set this bit to keep window from being resizable
- RECT r;
+ #define EMBED_FLAGS_NOTRANSPARENCY 0x2
+ // set this bit to make gen_ff turn transparency off for this window
- void *user_ptr; // for application use
+ #define EMBED_FLAGS_NOWINDOWMENU 0x4
+ // set this bit to prevent gen_ff from automatically adding your window to the right-click menu
- intptr_t extra_data[64]; // for internal winamp use
+ #define EMBED_FLAGS_GUID 0x8
+ // (5.31+) call SET_EMBED_GUID(yourEmbedWindowStateStruct, GUID) to define a GUID for this window
+
+ #define SET_EMBED_GUID(windowState, windowGUID) { windowState->flags |= EMBED_FLAGS_GUID; *((GUID *)&windowState->extra_data[4])=windowGUID; }
+ #define GET_EMBED_GUID(windowState) (*((GUID *)&windowState->extra_data[4]))
+
+ int flags; // see above
+
+ RECT r;
+ void *user_ptr; // for application use
+ int extra_data[64]; // for internal winamp use
} embedWindowState;
-#define EMBED_FLAGS_NORESIZE 0x1 // set this bit in embedWindowState.flags to keep window from being resizable
-#define EMBED_FLAGS_NOTRANSPARENCY 0x2 // set this bit in embedWindowState.flags to make gen_ff turn transparency off for this wnd
-#define EMBED_FLAGS_NOWINDOWMENU 0x4 // set this bit to prevent gen_ff from automatically adding your window to the right-click menu
-#define EMBED_FLAGS_GUID 0x8 // call SET_EMBED_GUID(yourEmbedWindowStateStruct, GUID) to define a GUID for this window
+#define IPC_GET_EMBEDIF 505
+/* (requires Winamp 2.9+)
+** HWND myframe = (HWND)SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&wa_wnd,IPC_GET_EMBEDIF);
+**
+** or
+**
+** HWND myframe = 0;
+** HWND (*embed)(embedWindowState *params)=0;
+** *(void**)&embed = (void*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_EMBEDIF);
+** myframe = embed(&wa_wnd);
+**
+** You pass an embedWindowState* and it will return a hwnd for the frame window or if you
+** pass wParam as null then it will return a HWND embedWindow(embedWindowState *);
+*/
+
+#define IPC_SKINWINDOW 534
+
+typedef struct __SKINWINDOWPARAM
+{
+ HWND hwndToSkin;
+ GUID windowGuid;
+} SKINWINDOWPARAM;
+
-#define SET_EMBED_GUID(windowState, windowGUID) { windowState->flags |= EMBED_FLAGS_GUID; *((GUID *)&windowState->extra_data[4])=windowGUID; }
-#define GET_EMBED_GUID(windowState) (*((GUID *)&windowState->extra_data[4]))
#define IPC_EMBED_ENUM 532
typedef struct embedEnumStruct
@@ -773,7 +1059,13 @@ typedef struct embedEnumStruct } embedEnumStruct;
// pass
+
#define IPC_EMBED_ISVALID 533
+/* (requires Winamp 2.9+)
+** int valid = SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)embedhwnd,IPC_EMBED_ISVALID);
+** Pass a hwnd in the wParam to this to check if the hwnd is a valid embed window or not.
+*/
+
#define IPC_CONVERTFILE 506
/* (requires Winamp 2.92+)
@@ -794,7 +1086,7 @@ typedef struct {
char *sourcefile; // "c:\\source.mp3"
char *destfile; // "c:\\dest.pcm"
- int destformat[8]; // like 'PCM ',srate,nch,bps.
+ intptr_t destformat[8]; // like 'PCM ',srate,nch,bps.
//hack alert! you can set destformat[6]=mmioFOURCC('I','N','I',' '); and destformat[7]=(int)my_ini_file; (where my_ini_file is a char*)
HWND callbackhwnd; // window that will receive the IPC_CB_CONVERT notification messages
@@ -809,6 +1101,29 @@ typedef struct intptr_t extra_data[64]; // for internal winamp use
} convertFileStruct;
+
+#define IPC_CONVERTFILEW 515
+// (requires Winamp 5.36+)
+typedef struct
+{
+ wchar_t *sourcefile; // "c:\\source.mp3"
+ wchar_t *destfile; // "c:\\dest.pcm"
+ intptr_t destformat[8]; // like 'PCM ',srate,nch,bps.
+ //hack alert! you can set destformat[6]=mmioFOURCC('I','N','I',' '); and destformat[7]=(int)my_ini_file; (where my_ini_file is a char*)
+ HWND callbackhwnd; // window that will receive the IPC_CB_CONVERT notification messages
+
+ //filled in by winamp.exe
+ wchar_t *error; //if IPC_CONVERTFILE returns 0, the reason will be here
+
+ int bytes_done; //you can look at both of these values for speed statistics
+ int bytes_total;
+ int bytes_out;
+
+ int killswitch; // don't set it manually, use IPC_CONVERTFILE_END
+ intptr_t extra_data[64]; // for internal winamp use
+} convertFileStructW;
+
+
#define IPC_CONVERTFILE_END 507
/* (requires Winamp 2.92+)
** Stop/ends a convert process started from IPC_CONVERTFILE
@@ -820,6 +1135,10 @@ typedef struct ** No return value
*/
+
+#define IPC_CONVERTFILEW_END 516
+// (requires Winamp 5.36+)
+
typedef struct {
HWND hwndParent;
int format;
@@ -829,6 +1148,8 @@ typedef struct { int extra_data[8];
//hack alert! you can set extra_data[6]=mmioFOURCC('I','N','I',' '); and extra_data[7]=(int)my_ini_file; (where my_ini_file is a char*)
} convertConfigStruct;
+
+
#define IPC_CONVERT_CONFIG 508
#define IPC_CONVERT_CONFIG_END 509
@@ -859,10 +1180,22 @@ typedef struct convertFileStruct *cfs;
int priority;
} convertSetPriority;
+
+
#define IPC_CONVERT_SET_PRIORITY 512
typedef struct
{
+ convertFileStructW *cfs;
+ int priority;
+} convertSetPriorityW;
+
+
+#define IPC_CONVERT_SET_PRIORITYW 517
+// (requires Winamp 5.36+)
+
+typedef struct
+{
unsigned int format; //fourcc value
char *item; // config item, eg "bitrate"
char *data; // buffer to recieve, or buffer that contains the data
@@ -870,9 +1203,11 @@ typedef struct char *configfile; // config file to read from
} convertConfigItem;
+
#define IPC_CONVERT_CONFIG_SET_ITEM 513 // returns TRUE if successful
#define IPC_CONVERT_CONFIG_GET_ITEM 514 // returns TRUE if successful
+
typedef struct
{
const char *filename;
@@ -880,30 +1215,57 @@ typedef struct int length;
int force_useformatting; // can set this to 1 if you want to force a url to use title formatting shit
} waHookTitleStruct;
-// return TRUE if you hook this
+
#define IPC_HOOK_TITLES 850
+/* (requires Winamp 5.0+)
+** If you hook this message and modify the information then make sure to return TRUE.
+** If you don't hook the message then make sure you pass it on through the subclass chain.
+**
+** LRESULT CALLBACK WinampWndProc(HWND hwnd, UINT umsg, WPARAM wParam, LPARAM lParam)
+** {
+** LRESULT ret = CallWindowProc((WNDPROC)WinampProc,hwnd,umsg,wParam,lParam);
+**
+** if(message==WM_WA_IPC && lParam==IPC_HOOK_TITLES)
+** {
+** waHookTitleStruct *ht = (waHookTitleStruct *) wParam;
+** // Doing ATF stuff with ht->title, whatever...
+** return TRUE;
+** }
+** return ret;
+** }
+*/
typedef struct
{
const wchar_t *filename;
- wchar_t *title; // 2048 bytes
+ wchar_t *title; // 2048 characters
int length;
int force_useformatting; // can set this to 1 if you want to force a url to use title formatting shit
} waHookTitleStructW;
-// return TRUE if you hook this
#define IPC_HOOK_TITLESW 851
+/* (requires Winamp 5.3+)
+** See information on IPC_HOOK_TITLES for how to process this.
+*/
+
#define IPC_GETSADATAFUNC 800
// 0: returns a char *export_sa_get() that returns 150 bytes of data
// 1: returns a export_sa_setreq(int want);
+
#define IPC_GETVUDATAFUNC 801
// 0: returns a int export_vu_get(int channel) that returns 0-255 (or -1 for bad channel)
+
#define IPC_ISMAINWNDVISIBLE 900
+/* (requires Winamp 5.0+)
+** int visible=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISMAINWNDVISIBLE);
+** You send this to Winamp to query if the main window is visible or not such as by
+** unchecking the option in the main right-click menu. If the main window is visible then
+** this will return 1 otherwise it returns 0.
+*/
-#define IPC_SETPLEDITCOLORS 920
typedef struct
{
int numElems;
@@ -911,22 +1273,30 @@ typedef struct HBITMAP bm; // set if you want to override
} waSetPlColorsStruct;
+#define IPC_SETPLEDITCOLORS 920
+/* (requires Winamp 5.0+)
+** This is sent by gen_ff when a modern skin is being loaded to set the colour scheme for
+** the playlist editor. When sent numElems is usually 6 and matches with the 6 possible
+** colours which are provided be pledit.txt from the classic skins. The elems array is
+** defined as follows:
+**
+** elems = 0 => normal text
+** elems = 1 => current text
+** elems = 2 => normal background
+** elems = 3 => selected background
+** elems = 4 => minibroswer foreground
+** elems = 5 => minibroswer background
+**
+** if(uMsg == WM_WA_IPC && lParam == IPC_SETPLEDITCOLORS)
+** {
+** waSetPlColorsStruct* colStr = (waSetPlColorsStruct*)wp;
+** if(colStr)
+** {
+** // set or inspect the colours being used (basically for gen_ff's benefit)
+** }
+** }
+*/
-// the following IPC use waSpawnMenuParms as parameter
-#define IPC_SPAWNEQPRESETMENU 933
-#define IPC_SPAWNFILEMENU 934 //menubar
-#define IPC_SPAWNOPTIONSMENU 935 //menubar
-#define IPC_SPAWNWINDOWSMENU 936 //menubar
-#define IPC_SPAWNHELPMENU 937 //menubar
-#define IPC_SPAWNPLAYMENU 938 //menubar
-#define IPC_SPAWNPEFILEMENU 939 //menubar
-#define IPC_SPAWNPEPLAYLISTMENU 940 //menubar
-#define IPC_SPAWNPESORTMENU 941 //menubar
-#define IPC_SPAWNPEHELPMENU 942 //menubar
-#define IPC_SPAWNMLFILEMENU 943 //menubar
-#define IPC_SPAWNMLVIEWMENU 944 //menubar
-#define IPC_SPAWNMLHELPMENU 945 //menubar
-#define IPC_SPAWNPELISTOFPLAYLISTS 946
typedef struct
{
@@ -945,13 +1315,45 @@ typedef struct int height;
} waSpawnMenuParms2;
+// the following IPC use waSpawnMenuParms as parameter
+#define IPC_SPAWNEQPRESETMENU 933
+#define IPC_SPAWNFILEMENU 934 //menubar
+#define IPC_SPAWNOPTIONSMENU 935 //menubar
+#define IPC_SPAWNWINDOWSMENU 936 //menubar
+#define IPC_SPAWNHELPMENU 937 //menubar
+#define IPC_SPAWNPLAYMENU 938 //menubar
+#define IPC_SPAWNPEFILEMENU 939 //menubar
+#define IPC_SPAWNPEPLAYLISTMENU 940 //menubar
+#define IPC_SPAWNPESORTMENU 941 //menubar
+#define IPC_SPAWNPEHELPMENU 942 //menubar
+#define IPC_SPAWNMLFILEMENU 943 //menubar
+#define IPC_SPAWNMLVIEWMENU 944 //menubar
+#define IPC_SPAWNMLHELPMENU 945 //menubar
+#define IPC_SPAWNPELISTOFPLAYLISTS 946
+
-// system tray sends this (you might want to simulate it)
#define WM_WA_SYSTRAY WM_USER+1
+/* This is sent by the system tray when an event happens (you might want to simulate it).
+**
+** if(uMsg == WM_WA_SYSTRAY)
+** {
+** switch(lParam)
+** {
+** // process the messages sent from the tray
+** }
+** }
+*/
-// input plugins send this when they are done playing back
-#define WM_WA_MPEG_EOF WM_USER+2
+#define WM_WA_MPEG_EOF WM_USER+2
+/* Input plugins send this when they are done playing back the current file to inform
+** Winamp or anyother installed plugins that the current
+**
+** if(uMsg == WM_WA_MPEG_EOF)
+** {
+** // do what is needed here
+** }
+*/
//// video stuff
@@ -966,14 +1368,15 @@ typedef struct #define VIDUSER_OPENVIDEORENDERER 0x1004
#define VIDUSER_CLOSEVIDEORENDERER 0x1005
#define VIDUSER_GETPOPUPMENU 0x1006
+#define VIDUSER_SET_INFOSTRINGW 0x1007
typedef struct
{
- int w;
- int h;
- int vflip;
- double aspectratio;
- unsigned int fmt;
+ int w;
+ int h;
+ int vflip;
+ double aspectratio;
+ unsigned int fmt;
} VideoOpenStruct;
#ifndef NO_IVIDEO_DECLARE
@@ -982,31 +1385,32 @@ typedef struct class VideoOutput;
class SubsItem;
-typedef struct {
- unsigned char* baseAddr;
- long rowBytes;
-} YV12_PLANE;
+#ifndef _NSV_DEC_IF_H_
+struct YV12_PLANE {
+ unsigned char* baseAddr;
+ long rowBytes;
+} ;
-typedef struct {
- YV12_PLANE y;
- YV12_PLANE u;
- YV12_PLANE v;
-} YV12_PLANES;
+struct YV12_PLANES {
+ YV12_PLANE y;
+ YV12_PLANE u;
+ YV12_PLANE v;
+};
+#endif
class IVideoOutput
{
public:
virtual ~IVideoOutput() { }
virtual int open(int w, int h, int vflip, double aspectratio, unsigned int fmt)=0;
- virtual void setcallback(LRESULT (*msgcallback)(void *token, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam), void *token) { }
+ virtual void setcallback(LRESULT (*msgcallback)(void *token, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam), void *token) { (void)token; (void)msgcallback; /* to eliminate warning C4100 */ }
virtual void close()=0;
virtual void draw(void *frame)=0;
- virtual void drawSubtitle(SubsItem *item) { }
- virtual void showStatusMsg(const char *text) { }
+ virtual void drawSubtitle(SubsItem *item) {UNREFERENCED_PARAMETER(item); }
+ virtual void showStatusMsg(const char *text) {UNREFERENCED_PARAMETER(text); }
virtual int get_latency() { return 0; }
- virtual void notifyBufferState(int bufferstate) { } /* 0-255*/
-
- virtual INT_PTR extended(INT_PTR param1, INT_PTR param2, INT_PTR param3) { return 0; } // Dispatchable, eat this!
+ virtual void notifyBufferState(int bufferstate) { UNREFERENCED_PARAMETER(bufferstate); } /* 0-255*/
+ virtual INT_PTR extended(INT_PTR param1, INT_PTR param2, INT_PTR param3) { UNREFERENCED_PARAMETER(param1); UNREFERENCED_PARAMETER(param2); UNREFERENCED_PARAMETER(param3); return 0; } // Dispatchable, eat this!
};
class ITrackSelector
@@ -1041,35 +1445,88 @@ class ITrackSelector #define IPC_CB_GETTOOLTIP 602
#define IPC_CB_MISC 603
- #define IPC_CB_MISC_TITLE 0
+ #define IPC_CB_MISC_TITLE 0 // start of playing/stop/pause
#define IPC_CB_MISC_VOLUME 1 // volume/pan
- #define IPC_CB_MISC_STATUS 2
+ #define IPC_CB_MISC_STATUS 2 // start playing/stop/pause/ffwd/rwd
#define IPC_CB_MISC_EQ 3
#define IPC_CB_MISC_INFO 4
#define IPC_CB_MISC_VIDEOINFO 5
+ #define IPC_CB_MISC_TITLE_RATING 6 // (5.5+ for when the rating is changed via the songticker menu on current file)
+
+/* Example of using IPC_CB_MISC_STATUS to detect the start of track playback with 5.x
+**
+** if(lParam == IPC_CB_MISC && wParam == IPC_CB_MISC_STATUS)
+** {
+** if(SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISPLAYING) == 1 &&
+** !SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETOUTPUTTIME))
+** {
+** char* file = (char*)SendMessage(hwnd_winamp,WM_WA_IPC,
+** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTPOS),IPC_GETPLAYLISTFILE);
+** // only output if a valid file was found
+** if(file)
+** {
+** MessageBox(hwnd_winamp,file,"starting",0);
+** // or do something else that you need to do
+** }
+** }
+** }
+*/
+
#define IPC_CB_CONVERT_STATUS 604 // param value goes from 0 to 100 (percent)
#define IPC_CB_CONVERT_DONE 605
+
#define IPC_ADJUST_FFWINDOWSMENUPOS 606
/* (requires Winamp 2.9+)
** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_FFWINDOWSMENUPOS);
-** moves where winamp expects the freeform windows in the menubar windows main menu. Useful if you wish to insert a
-** menu item above extra freeform windows.
+** This will move where Winamp expects the freeform windows in the menubar windows main
+** menu. This is useful if you wish to insert a menu item above extra freeform windows.
*/
+
#define IPC_ISDOUBLESIZE 608
+/* (requires Winamp 5.0+)
+** int dsize=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISDOUBLESIZE);
+** You send this to Winamp to query if the double size mode is enabled or not.
+** If it is on then this will return 1 otherwise it will return 0.
+*/
+
#define IPC_ADJUST_FFOPTIONSMENUPOS 609
/* (requires Winamp 2.9+)
** int newpos=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)adjust_offset,IPC_ADJUST_FFOPTIONSMENUPOS);
-** moves where winamp expects the freeform preferences item in the menubar windows main menu. Useful if you wish to insert a
-** menu item above preferences item.
+** moves where winamp expects the freeform preferences item in the menubar windows main
+** menu. This is useful if you wish to insert a menu item above the preferences item.
+**
+** Note: This setting was ignored by gen_ff until it was fixed in 5.1
+** gen_ff would assume thatthe menu position was 11 in all cases and so when you
+** had two plugins attempting to add entries into the main right click menu it
+** would cause the 'colour themes' submenu to either be incorrectly duplicated or
+** to just disappear.instead.
+*/
+
+
+#define IPC_GETTIMEDISPLAYMODE 610
+/* (requires Winamp 5.0+)
+** int mode=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETTIMEDISPLAYMODE);
+** This will return the status of the time display i.e. shows time elapsed or remaining.
+** This returns 0 if Winamp is displaying time elapsed or 1 for the time remaining.
*/
-#define IPC_GETTIMEDISPLAYMODE 610 // returns 0 if displaying elapsed time or 1 if displaying remaining time
-#define IPC_SETVISWND 611 // param is hwnd, setting this allows you to receive ID_VIS_NEXT/PREVOUS/RANDOM/FS wm_commands
+#define IPC_SETVISWND 611
+/* (requires Winamp 5.0+)
+** int viswnd=(HWND)SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(HWND)viswnd,IPC_SETVISWND);
+** This allows you to set a window to receive the following message commands (which are
+** used as part of the modern skin integration).
+** When you have finished or your visualisation is closed then send wParam as zero to
+** ensure that things are correctly tidied up.
+*/
+
+/* The following messages are received as the LOWORD(wParam) of the WM_COMMAND message.
+** See %SDK%\winamp\wa5vis.txt for more info about visualisation integration in Winamp.
+*/
#define ID_VIS_NEXT 40382
#define ID_VIS_PREV 40383
#define ID_VIS_RANDOM 40384
@@ -1077,14 +1534,50 @@ class ITrackSelector #define ID_VIS_CFG 40390
#define ID_VIS_MENU 40391
-#define IPC_GETVISWND 612 // returns the vis cmd handler hwnd
+
+#define IPC_GETVISWND 612
+/* (requires Winamp 5.0+)
+** int viswnd=(HWND)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVISWND);
+** This returns a HWND to the visualisation command handler window if set by IPC_SETVISWND.
+*/
+
+
#define IPC_ISVISRUNNING 613
+/* (requires Winamp 5.0+)
+** int visrunning=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_ISVISRUNNING);
+** This will return 1 if a visualisation is currently running and 0 if one is not running.
+*/
+
+
#define IPC_CB_VISRANDOM 628 // param is status of random
-#define IPC_SETIDEALVIDEOSIZE 614 // sent by winamp to winamp, trap it if you need it. width=HIWORD(param), height=LOWORD(param)
+
+#define IPC_SETIDEALVIDEOSIZE 614
+/* (requires Winamp 5.0+)
+** This is sent by Winamp back to itself so it can be trapped and adjusted as needed with
+** the desired width in HIWORD(wParam) and the desired height in LOWORD(wParam).
+**
+** if(uMsg == WM_WA_IPC){
+** if(lParam == IPC_SETIDEALVIDEOSIZE){
+** wParam = MAKEWPARAM(height,width);
+** }
+** }
+*/
+
#define IPC_GETSTOPONVIDEOCLOSE 615
+/* (requires Winamp 5.0+)
+** int sovc=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETSTOPONVIDEOCLOSE);
+** This will return 1 if 'stop on video close' is enabled and 0 if it is disabled.
+*/
+
+
#define IPC_SETSTOPONVIDEOCLOSE 616
+/* (requires Winamp 5.0+)
+** int sovc=SendMessage(hwnd_winamp,WM_WA_IPC,enabled,IPC_SETSTOPONVIDEOCLOSE);
+** Set enabled to 1 to enable and 0 to disable the 'stop on video close' option.
+*/
+
typedef struct {
HWND hwnd;
@@ -1094,6 +1587,9 @@ typedef struct { } transAccelStruct;
#define IPC_TRANSLATEACCELERATOR 617
+/* (requires Winamp 5.0+)
+** (deprecated as of 5.53x+)
+*/
typedef struct {
int cmd;
@@ -1102,163 +1598,361 @@ typedef struct { int align;
} windowCommand; // send this as param to an IPC_PLCMD, IPC_MBCMD, IPC_VIDCMD
+
#define IPC_CB_ONTOGGLEAOT 618
+
#define IPC_GETPREFSWND 619
+/* (requires Winamp 5.0+)
+** HWND prefs = (HWND)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETPREFSWND);
+** This will return a handle to the preferences dialog if it is open otherwise it will
+** return zero. A simple check with the OS api IsWindow(..) is a good test if it's valid.
+**
+** e.g. this will open (or close if already open) the preferences dialog and show if we
+** managed to get a valid
+** SendMessage(hwnd_winamp,WM_COMMAND,MAKEWPARAM(WINAMP_OPTIONS_PREFS,0),0);
+** MessageBox(hwnd_winamp,(IsWindow((HWND)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETPREFSWND))?"Valid":"Not Open"),0,MB_OK);
+*/
+
+
+#define IPC_SET_PE_WIDTHHEIGHT 620
+/* (requires Winamp 5.0+)
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)&point,IPC_SET_PE_WIDTHHEIGHT);
+** You pass a pointer to a POINT structure which holds the width and height and Winamp
+** will set the playlist editor to that size (this is used by gen_ff on skin changes).
+** There does not appear to be any bounds limiting with this so it is possible to create
+** a zero size playlist editor window (which is a pretty silly thing to do).
+*/
-#define IPC_SET_PE_WIDTHHEIGHT 620 // data is a pointer to a POINT structure that holds width & height
#define IPC_GETLANGUAGEPACKINSTANCE 621
+/* (requires Winamp 5.0+)
+** HINSTANCE hInst = (HINSTANCE)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLANGUAGEPACKINSTANCE);
+** This will return the HINSTANCE to the currently used language pack file for winamp.exe
+**
+** (5.5+)
+** If you pass 1 in wParam then you will have zero returned if a language pack is in use.
+** if(!SendMessage(hwnd_winamp,WM_WA_IPC,1,IPC_GETLANGUAGEPACKINSTANCE)){
+** // winamp is currently using a language pack
+** }
+**
+** If you pass 2 in wParam then you will get the path to the language pack folder.
+** wchar_t* lngpackfolder = (wchar_t*)SendMessage(hwnd_winamp,WM_WA_IPC,2,IPC_GETLANGUAGEPACKINSTANCE);
+**
+** If you pass 3 in wParam then you will get the path to the currently extracted language pack.
+** wchar_t* lngpack = (wchar_t*)SendMessage(hwnd_winamp,WM_WA_IPC,3,IPC_GETLANGUAGEPACKINSTANCE);
+**
+** If you pass 4 in wParam then you will get the name of the currently used language pack.
+** wchar_t* lngname = (char*)SendMessage(hwnd_winamp,WM_WA_IPC,4,IPC_GETLANGUAGEPACKINSTANCE);
+*/
+#define LANG_IDENT_STR 0
+#define LANG_LANG_CODE 1
+#define LANG_COUNTRY_CODE 2
+/*
+** (5.51+)
+** If you pass 5 in LOWORD(wParam) then you will get the ident string/code string
+** (based on the param passed in the HIWORD(wParam) of the currently used language pack.
+** The string returned with LANG_IDENT_STR is used to represent the language that the
+** language pack is intended for following ISO naming conventions for consistancy.
+**
+** wchar_t* ident_str = (wchar_t*)SendMessage(hwnd_winamp,WM_WA_IPC,MAKEWPARAM(5,LANG_XXX),IPC_GETLANGUAGEPACKINSTANCE);
+**
+** e.g.
+** For the default language it will return the following for the different LANG_XXX codes
+** LANG_IDENT_STR -> "en-US" (max buffer size of this is 9 wchar_t)
+** LANG_LANG_CODE -> "en" (language code)
+** LANG_COUNTRY_CODE -> "US" (country code)
+**
+** On pre 5.51 installs you can get LANG_IDENT_STR using the following method
+** (you'll have to custom process the string returned if you want the langugage or country but that's easy ;) )
+**
+** #define LANG_PACK_LANG_ID 65534 (if you don't have lang.h)
+** HINSTANCE hInst = (HINSTANCE)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLANGUAGEPACKINSTANCE);
+** TCHAR buffer[9] = {0};
+** LoadString(hInst,LANG_PACK_LANG_ID,buffer,sizeof(buffer));
+**
+**
+**
+** The following example shows how using the basic api will allow you to load the playlist
+** context menu resource from the currently loaded language pack or it will fallback to
+** the default winamp.exe instance.
+**
+** HINSTANCE lang = (HINSTANCE)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLANGUAGEPACKINSTANCE);
+** HMENU popup = GetSubMenu(GetSubMenu((LoadMenu(lang?lang:GetModuleHandle(0),MAKEINTRESOURCE(101))),2),5);
+** // do processing as needed on the menu before displaying it
+** TrackPopupMenuEx(orig,TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,rc.left,rc.bottom,hwnd_owner,0);
+** DestroyMenu(popup);
+**
+** If you need a specific menu handle then look at IPC_GET_HMENU for more information.
+*/
+
#define IPC_CB_PEINFOTEXT 622 // data is a string, ie: "04:21/45:02"
+
#define IPC_CB_OUTPUTCHANGED 623 // output plugin was changed in config
+
#define IPC_GETOUTPUTPLUGIN 625
+/* (requires Winamp 5.0+)
+** char* outdll = (char*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETOUTPUTPLUGIN);
+** This returns a string of the current output plugin's dll name.
+** e.g. if the directsound plugin was selected then this would return 'out_ds.dll'.
+*/
+
#define IPC_SETDRAWBORDERS 626
+/* (requires Winamp 5.0+)
+** SendMessage(hwnd_winamp,WM_WA_IPC,enabled,IPC_SETDRAWBORDERS);
+** Set enabled to 1 to enable and 0 to disable drawing of the playlist editor and winamp
+** gen class windows (used by gen_ff to allow it to draw its own window borders).
+*/
+
+
#define IPC_DISABLESKINCURSORS 627
+/* (requires Winamp 5.0+)
+** SendMessage(hwnd_winamp,WM_WA_IPC,enabled,IPC_DISABLESKINCURSORS);
+** Set enabled to 1 to enable and 0 to disable the use of skinned cursors.
+*/
+
+
+#define IPC_GETSKINCURSORS 628
+/* (requires Winamp 5.36+)
+** data = (WACURSOR)cursorId. (check wa_dlg.h for values)
+*/
+
+
#define IPC_CB_RESETFONT 629
-#define IPC_IS_FULLSCREEN 630 // returns 1 if video or vis is in fullscreen mode
-#define IPC_SET_VIS_FS_FLAG 631 // a vis should send this message with 1/as param to notify winamp that it has gone to or has come back from fullscreen mode
+
+#define IPC_IS_FULLSCREEN 630
+/* (requires Winamp 5.0+)
+** int val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_IS_FULLSCREEN);
+** This will return 1 if the video or visualisation is in fullscreen mode or 0 otherwise.
+*/
+
+
+#define IPC_SET_VIS_FS_FLAG 631
+/* (requires Winamp 5.0+)
+** A vis should send this message with 1/as param to notify winamp that it has gone to or has come back from fullscreen mode
+*/
+
#define IPC_SHOW_NOTIFICATION 632
+
#define IPC_GETSKININFO 633
+#define IPC_GETSKININFOW 1633
+/* (requires Winamp 5.0+)
+** This is a notification message sent to the main Winamp window by itself whenever it
+** needs to get information to be shown about the current skin in the 'Current skin
+** information' box on the main Skins page in the Winamp preferences.
+**
+** When this notification is received and the current skin is one you are providing the
+** support for then you return a valid buffer for Winamp to be able to read from with
+** information about it such as the name of the skin file.
+**
+** if(uMsg == WM_WA_IPC && lParam == IPC_GETSKININFO){
+** if(is_our_skin()){
+** return is_our_skin_name();
+** }
+** }
+*/
+
#define IPC_GET_MANUALPLADVANCE 634
/* (requires Winamp 5.03+)
-** val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_MANUALPLADVANCE);
-**
-** IPC_GET_MANUALPLADVANCE returns the status of the Manual Playlist Advance (1 if set)
+** int val=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_MANUALPLADVANCE);
+** IPC_GET_MANUALPLADVANCE returns the status of the Manual Playlist Advance.
+** If enabled this will return 1 otherwise it will return 0.
*/
+
#define IPC_SET_MANUALPLADVANCE 635
/* (requires Winamp 5.03+)
** SendMessage(hwnd_winamp,WM_WA_IPC,value,IPC_SET_MANUALPLADVANCE);
-**
-** IPC_SET_MANUALPLADVANCE sets the status of the Manual Playlist Advance option (1 to turn it on)
+** IPC_SET_MANUALPLADVANCE sets the status of the Manual Playlist Advance option.
+** Set value = 1 to turn it on and value = 0 to turn it off.
*/
+
#define IPC_GET_NEXT_PLITEM 636
/* (requires Winamp 5.04+)
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_EOF_GET_NEXT_PLITEM);
**
-** Sent to Winamp's main window when an item has just finished playback or the next button has been pressed and
-** requesting the new playlist item number to go to.
-** Mainly used by gen_jumpex. Subclass this message in your application to return the new item number.
-** -1 for normal winamp operation (default) or the new item number in the playlist to play.
+** Sent to Winamp's main window when an item has just finished playback or the next
+** button has been pressed and requesting the new playlist item number to go to.
+**
+** Subclass this message in your application to return the new item number.
+** Return -1 for normal Winamp operation (default) or the new item number in
+** the playlist to be played instead of the originally selected next track.
+**
+** This is primarily provided for the JTFE plugin (gen_jumpex.dll).
*/
+
#define IPC_GET_PREVIOUS_PLITEM 637
/* (requires Winamp 5.04+)
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_EOF_GET_PREVIOUS_PLITEM);
**
-** Sent to Winamp's main window when the previous button has been pressed and Winamp is requesting the new playlist item number to go to.
-** Mainly used by gen_jumpex. Subclass this message in your application to return the new item number.
-** -1 for normal winamp operation (default) or the new item number in the playlist to play.
+** Sent to Winamp's main window when the previous button has been pressed and Winamp is
+** requesting the new playlist item number to go to.
+**
+** Return -1 for normal Winamp operation (default) or the new item number in
+** the playlist to be played instead of the originally selected previous track.
+**
+** This is primarily provided for the JTFE plugin (gen_jumpex.dll).
*/
-#define IPC_IS_WNDSHADE 638
+
+#define IPC_IS_WNDSHADE 638
/* (requires Winamp 5.04+)
-** SendMessage(hwnd_winamp,WM_WA_IPC,wnd,IPC_IS_WNDSHADE);
-**
-** 'wnd' is window id as defined for IPC_GETWND, or -1 for main window
-** Returns 1 if wnd is set to winshade mode, or 0 if it is not
+** int is_shaded=SendMessage(hwnd_winamp,WM_WA_IPC,wnd,IPC_IS_WNDSHADE);
+** Pass 'wnd' as an id as defined for IPC_GETWND or pass -1 to query the status of the
+** main window. This returns 1 if the window is in winshade mode and 0 if it is not.
+** Make sure you only test for this on a 5.04+ install otherwise you get a false result.
+** (See the notes about unhandled WM_WA_IPC messages).
*/
+
#define IPC_SETRATING 639
/* (requires Winamp 5.04+ with ML)
-** SendMessage(hwnd_winamp,WM_WA_IPC,rating,IPC_SETRATING);
-** 'rating' is an int value from 0 (no rating) to 5
+** int rating=SendMessage(hwnd_winamp,WM_WA_IPC,rating,IPC_SETRATING);
+** This will allow you to set the 'rating' on the current playlist entry where 'rating'
+** is an integer value from 0 (no rating) to 5 (5 stars).
+**
+** The following example should correctly allow you to set the rating for any specified
+** playlist entry assuming of course that you're trying to get a valid playlist entry.
+**
+** void SetPlaylistItemRating(int item_to_set, int rating_to_set){
+** int cur_pos=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTPOS);
+** SendMessage(hwnd_winamp,WM_WA_IPC,item_to_set,IPC_SETPLAYLISTPOS);
+** SendMessage(hwnd_winamp,WM_WA_IPC,rating_to_set,IPC_SETRATING);
+** SendMessage(hwnd_winamp,WM_WA_IPC,cur_pos,IPC_SETPLAYLISTPOS);
+** }
*/
+
#define IPC_GETRATING 640
/* (requires Winamp 5.04+ with ML)
-** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETRATING);
-** returns the current item's rating
+** int rating=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETRATING);
+** This returns the current playlist entry's rating between 0 (no rating) to 5 (5 stars).
+**
+** The following example should correctly allow you to get the rating for any specified
+** playlist entry assuming of course that you're trying to get a valid playlist entry.
+**
+** int GetPlaylistItemRating(int item_to_get, int rating_to_set){
+** int cur_pos=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETLISTPOS), rating = 0;
+** SendMessage(hwnd_winamp,WM_WA_IPC,item_to_get,IPC_SETPLAYLISTPOS);
+** rating = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETRATING);
+** SendMessage(hwnd_winamp,WM_WA_IPC,cur_pos,IPC_SETPLAYLISTPOS);
+** return rating;
+** }
*/
+
#define IPC_GETNUMAUDIOTRACKS 641
/* (requires Winamp 5.04+)
** int n = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETNUMAUDIOTRACKS);
-** returns the number of audio tracks for the currently playing item
+** This will return the number of audio tracks available from the currently playing item.
*/
+
#define IPC_GETNUMVIDEOTRACKS 642
/* (requires Winamp 5.04+)
** int n = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETNUMVIDEOTRACKS);
-** returns the number of video tracks for the currently playing item
+** This will return the number of video tracks available from the currently playing item.
*/
+
#define IPC_GETAUDIOTRACK 643
/* (requires Winamp 5.04+)
** int cur = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETAUDIOTRACK);
-** returns the id of the current audio track for the currently playing item
+** This will return the id of the current audio track for the currently playing item.
*/
+
#define IPC_GETVIDEOTRACK 644
/* (requires Winamp 5.04+)
** int cur = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVIDEOTRACK);
-** returns the id of the current video track for the currently playing item
+** This will return the id of the current video track for the currently playing item.
*/
+
#define IPC_SETAUDIOTRACK 645
/* (requires Winamp 5.04+)
** SendMessage(hwnd_winamp,WM_WA_IPC,track,IPC_SETAUDIOTRACK);
-** switch the currently playing item to a new audio track
+** This allows you to switch to a new audio track (if supported) in the current playing file.
*/
+
#define IPC_SETVIDEOTRACK 646
/* (requires Winamp 5.04+)
** SendMessage(hwnd_winamp,WM_WA_IPC,track,IPC_SETVIDEOTRACK);
-** switch the currently playing item to a new video track
+** This allows you to switch to a new video track (if supported) in the current playing file.
*/
+
#define IPC_PUSH_DISABLE_EXIT 647
/* (requires Winamp 5.04+)
-** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_PUSH_DISABLE_EXIT );
-** lets you disable or re-enable the UI exit functions (close button,
-** context menu, alt-f4).
-** call IPC_POP_DISABLE_EXIT when you are done doing whatever required
-** preventing exit
+** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_PUSH_DISABLE_EXIT);
+** This will let you disable or re-enable the UI exit functions (close button, context
+** menu, alt-f4). Remember to call IPC_POP_DISABLE_EXIT when you are done doing whatever
+** was required that needed to prevent exit otherwise you have to kill the Winamp process.
*/
+
#define IPC_POP_DISABLE_EXIT 648
/* (requires Winamp 5.04+)
-** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_POP_DISABLE_EXIT );
-** see IPC_PUSH_DISABLE_EXIT
+** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_POP_DISABLE_EXIT);
+** See IPC_PUSH_DISABLE_EXIT
*/
+
#define IPC_IS_EXIT_ENABLED 649
/* (requires Winamp 5.04+)
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_IS_EXIT_ENABLED);
-** returns 0 if exit is disabled, 1 otherwise
+** This will return 0 if the 'exit' option of Winamp's menu is disabled and 1 otherwise.
*/
+
#define IPC_IS_AOT 650
/* (requires Winamp 5.04+)
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_IS_AOT);
-** returns status of always on top flag. note: this may not match the actual
-** TOPMOST window flag while another fullscreen application is focused
+** This will return the status of the always on top flag.
+** Note: This may not match the actual TOPMOST window flag while another fullscreen
+** application is focused if the user has the 'Disable always on top while fullscreen
+** applications are focused' option under the General Preferences page is checked.
*/
+
#define IPC_USES_RECYCLEBIN 651
-/*
-** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_USES_RECYCLEBIN);
-** returns 1 if deleted files should be sent to the recycle bin.
-** returns 0 if deleted files should be deleted permanently.
-**
-** You should check for this option if your plugin deletes files
-** so that your setting matches the winamp setting
+/* (requires Winamp 5.09+)
+** int use_bin=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_USES_RECYCLEBIN);
+** This will return 1 if the deleted file should be sent to the recycle bin or
+** 0 if deleted files should be deleted permanently (default action for < 5.09).
+**
+** Note: if you use this on pre 5.09 installs of Winamp then it will return 1 which is
+** not correct but is due to the way that SendMessage(..) handles un-processed messages.
+** Below is a quick case for checking if the returned value is correct.
+**
+** if(SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_USES_RECYCLEBIN) &&
+** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GETVERSION)>=0x5009)
+** {
+** // can safely follow the option to recycle the file
+** }
+** else
+* {
+** // need to do a permanent delete of the file
+** }
*/
+
#define IPC_FLUSHAUDITS 652
/*
** SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_FLUSHAUDITS);
**
-** Will flush any pending audits in the global audits que
+** Will flush any pending audits in the global audits queue
**
*/
@@ -1266,7 +1960,27 @@ typedef struct { #define IPC_GETPLAYITEM_END 654
-// >>>>>>>>>>> Next is 655
+#define IPC_GETVIDEORESIZE 655
+#define IPC_SETVIDEORESIZE 656
+
+
+#define IPC_INITIAL_SHOW_STATE 657
+/* (requires Winamp 5.36+)
+** int show_state = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_INITIAL_SHOW_STATE);
+** returns the processed value of nCmdShow when Winamp was started
+** (see MSDN documentation the values passed to WinMain(..) for what this should be)
+**
+** e.g.
+** if(SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_INITIAL_SHOW_STATE) == SW_SHOWMINIMIZED){
+** // we are starting minimised so process as needed (keep our window hidden)
+** }
+**
+** Useful for seeing if winamp was run minimised on startup so you can act accordingly.
+** On pre-5.36 versions this will effectively return SW_NORMAL/SW_SHOWNORMAL due to the
+** handling of unknown apis returning 1 from Winamp.
+*/
+
+// >>>>>>>>>>> Next is 658
#define IPC_PLCMD 1000
@@ -1301,8 +2015,83 @@ typedef struct { #define IPC_STATS_LIBRARY_ITEMCNT 1300 // updates library count status
-// IPC 2000-3000 reserved for freeform messages, see gen_ff/ff_ipc.h
+/*
+** IPC's in the message range 2000 - 3000 are reserved internally for freeform messages.
+** These messages are taken from ff_ipc.h which is part of the Modern skin integration.
+*/
+
#define IPC_FF_FIRST 2000
+
+#define IPC_FF_COLOURTHEME_CHANGE IPC_FF_ONCOLORTHEMECHANGED
+#define IPC_FF_ONCOLORTHEMECHANGED IPC_FF_FIRST + 3
+/*
+** This is a notification message sent when the user changes the colour theme in a Modern
+** skin and can also be detected when the Modern skin is first loaded as the gen_ff plugin
+** applies relevant settings and styles (like the colour theme).
+**
+** The value of wParam is the name of the new color theme being switched to.
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(const char*)colour_theme_name,IPC_FF_ONCOLORTHEMECHANGED);
+**
+** (IPC_FF_COLOURTHEME_CHANGE is the name i (DrO) was using before getting a copy of
+** ff_ipc.h with the proper name in it).
+*/
+
+
+#define IPC_FF_ISMAINWND IPC_FF_FIRST + 4
+/*
+** int ismainwnd = (HWND)SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(HWND)test_wnd,IPC_FF_ISMAINWND);
+**
+** This allows you to determine if the window handle passed to it is a modern skin main
+** window or not. If it is a main window or any of its windowshade variants then it will
+** return 1.
+**
+** Because of the way modern skins are implemented, it is possible for this message to
+** return a positive test result for a number of window handles within the current Winamp
+** process. This appears to be because you can have a visible main window, a compact main
+** window and also a winshaded version.
+**
+** The following code example below is one way of seeing how this api works since it will
+** enumerate all windows related to Winamp at the time and allows you to process as
+** required when a detection happens.
+**
+**
+** EnumThreadWindows(GetCurrentThreadId(),enumWndProc,0);
+**
+** BOOL CALLBACK enumWndProc(HWND hwnd, LPARAM lParam){
+**
+** if(SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)hwnd,IPC_FF_ISMAINWND)){
+** // do processing in here
+** // or continue the enum for other main windows (if they exist)
+** // and just comment out the line below
+** return 0;
+** }
+** return 1;
+** }
+*/
+
+
+#define IPC_FF_GETCONTENTWND IPC_FF_FIRST + 5
+/*
+** HWND wa2embed = (HWND)SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(HWND)test_wnd,IPC_FF_GETCONTENTWND);
+**
+** This will return the Winamp 2 window that is embedded in the window's container
+** i.e. if hwnd is the playlist editor windowshade hwnd then it will return the Winamp 2
+** playlist editor hwnd.
+**
+** If no content is found such as the window has nothing embedded then this will return
+** the hwnd passed to it.
+*/
+
+
+#define IPC_FF_NOTIFYHOTKEY IPC_FF_FIRST + 6
+/*
+** This is a notification message sent when the user uses a global hotkey combination
+** which had been registered with the gen_hotkeys plugin.
+**
+** The value of wParam is the description of the hotkey as passed to gen_hotkeys.
+** SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(const char*)hotkey_desc,IPC_FF_NOTIFYHOTKEY);
+*/
+
#define IPC_FF_LAST 3000
@@ -1325,6 +2114,7 @@ typedef struct { ** what's needed to handle it in your own instance.
*/
+
#define IPC_PLAYLIST_MODIFIED 3002
/* (requires Winamp 5.0+)
** This is a notification message sent to the main Winamp window whenever the playlist is
@@ -1334,41 +2124,62 @@ typedef struct { ** will slow down Winamp as playlist entries are modified (especially when you're adding
** in a large playlist).
**
-** if(uMsg == WM_WA_IPC && lParam == IPC_PLAYLIST_MODIFIED){
+** if(uMsg == WM_WA_IPC && lParam == IPC_PLAYLIST_MODIFIED)
+** {
** // do what you need to do here
** }
*/
+
#define IPC_PLAYING_FILE 3003
/* (requires Winamp 5.0+)
-** This is a notification message sent to the main Winamp windoq when playback begins for
+** This is a notification message sent to the main Winamp window when playback begins for
** a file. This passes the full filepath in the wParam of the message received.
**
-** if(uMsg == WM_WA_IPC && lParam == IPC_PLAYING_FILE){
+** if(uMsg == WM_WA_IPC && lParam == IPC_PLAYING_FILE)
+** {
** // do what you need to do here, e.g.
** process_file((char*)wParam);
** }
*/
-#define IPC_FILE_TAG_MAY_HAVE_UPDATED 3004 // sent to main wnd with the file as parm whenever a file tag might be updated
+
+#define IPC_PLAYING_FILEW 13003
+/* (requires Winamp 5.0+)
+** This is a notification message sent to the main Winamp window when playback begins for
+** a file. This passes the full filepath in the wParam of the message received.
+**
+** if(uMsg == WM_WA_IPC && lParam == IPC_PLAYING_FILEW)
+** {
+** // do what you need to do here, e.g.
+** process_file((wchar_t*)wParam);
+** }
+*/
+
+
+#define IPC_FILE_TAG_MAY_HAVE_UPDATED 3004
+#define IPC_FILE_TAG_MAY_HAVE_UPDATEDW 3005
/* (requires Winamp 5.0+)
** This is a notification message sent to the main Winamp window when a file's tag
** (e.g. id3) may have been updated. This appears to be sent when the InfoBox(..) function
** of the associated input plugin returns a 1 (which is the file information dialog/editor
** call normally).
**
-** if(uMsg == WM_WA_IPC && lParam == IPC_FILE_TAG_MAY_HAVE_UPDATED){
+** if(uMsg == WM_WA_IPC && lParam == IPC_FILE_TAG_MAY_HAVE_UPDATED)
+** {
** // do what you need to do here, e.g.
** update_info_on_file_update((char*)wParam);
** }
*/
+
#define IPC_ALLOW_PLAYTRACKING 3007
/* (requires Winamp 5.0+)
** SendMessage(hwnd_winamp,WM_WA_IPC,allow,IPC_ALLOW_PLAYTRACKING);
** Send allow as nonzero to allow play tracking and zero to disable the mode.
*/
+
#define IPC_HOOK_OKTOQUIT 3010
/* (requires Winamp 5.0+)
** This is a notification message sent to the main Winamp window asking if it's okay to
@@ -1379,14 +2190,17 @@ typedef struct { ** original window proceedure since another plugin may want to have a say in the matter
** with regards to Winamp closing.
**
-** if(uMsg == WM_WA_IPC && lParam == IPC_HOOK_OKTOQUIT){
+** if(uMsg == WM_WA_IPC && lParam == IPC_HOOK_OKTOQUIT)
+** {
** // do what you need to do here, e.g.
-** if(no_shut_down()){
+** if(no_shut_down())
+** {
** return 1;
** }
** }
*/
+
#define IPC_WRITECONFIG 3011
/* (requires Winamp 5.0+)
** SendMessage(hwnd_winamp,WM_WA_IPC,write_type,IPC_WRITECONFIG);
@@ -1407,10 +2221,10 @@ typedef struct { ** Send write_type as 0 to write the common and less common settings and no playlist.
*/
-#define IPC_UPDATE_URL 3012 // pass the URL (char *) in lparam, will be free()'d on done.
-// pass a string to be the name to register, and returns a value > 65536, which is a unique value you can use
-// for custom WM_WA_IPC messages.
+#define IPC_UPDATE_URL 3012
+// pass the URL (char *) in lparam, will be free()'d on done.
+
#define IPC_GET_RANDFUNC 3015 // returns a function to get a random number
/* (requires Winamp 5.1+)
@@ -1424,6 +2238,7 @@ typedef struct { ** SendMessage(..) when it is not handled so is good to check for it in this situation.
*/
+
#define IPC_METADATA_CHANGED 3017
/* (requires Winamp 5.1+)
** int changed=SendMessage(hwnd_winamp,WM_WA_IPC,(WPARAM)(char*)field,IPC_METADATA_CHANGED);
@@ -1442,16 +2257,19 @@ typedef struct { ** Winamp for it at the moment.
*/
+
#define IPC_SKIN_CHANGED 3018
/* (requires Winamp 5.1+)
** This is a notification message sent to the main Winamp window by itself whenever
** the skin in use is changed. There is no information sent by the wParam for this.
**
-** if(message == WM_WA_IPC && lparam == IPC_SKIN_CHANGED){
+** if(message == WM_WA_IPC && lparam == IPC_SKIN_CHANGED)
+** {
** // do what you need to do to handle skin changes, e.g. call WADlg_init(hwnd_winamp);
** }
*/
+
#define IPC_REGISTER_LOWORD_COMMAND 3019
/* (requires Winamp 5.1+)
** WORD id = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_REGISTER_LOWORD_COMMAND);
@@ -1459,26 +2277,32 @@ typedef struct { ** entries. The starting value returned by this message will potentially change as and
** when the main resource file of Winamp is updated with extra data so assumptions cannot
** be made on what will be returned and plugin loading order will affect things as well.
+
+** 5.33+
+** If you want to reserve more than one id, you can pass the number of ids required in wParam
*/
+
#define IPC_GET_DISPATCH_OBJECT 3020 // gets winamp main IDispatch * (for embedded webpages)
#define IPC_GET_UNIQUE_DISPATCH_ID 3021 // gives you a unique dispatch ID that won't conflict with anything in winamp's IDispatch *
-
#define IPC_ADD_DISPATCH_OBJECT 3022 // add your own dispatch object into winamp's. This lets embedded webpages access your functions
// pass a pointer to DispatchInfo (see below). Winamp makes a copy of all this data so you can safely delete it later
typedef struct
{
- wchar_t *name; // filled in by plugin, make sure it's a unicode string!! (i.e. L"myObject" instead of "myObject).
- struct IDispatch *dispatch; // filled in by plugin
- DWORD id; // filled in by winamp on return
+ wchar_t *name; // filled in by plugin, make sure it's a unicode string!! (i.e. L"myObject" instead of "myObject).
+ struct IDispatch *dispatch; // filled in by plugin
+ DWORD id; // filled in by winamp on return
} DispatchInfo;
+// see IPC_JSAPI2_GET_DISPATCH_OBJECT for version 2 of the Dispatchable scripting interface
+
#define IPC_GET_PROXY_STRING 3023
/* (requires Winamp 5.11+)
** char* proxy_string=(char*)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_PROXY_STRING);
** This will return the same string as is shown on the General Preferences page.
*/
+
#define IPC_USE_REGISTRY 3024
/* (requires Winamp 5.11+)
** int reg_enabled=SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_USE_REGISTRY);
@@ -1487,13 +2311,14 @@ typedef struct ** system settings, etc.
*/
+
#define IPC_GET_API_SERVICE 3025
/* (requires Winamp 5.12+)
** api_service* api_service = (api_service)SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_GET_API_SERVICE);
** This api will return Winamp's api_service pointer (which is what Winamp3 used, heh).
** If this api is not supported in the Winamp version that is being used at the time then
** the returned value from this api will be 1 which is a good version check.
-**
+**
** As of 5.12 there is support for .w5s plugins which reside in %WinampDir%\System and
** are intended for common code that can be shared amongst other plugins e.g. jnetlib.w5s
** which contains jnetlib in one instance instead of being duplicated multiple times in
@@ -1502,63 +2327,27 @@ typedef struct ** Details on the .w5s specifications will come at some stage (possibly).
*/
-#define WINAMP_OPTIONS_EQ 40036 // toggles the EQ window
-#define WINAMP_OPTIONS_PLEDIT 40040 // toggles the playlist window
-#define WINAMP_VOLUMEUP 40058 // turns the volume up a little
-#define WINAMP_VOLUMEDOWN 40059 // turns the volume down a little
-#define WINAMP_FFWD5S 40060 // fast forwards 5 seconds
-#define WINAMP_REW5S 40061 // rewinds 5 seconds
-
-// the following are the five main control buttons, with optionally shift
-// or control pressed
-// (for the exact functions of each, just try it out)
-#define WINAMP_BUTTON1 40044
-#define WINAMP_BUTTON2 40045
-#define WINAMP_BUTTON3 40046
-#define WINAMP_BUTTON4 40047
-#define WINAMP_BUTTON5 40048
-#define WINAMP_BUTTON1_SHIFT 40144
-#define WINAMP_BUTTON2_SHIFT 40145
-#define WINAMP_BUTTON3_SHIFT 40146
-#define WINAMP_BUTTON4_SHIFT 40147
-#define WINAMP_BUTTON5_SHIFT 40148
-#define WINAMP_BUTTON1_CTRL 40154
-#define WINAMP_BUTTON2_CTRL 40155
-#define WINAMP_BUTTON3_CTRL 40156
-#define WINAMP_BUTTON4_CTRL 40157
-#define WINAMP_BUTTON5_CTRL 40158
-
-#define WINAMP_FILE_PLAY 40029 // pops up the load file(s) box
-#define WINAMP_FILE_DIR 40187 // pops up the load directory box
-#define WINAMP_OPTIONS_PREFS 40012 // pops up the preferences
-#define WINAMP_OPTIONS_AOT 40019 // toggles always on top
-#define WINAMP_HELP_ABOUT 40041 // pops up the about box :)
-
-#define ID_MAIN_PLAY_AUDIOCD1 40323 // starts playing the audio CD in the first CD reader
-#define ID_MAIN_PLAY_AUDIOCD2 40323 // plays the 2nd
-#define ID_MAIN_PLAY_AUDIOCD3 40323 // plays the 3nd
-#define ID_MAIN_PLAY_AUDIOCD4 40323 // plays the 4nd
-
-// IDs 42000 to 45000 are reserved for gen_ff
-// IDs from 45000 to 57000 are reserved for library
typedef struct {
const wchar_t *filename;
const wchar_t *metadata;
wchar_t *ret;
- int retlen;
+ size_t retlen;
} extendedFileInfoStructW;
#define IPC_GET_EXTENDED_FILE_INFOW 3026
/* (requires Winamp 5.13+)
** Pass a pointer to the above struct in wParam
*/
+
+
#define IPC_GET_EXTENDED_FILE_INFOW_HOOKABLE 3027
#define IPC_SET_EXTENDED_FILE_INFOW 3028
/* (requires Winamp 5.13+)
** Pass a pointer to the above struct in wParam
*/
+
#define IPC_PLAYLIST_GET_NEXT_SELECTED 3029
/* (requires 5.2+)
** int pl_item = SendMessage(hwnd_winamp,WM_WA_IPC,start,IPC_PLAYLIST_GET_NEXT_SELECTED);
@@ -1580,13 +2369,87 @@ typedef struct { ** }
*/
+
#define IPC_PLAYLIST_GET_SELECTED_COUNT 3030
/* (requires 5.2+)
** int selcnt = SendMessage(hwnd_winamp,WM_WA_IPC,0,IPC_PLAYLIST_GET_SELECTED_COUNT);
** This will return the number of selected playlist entries.
*/
-#define IPC_GET_PLAYING_FILENAME 3031 // returns wchar_t * of the currently playing filename
+
+#define IPC_GET_PLAYING_FILENAME 3031
+// returns wchar_t * of the currently playing filename
+
+#define IPC_OPEN_URL 3032
+// send either ANSI or Unicode string (it'll figure it out, but it MUST start with "h"!, so don't send ftp:// or anything funny)
+// you can also send this one from another process via WM_COPYDATA (unicode only)
+
+
+#define IPC_USE_UXTHEME_FUNC 3033
+/* (requires Winamp 5.35+)
+** int ret = SendMessage(hwnd_winamp,WM_WA_IPC,param,IPC_USE_UXTHEME_FUNC);
+** param can be IPC_ISWINTHEMEPRESENT or IPC_ISAEROCOMPOSITIONACTIVE or a valid hwnd.
+**
+** If you pass a hwnd then it will apply EnableThemeDialogTexture(ETDT_ENABLETAB)
+** so your tabbed dialogs can use the correct theme (on supporting OSes ie XP+).
+**
+** Otherwise this will return a value based on the param passed (as defined below).
+** For compatability, the return value will be zero on success (as 1 is returned
+** for unsupported ipc calls on older Winamp versions)
+*/
+ #define IPC_ISWINTHEMEPRESENT 0
+/* This will return 0 if uxtheme.dll is present
+** int isthemethere = !SendMessage(hwnd_winamp,WM_WA_IPC,IPC_ISWINTHEMEPRESENT,IPC_USE_UXTHEME_FUNC);
+*/
+ #define IPC_ISAEROCOMPOSITIONACTIVE 1
+/* This will return 0 if aero composition is active
+** int isaero = !SendMessage(hwnd_winamp,WM_WA_IPC,IPC_ISAEROCOMPOSITIONACTIVE,IPC_USE_UXTHEME_FUNC);
+*/
+
+
+#define IPC_GET_PLAYING_TITLE 3034
+// returns wchar_t * of the current title
+
+
+#define IPC_CANPLAY 3035
+// pass const wchar_t *, returns an in_mod * or 0
+
+
+typedef struct {
+ // fill these in...
+ size_t size; // init to sizeof(artFetchData)
+ HWND parent; // parent window of the dialogue
+
+ // fill as much of these in as you can, otherwise leave them 0
+ const wchar_t *artist;
+ const wchar_t *album;
+ int year, amgArtistId, amgAlbumId;
+
+ int showCancelAll; // if set to 1, this shows a "Cancel All" button on the dialogue
+
+ // winamp will fill these in if the call returns successfully:
+ void* imgData; // a buffer filled with compressed image data. free with WASABI_API_MEMMGR->sysFree()
+ int imgDataLen; // the size of the buffer
+ wchar_t type[10]; // eg: "jpg"
+ const wchar_t *gracenoteFileId; // if you know it
+} artFetchData;
+
+#define IPC_FETCH_ALBUMART 3036
+/* pass an artFetchData*. This will show a dialog guiding the use through choosing art, and return when it's finished
+** return values:
+** 1: error showing dialog
+** 0: success
+** -1: cancel was pressed
+** -2: cancel all was pressed
+*/
+
+#define IPC_JSAPI2_GET_DISPATCH_OBJECT 3037
+/* pass your service's unique ID, as a wchar_t * string, in wParam
+** Winamp will copy the string, so don't worry about keeping it around
+** An IDispatch * object will be returned (cast the return value from SendMessage)
+** This IDispatch can be used for scripting/automation/VB interaction
+** Pass to IE via IDocHostUIHandler::GetExternal and it will become window.external in javscript
+*/
#define IPC_REGISTER_WINAMP_IPCMESSAGE 65536
/* (requires Winamp 5.0+)
diff --git a/Plugins/listeningto/res_vc6.rc b/Plugins/listeningto/res_vc6.rc new file mode 100644 index 0000000..7989eaa --- /dev/null +++ b/Plugins/listeningto/res_vc6.rc @@ -0,0 +1,2 @@ +#include "resource.rc"
+#include "version.rc"
diff --git a/Plugins/listeningto/resource.h b/Plugins/listeningto/resource.h index 91972b8..da4400c 100644 --- a/Plugins/listeningto/resource.h +++ b/Plugins/listeningto/resource.h @@ -1,5 +1,5 @@ //{{NO_DEPENDENCIES}}
-// Microsoft Developer Studio generated include file.
+// Microsoft Visual C++ generated include file.
// Used by resource.rc
//
#define IDD_OPTIONS 119
@@ -64,18 +64,21 @@ #define IDC_CONTACTS_G 1093
#define IDC_FOOBAR 1093
#define IDC_LISTENING_G 1094
-#define IDC_XSTATUS_G 1095
-#define IDC_XSTATUS_L 1096
-#define IDC_SET_XSTATUS 1097
-#define IDC_CHECK_XSTATUS 1098
-#define IDC_IGNORE_XSTATUS 1099
-#define IDC_XSTATUS_NAME 1100
-#define IDC_CHECK_XSTATUS_MUSIC 1100
-#define IDC_NAME_L 1101
-#define IDC_ENABLE_MUSIC 1102
-#define IDC_ENABLE_RADIO 1103
-#define IDC_ENABLE_VIDEO 1104
-#define IDC_ENABLE_OTHERS 1105
+#define IDC_VIDEOLAN 1095
+#define IDC_WLM 1096
+#define IDC_XSTATUS_G 1097
+#define IDC_MRADIO 1098
+#define IDC_XSTATUS_L 1099
+#define IDC_SET_XSTATUS 1100
+#define IDC_CHECK_XSTATUS 1101
+#define IDC_IGNORE_XSTATUS 1102
+#define IDC_XSTATUS_NAME 1103
+#define IDC_CHECK_XSTATUS_MUSIC 1104
+#define IDC_NAME_L 1105
+#define IDC_ENABLE_MUSIC 1106
+#define IDC_ENABLE_RADIO 1107
+#define IDC_ENABLE_VIDEO 1108
+#define IDC_ENABLE_OTHERS 1109
#define IDC_POLL_TIMER_SPIN 1625
#define IDC_STATIC -1
@@ -87,7 +90,7 @@ #define _APS_3D_CONTROLS 1
#define _APS_NEXT_RESOURCE_VALUE 124
#define _APS_NEXT_COMMAND_VALUE 40004
-#define _APS_NEXT_CONTROL_VALUE 1103
+#define _APS_NEXT_CONTROL_VALUE 1110
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
diff --git a/Plugins/listeningto/resource.rc b/Plugins/listeningto/resource.rc index f45d179..8a08a60 100644 --- a/Plugins/listeningto/resource.rc +++ b/Plugins/listeningto/resource.rc @@ -1,4 +1,4 @@ -//Microsoft Developer Studio generated resource script.
+// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
@@ -14,7 +14,7 @@ #undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
-// English (U.S.) resources
+// Englisch (USA) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
@@ -28,82 +28,62 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US //
IDD_OPTIONS DIALOGEX 0, 0, 288, 220
-STYLE DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
EXSTYLE WS_EX_CONTROLPARENT
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX " Listening to information ",IDC_LISTENING_G,3,12,282,58
- CONTROL "Enable sending listening information to contacts:",
- IDC_ENABLE_SEND,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,
- 26,262,11
- CONTROL "Music",IDC_ENABLE_MUSIC,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,26,40,52,11
- CONTROL "Radio",IDC_ENABLE_RADIO,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,92,40,52,11
- CONTROL "Video",IDC_ENABLE_VIDEO,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,158,40,52,11
- CONTROL "Others",IDC_ENABLE_OTHERS,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,224,40,52,11
- LTEXT "You also have to enable it per protocol in the main menu",
- IDC_STATIC,12,55,262,13
+ CONTROL "Enable sending listening information to contacts:",IDC_ENABLE_SEND,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,26,262,11
+ CONTROL "Music",IDC_ENABLE_MUSIC,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,26,40,52,11
+ CONTROL "Radio",IDC_ENABLE_RADIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,92,40,52,11
+ CONTROL "Video",IDC_ENABLE_VIDEO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,158,40,52,11
+ CONTROL "Others",IDC_ENABLE_OTHERS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,224,40,52,11
+ LTEXT "You also have to enable it per protocol in the main menu",IDC_STATIC,12,55,262,13
GROUPBOX " XStatus ",IDC_XSTATUS_G,3,74,282,88
- LTEXT "For protocols that don't support listening to but support XStatus:",
- IDC_XSTATUS_L,12,88,263,11
- CONTROL "Set XStatus to Music and show listening info",
- IDC_SET_XSTATUS,"Button",BS_AUTORADIOBUTTON,19,101,257,
- 12
- CONTROL "If other XStatus is not set, set XStatus to Music and show listening info",
- IDC_CHECK_XSTATUS,"Button",BS_AUTORADIOBUTTON,19,115,257,
- 12
- CONTROL "If XStatus is Music, show listening info",
- IDC_CHECK_XSTATUS_MUSIC,"Button",BS_AUTORADIOBUTTON,19,
- 129,257,12
- CONTROL "Do nothing",IDC_IGNORE_XSTATUS,"Button",
- BS_AUTORADIOBUTTON,19,143,257,12
+ LTEXT "For protocols that don't support listening to but support XStatus:",IDC_XSTATUS_L,12,88,263,11
+ CONTROL "Set XStatus to Music and show listening info",IDC_SET_XSTATUS,
+ "Button",BS_AUTORADIOBUTTON,19,101,257,12
+ CONTROL "If other XStatus is not set, set XStatus to Music and show listening info",IDC_CHECK_XSTATUS,
+ "Button",BS_AUTORADIOBUTTON,19,115,257,12
+ CONTROL "If XStatus is Music, show listening info",IDC_CHECK_XSTATUS_MUSIC,
+ "Button",BS_AUTORADIOBUTTON,19,129,257,12
+ CONTROL "Do nothing",IDC_IGNORE_XSTATUS,"Button",BS_AUTORADIOBUTTON,19,143,257,12
GROUPBOX " Contacts ",IDC_CONTACTS_G,3,166,282,49
- CONTROL "Apply template for info from contacts (overrides contacts template)",
- IDC_OVERRIDE_CONTACTS_TEMPLATE,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,12,180,262,11
- CONTROL "Show advanced icon in slot",IDC_SHOW_ADV_ICON,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,12,193,104,13
- COMBOBOX IDC_ADV_ICON,122,193,46,15,CBS_DROPDOWNLIST | WS_VSCROLL |
- WS_TABSTOP
+ CONTROL "Apply template for info from contacts (overrides contacts template)",IDC_OVERRIDE_CONTACTS_TEMPLATE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,180,262,11
+ CONTROL "Show advanced icon in slot",IDC_SHOW_ADV_ICON,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,193,104,13
+ COMBOBOX IDC_ADV_ICON,122,193,140,15,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
END
IDD_PLAYERS DIALOGEX 0, 0, 288, 224
-STYLE DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
- CONTROL "Get info from WATrack plugin",IDC_WATRACK,"Button",
- BS_AUTOCHECKBOX | WS_TABSTOP,3,12,282,11
+ CONTROL "Get info from WATrack plugin",IDC_WATRACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,12,282,11
LTEXT "Get info from these players:",IDC_PLAYERS_L,3,30,282,11
- CONTROL "Winamp (*)",IDC_WINAMP,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,20,44,265,11
- CONTROL "Windows Media Player",IDC_WMP,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,20,59,265,11
- CONTROL "iTunes",IDC_ITUNES,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,20,74,265,11
- CONTROL "foobar2000 (need to install the plugin manually)",
- IDC_FOOBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,89,
- 265,11
- CONTROL "Other players",IDC_OTHER,"Button",BS_AUTOCHECKBOX |
- WS_TABSTOP,20,104,265,11
- LTEXT "Ask for new info every",IDC_POLL_TIMER_L,3,126,87,12
- EDITTEXT IDC_POLL_TIMER,97,125,34,13,ES_AUTOHSCROLL
- CONTROL "",IDC_POLL_TIMER_SPIN,"msctls_updown32",UDS_SETBUDDYINT |
- UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS |
- UDS_HOTTRACK,125,123,11,12
- LTEXT "seconds",IDC_POLL_TIMER_S_L,138,126,82,12
- CONTROL "Allow auto-loading plugins into players (affect players with *)",
- IDC_CODE_INJECTION,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
- 3,142,282,11
+ CONTROL "Winamp (*)",IDC_WINAMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,44,265,11
+ CONTROL "Windows Media Player",IDC_WMP,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,58,265,11
+ CONTROL "iTunes",IDC_ITUNES,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,86,265,11
+ CONTROL "foobar2000 (need to install the plugin manually)",IDC_FOOBAR,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,100,265,11
+ CONTROL "Other players",IDC_OTHER,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,128,265,11
+ LTEXT "Ask for new info every",IDC_POLL_TIMER_L,3,155,87,12
+ EDITTEXT IDC_POLL_TIMER,97,154,34,13,ES_AUTOHSCROLL
+ CONTROL "",IDC_POLL_TIMER_SPIN,"msctls_updown32",UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_NOTHOUSANDS | UDS_HOTTRACK,125,152,11,12
+ LTEXT "seconds",IDC_POLL_TIMER_S_L,138,155,82,12
+ CONTROL "Allow auto-loading plugins into players (affect players with *)",IDC_CODE_INJECTION,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,3,171,282,11
+ CONTROL "Players with Windows Live Messanger support",IDC_WLM,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,72,265,11
+ CONTROL "mRadio plugin",IDC_MRADIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,20,114,265,11
END
IDD_FORMAT DIALOGEX 0, 0, 288, 221
-STYLE DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
EXSTYLE WS_EX_CONTROLPARENT
-FONT 8, "MS Shell Dlg"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
GROUPBOX " Listening to ",IDC_LISTENINGTO_G,3,8,282,125
LTEXT "Template:",IDC_TEMPLATE_L,11,22,55,10
@@ -117,10 +97,8 @@ BEGIN LTEXT "%genre% - Song genre",IDC_GENRE_L,148,75,129,8
LTEXT "%length% - Song length",IDC_LENGTH_L,11,87,129,8
LTEXT "%player% - Player name",IDC_PLAYER_L,148,87,129,8
- LTEXT "%type% - Media type (Music, Radio, Video, etc)",
- IDC_TYPE_L,11,99,265,8
- LTEXT "When variable not found, use:",IDC_UNKNOWN_L,11,117,108,
- 10
+ LTEXT "%type% - Media type (Music, Radio, Video, etc)",IDC_TYPE_L,11,99,265,8
+ LTEXT "When variable not found, use:",IDC_UNKNOWN_L,11,117,108,10
EDITTEXT IDC_UNKNOWN,122,114,152,13,ES_AUTOHSCROLL
GROUPBOX " XStatus ",IDC_XSTATUS_G,3,137,282,79
LTEXT "Title:",IDC_NAME_L,11,152,55,10
@@ -128,10 +106,8 @@ BEGIN LTEXT "Message:",IDC_MESSAGE_L,11,167,55,10
EDITTEXT IDC_XSTATUS_MESSAGE,72,165,202,13,ES_AUTOHSCROLL
LTEXT "Other Variables:",IDC_VARS2_L,11,183,58,8
- LTEXT "%listening% - Listening to info (as set above)",
- IDC_LISTENING_L,72,183,201,8
- LTEXT "When nothing is playing, replace %listening% with:",
- IDC_NOTHING_L,11,199,171,10
+ LTEXT "%listening% - Listening to info (as set above)",IDC_LISTENING_L,72,183,201,8
+ LTEXT "When nothing is playing, replace %listening% with:",IDC_NOTHING_L,11,199,171,10
EDITTEXT IDC_NOTHING,183,197,91,13,ES_AUTOHSCROLL
END
@@ -142,7 +118,7 @@ END //
#ifdef APSTUDIO_INVOKED
-GUIDELINES DESIGNINFO DISCARDABLE
+GUIDELINES DESIGNINFO
BEGIN
IDD_OPTIONS, DIALOG
BEGIN
@@ -176,8 +152,8 @@ END // Bitmap
//
-IDB_TTB_UP_DISABLED BITMAP DISCARDABLE "res\\ttb_disabled.bmp"
-IDB_TTB_UP_ENABLED BITMAP DISCARDABLE "res\\ttb_enabled.bmp"
+IDB_TTB_UP_DISABLED BITMAP "res\\ttb_disabled.bmp"
+IDB_TTB_UP_ENABLED BITMAP "res\\ttb_enabled.bmp"
/////////////////////////////////////////////////////////////////////////////
//
@@ -186,13 +162,13 @@ IDB_TTB_UP_ENABLED BITMAP DISCARDABLE "res\\ttb_enabled.bmp" // Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
-IDI_LISTENINGTO ICON DISCARDABLE "res\\listening_to.ico"
-#endif // English (U.S.) resources
+IDI_LISTENINGTO ICON "res\\listening_to.ico"
+#endif // Englisch (USA) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
-// English (Canada) resources
+// Englisch (Kanada) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENC)
#ifdef _WIN32
@@ -206,19 +182,19 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_CAN // TEXTINCLUDE
//
-1 TEXTINCLUDE DISCARDABLE
+1 TEXTINCLUDE
BEGIN
"resource.h\0"
END
-2 TEXTINCLUDE DISCARDABLE
+2 TEXTINCLUDE
BEGIN
"#include ""resource.h""\r\n"
"#include ""winresrc.h""\r\n"
"\0"
END
-3 TEXTINCLUDE DISCARDABLE
+3 TEXTINCLUDE
BEGIN
"\r\n"
"\0"
@@ -226,7 +202,7 @@ END #endif // APSTUDIO_INVOKED
-#endif // English (Canada) resources
+#endif // Englisch (Kanada) resources
/////////////////////////////////////////////////////////////////////////////
diff --git a/Plugins/listeningto/sdk/m_cluiframes.h b/Plugins/listeningto/sdk/m_cluiframes.h deleted file mode 100644 index bf6d565..0000000 --- a/Plugins/listeningto/sdk/m_cluiframes.h +++ /dev/null @@ -1,338 +0,0 @@ -/*
-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.
-*/
-
-/************************************************************************/
-/* Extra Image Column Support +0.5.0.0 */
-/************************************************************************/
-/*
- HINT: Common usage of Extra icons by modules
- Usage sequence is next:
- The Plugin have to be subscribed to ME_CLIST_EXTRA_LIST_REBUILD and
- ME_CLIST_EXTRA_IMAGE_APPLY notifications.
-
- During .._REBUILD Notification handle plugin should register required
- icons in CList internal list via MS_CLIST_EXTRA_ADD_ICON servise
- and should to keep returned icon indexes.
-
- Note: _REBUILD notification means that list was rebuilded and
- all previously registered icon indexes became invalid and can not be used.
-
- Note: After calling _ADD_ICON services the icon handle you provided is not
- need for extra images porpouses and have to be released by you in order
- to reduce GDI resources consumptions.
-
- Note: Don't forget that icon handle loaded by LoadIcon GDI function is
- shared and will be kept in memory till plugin unloading. So it is not
- better way to load icon. Please use appropriate Iconlib services.
-
- Note: The icon can be registered in Clist at any time.
-
- During .._ME_CLIST_EXTRA_IMAGE_APPLY the plugin has to call
- MS_CLIST_EXTRA_SET_ICON passing appropriate icon index for contact. This
- service can be called any time in order to change current extra image.
-
- ATTENTION: Currently Module support only 254 registered extra icons. The returned
- value 0xFF internally means 'No extra icon' so thry t register only realy required
- icons. The best solution - register not registered/invalidated icon just before
- setting of extra image.
-
- ATTENTION: Due to different module may use same extra icons slot - they will be conflicted.
- Please provide ability to end-user to change extra image slot to be used to show
- your plugin information.
-
-*/
-
-//Extra columns type.
-//column arranged in this way
-//
-// [statusicon] ContactName [WEB][ADV1][ADV2][SMS][EMAIL][PROTO][CLIENT]
-//
-#define EXTRA_ICON_EMAIL 1
-#define EXTRA_ICON_PROTO 2
-#define EXTRA_ICON_SMS 3
-#define EXTRA_ICON_ADV1 4
-#define EXTRA_ICON_ADV2 5
-#define EXTRA_ICON_WEB 6
-#define EXTRA_ICON_CLIENT 7
-#define EXTRA_ICON_VISMODE 8
-#define EXTRA_ICON_ADV3 9
-#define EXTRA_ICON_ADV4 10
-
-#define EXTRA_ICON_COUNT 10
-
-typedef struct
-{
- int cbSize; //must be sizeof(IconExtraColumn)
- int ColumnType;
- HANDLE hImage; //return value from MS_CLIST_EXTRA_ADD_ICON
-}IconExtraColumn,*pIconExtraColumn;
-
-//Set icon for contact at needed column
-//wparam=hContact
-//lparam=pIconExtraColumn
-//return 0 on success,-1 on failure
-//
-//See above for supported columns
-#define MS_CLIST_EXTRA_SET_ICON "CListFrames/SetIconForExraColumn"
-
-//Adding icon to extra image list.
-//Call this in ME_CLIST_EXTRA_LIST_REBUILD event
-//
-//wparam=hIcon
-//lparam=0
-//return hImage on success,-1 on failure
-#define MS_CLIST_EXTRA_ADD_ICON "CListFrames/AddIconToExtraImageList"
-
-#define ME_CLIST_EXTRA_LIST_REBUILD "CListFrames/OnExtraListRebuild"
-
-//called with wparam=hContact
-#define ME_CLIST_EXTRA_IMAGE_APPLY "CListFrames/OnExtraImageApply"
-
-//End of extra images header. TODO move it to separate m_extraimages.h file
-//Cause it has not any relationship to cluiframes engine
-
-
-/************************************************************************/
-/* CLUI Frames Support */
-/************************************************************************/
-
-// NOTE: Clui frames engine is in to be reconsructed..
-
-// Constants used bellow
-typedef struct tagCLISTFrame {
- DWORD cbSize;
- HWND hWnd ;
- HICON hIcon;
- int align; //al flags below
- union _tagMinSize{
- int height;
- int minSize; //the actual meaning depends from type of frame
- };
- int Flags; //F_flags below
- union {
- char *name; //frame window name indentifier (DO NOT TRANSLATE)
- wchar_t *wname;
- LPTSTR tname;
- };
- union {
- char *TBname; //titlebar & menu caption
- wchar_t *TBwname;
- LPTSTR TBtname;
- };
-} 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
-#define F_CANBEVERTICAL 64 //frames can be vertical
-#define F_CANNOTBEHORIZONTAL 128 //frames can NOT be horizontal F_CANBEVERTICAL have to be set
-#define F_NO_SUBCONTAINER 1024 //Support skining no subcontainer needed
-#define F_UNICODE 32768 //Use unicode text
-#ifdef _UNICODE
-# define F_TCHAR F_UNICODE
-#else
-# define F_TCHAR 0
-#endif
-
-// frame alignment
-#define alTop 0x00000001
-#define alBottom 0x00000002
-#define alClient 0x00000004 //only one alClient frame
-
-// since 0.7.0.20
-#define alLeft 0x00000011 // frame is vertical
-#define alRight 0x00000012
-
-#define alVertFrameMask 0x00000010
-
-#define FU_TBREDRAW 1 //redraw titlebar
-#define FU_FMREDRAW 2 //redraw Frame
-#define FU_FMPOS 4 //update Frame position
-
-#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 FO_FLOATING 0x000a //Change floating mode
-
-#define FO_UNICODETEXT 0x8000 // flag for FO_NAME,FO_TBNAME, FO_TBTIPNAME set/get lPAram as unicode wchar_t
-#ifdef _UNICODE
- #define FO_TCHAR FO_UNICODETEXT
-#else
- #define FO_TCHAR 0x0000
-#endif
-
-
-//////////////////////////////////////////////////////////////////////////
-//want show tooltip for statusbar
-//wparam=(char *)protocolname
-//lparam=0
-#define ME_CLIST_FRAMES_SB_SHOW_TOOLTIP "CListFrames/StatusBarShowToolTip"
-
-//////////////////////////////////////////////////////////////////////////
-//want hide tooltip for statusbar
-//wparam=lparam=0
-#define ME_CLIST_FRAMES_SB_HIDE_TOOLTIP "CListFrames/StatusBarHideToolTip"
-
-//////////////////////////////////////////////////////////////////////////
-//adds a frame window
-//wParam=(CLISTFrame*)
-//lParam=0
-//returns an integer, the frame id.
-#define MS_CLIST_FRAMES_ADDFRAME "CListFrames/AddFrame"
-
-//////////////////////////////////////////////////////////////////////////
-// remove frame. It destroy your window
-//
-#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"
-
-//////////////////////////////////////////////////////////////////////////
-//trigger border flags
-//wparam=frameid
-//lparam=0
-#define MS_CLIST_FRAMES_SETUNBORDER "CListFrame/SetUnBorder"
-
-//////////////////////////////////////////////////////////////////////////
-//redraws the frame
-//wParam=FrameId, -1 for all frames
-//lparam=FU_flags
-//returns a pointer to option, -1 on failure
-#define MS_CLIST_FRAMES_UPDATEFRAME "CListFrame/UpdateFrame"
-
-//////////////////////////////////////////////////////////////////////////
-//gets the frame options
-//(HIWORD)wParam=FrameId
-//(LOWORD)wParam=FO_flag
-//lParam=0
-//returns a pointer to option, -1 on failure
-#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"
-
-//////////////////////////////////////////////////////////////////////////
-//Frames related menu stuff
-//////////////////////////////////////////////////////////////////////////
-
-//////////////////////////////////////////////////////////////////////////
-//add a new item to the context frame menu
-//wParam=0
-//lParam=(LPARAM)(CLISTMENUITEM*)&mi
-//returns a handle to the new item
-//popupposition=frameid
-//contactowner=advanced parameter
-#define MS_CLIST_ADDCONTEXTFRAMEMENUITEM "CList/AddContextFrameMenuItem"
-
-//////////////////////////////////////////////////////////////////////////
-//remove a item from context frame menu
-//wParam=hMenuItem returned by MS_CLIST_ADDCONTACTMENUITEM
-//lParam=0
-//returns 0 on success, nonzero on failure
-#define MS_CLIST_REMOVECONTEXTFRAMEMENUITEM "CList/RemoveContextFrameMenuItem"
-
-//////////////////////////////////////////////////////////////////////////
-//builds the context menu for a frame
-//wparam=frameid
-//lParam=0
-//returns a HMENU on success, or NULL on failure
-#define MS_CLIST_MENUBUILDFRAMECONTEXT "CList/BuildContextFrameMenu"
-
-//////////////////////////////////////////////////////////////////////////
-// the frame menu is about to be built
-// wparam=frameid
-// lparam=
-// -1 for build from titlebar,
-// use
-// MS_CLIST_ADDCONTEXTFRAMEMENUITEM
-// MS_CLIST_REMOVECONTEXTFRAMEMENUITEM
-//
-// >0 for build in main menu,
-// must be popupname=lparam to place your items in right popup of main menu.
-// use
-// MS_CLIST_ADDMAINMENUITEM
-// MS_CLIST_REMOVEMAINMENUITEM
-//
-#define ME_CLIST_PREBUILDFRAMEMENU "CList/PreBuildFrameMenu"
-
-//////////////////////////////////////////////////////////////////////////
-//needed by cluiframes module to add frames menu to main menu.
-//it just calls NotifyEventHooks(hPreBuildFrameMenuEvent,wParam,lParam);
-#define MS_CLIST_FRAMEMENUNOTIFY "CList/ContextFrameMenuNotify"
diff --git a/Plugins/listeningto/sdk/m_extraicons.h b/Plugins/listeningto/sdk/m_extraicons.h new file mode 100644 index 0000000..1e86cb1 --- /dev/null +++ b/Plugins/listeningto/sdk/m_extraicons.h @@ -0,0 +1,182 @@ +/*
+ Copyright (C) 2009 Ricardo Pescuma Domenecci
+
+ This is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This 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 Library General Public
+ License along with this file; see the file license.txt. If
+ not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA.
+ */
+
+#ifndef __M_EXTRAICONS_H__
+#define __M_EXTRAICONS_H__
+
+
+/*
+
+There is 2 ways of registering with Extra Icons service:
+
+1. Using callbacks
+ This works similar to clist API. When you register you provide 2 callbacks, one to rebuild the icons
+and one to apply the icons for a contact.
+ In the RebuildIcons callback, all icons that will be used have to be registered calling
+MS_CLIST_EXTRA_ADD_ICON service. The value returned by this service has to be stored and used in the
+apply icons.
+ The ApplyIcons callback will be called for all the needed contacts. Inside it, you must call
+MS_EXTRAICON_SET_ICON to set the icon for the contact, sending the value returned by MS_CLIST_EXTRA_ADD_ICON
+as the hImage.
+
+2. Using icolib
+ In this case no callback is needed and the plugin just need to call MS_EXTRAICON_SET_ICON passing the
+icolib name in icoName when needed. If your plugin can have extra icons on startup, remember to do a loop
+over all contacts to set the initial icon.
+
+
+To register a new extra icon, you have to call MS_EXTRAICON_REGISTER passing the needed atributes.
+
+*/
+
+#define MIID_EXTRAICONSSERVICE { 0x62d80749, 0xf169, 0x4592, { 0xb4, 0x4d, 0x3d, 0xd6, 0xde, 0x9d, 0x50, 0xc5 } }
+
+
+#define EXTRAICON_TYPE_CALLBACK 0 // Similar to old clist callbacks, it fires 2 notifications
+#define EXTRAICON_TYPE_ICOLIB 1 // This extra icon will use only icons registered with icolib. No callbacks
+ // needed. Just call MS_EXTRAICON_SET_ICON passing the name of the extraicon to set one.
+
+
+typedef struct {
+ int cbSize;
+ int type; // One of EXTRAICON_TYPE_*
+ const char *name; // Internal name. More than one plugin can register extra icons with the same name
+ // if both have the same type. In this case, both will be handled as one.
+ // If the types are different the second one will be denied.
+ const char *description; // [Translated by plugin] Description to be used in GUI
+ const char *descIcon; // [Optional] Name of an icon registered with icolib to be used in GUI.
+
+ // If type == EXTRAICON_TYPE_CALLBACK this two must be set
+
+ // Callback to add icons to clist, calling MS_CLIST_EXTRA_ADD_ICON
+ // wParam=lParam=0
+ MIRANDAHOOK RebuildIcons;
+
+ // Callback to set the icon to clist, calling MS_CLIST_EXTRA_SET_ICON or MS_EXTRAICON_SET_ICON
+ // wParam = HANDLE hContact
+ // lParam = 0
+ MIRANDAHOOK ApplyIcon;
+
+ // Other optional callbacks
+
+ // [Optional] Callback called when extra icon was clicked
+ // wParam = HANDLE hContact
+ // lParam = int slot
+ // param = onClickParam
+ MIRANDAHOOKPARAM OnClick;
+
+ LPARAM onClickParam;
+
+} EXTRAICON_INFO;
+
+
+// Register an extra icon
+// wParam = (EXTRAICON_INFO *) Extra icon info
+// lParam = 0
+// Return: (HANDLE) id of extra icon on success, 0 on error
+#define MS_EXTRAICON_REGISTER "ExtraIcon/Register"
+
+
+typedef struct {
+ int cbSize;
+ HANDLE hExtraIcon; // Value returned by MS_EXTRAICON_REGISTER
+ HANDLE hContact; // Contact to set the extra icon
+ union { // The icon to be set. This depends on the type of the extra icon:
+ HANDLE hImage; // Value returned by MS_CLIST_EXTRA_ADD_ICON (if EXTRAICON_TYPE_CALLBACK)
+ const char *icoName; // Name of the icon registered with icolib (if EXTRAICON_TYPE_ICOLIB)
+ };
+} EXTRAICON;
+
+// Set an extra icon icon
+// wParam = (EXTRAICON *) Extra icon
+// Return: 0 on success
+#define MS_EXTRAICON_SET_ICON "ExtraIcon/SetIcon"
+
+
+
+#ifndef _NO_WRAPPERS
+#ifdef __cplusplus
+
+static HANDLE ExtraIcon_Register(const char *name, const char *description, const char *descIcon,
+ MIRANDAHOOK RebuildIcons,
+ MIRANDAHOOK ApplyIcon,
+ MIRANDAHOOKPARAM OnClick = NULL, LPARAM onClickParam = 0)
+{
+ if (!ServiceExists(MS_EXTRAICON_REGISTER))
+ return NULL;
+
+ EXTRAICON_INFO ei = {0};
+ ei.cbSize = sizeof(ei);
+ ei.type = EXTRAICON_TYPE_CALLBACK;
+ ei.name = name;
+ ei.description = description;
+ ei.descIcon = descIcon;
+ ei.RebuildIcons = RebuildIcons;
+ ei.ApplyIcon = ApplyIcon;
+ ei.OnClick = OnClick;
+ ei.onClickParam = onClickParam;
+
+ return (HANDLE) CallService(MS_EXTRAICON_REGISTER, (WPARAM) &ei, 0);
+}
+
+static HANDLE ExtraIcon_Register(const char *name, const char *description, const char *descIcon = NULL,
+ MIRANDAHOOKPARAM OnClick = NULL, LPARAM onClickParam = 0)
+{
+ if (!ServiceExists(MS_EXTRAICON_REGISTER))
+ return NULL;
+
+ EXTRAICON_INFO ei = {0};
+ ei.cbSize = sizeof(ei);
+ ei.type = EXTRAICON_TYPE_ICOLIB;
+ ei.name = name;
+ ei.description = description;
+ ei.descIcon = descIcon;
+ ei.OnClick = OnClick;
+ ei.onClickParam = onClickParam;
+
+ return (HANDLE) CallService(MS_EXTRAICON_REGISTER, (WPARAM) &ei, 0);
+}
+
+static int ExtraIcon_SetIcon(HANDLE hExtraIcon, HANDLE hContact, HANDLE hImage)
+{
+ EXTRAICON ei = {0};
+ ei.cbSize = sizeof(ei);
+ ei.hExtraIcon = hExtraIcon;
+ ei.hContact = hContact;
+ ei.hImage = hImage;
+
+ return CallService(MS_EXTRAICON_SET_ICON, (WPARAM) &ei, 0);
+}
+
+static int ExtraIcon_SetIcon(HANDLE hExtraIcon, HANDLE hContact, const char *icoName)
+{
+ EXTRAICON ei = {0};
+ ei.cbSize = sizeof(ei);
+ ei.hExtraIcon = hExtraIcon;
+ ei.hContact = hContact;
+ ei.icoName = icoName;
+
+ return CallService(MS_EXTRAICON_SET_ICON, (WPARAM) &ei, 0);
+}
+
+#endif
+#endif
+
+
+#endif // __M_EXTRAICONS_H__
diff --git a/Plugins/listeningto/sdk/m_metacontacts.h b/Plugins/listeningto/sdk/m_metacontacts.h index 1da12b9..9f348bd 100644 --- a/Plugins/listeningto/sdk/m_metacontacts.h +++ b/Plugins/listeningto/sdk/m_metacontacts.h @@ -23,6 +23,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #ifndef M_METACONTACTS_H__
#define M_METACONTACTS_H__ 1
+#ifndef MIID_METACONTACTS
+#define MIID_METACONTACTS {0xc0325019, 0xc1a7, 0x40f5, { 0x83, 0x65, 0x4f, 0x46, 0xbe, 0x21, 0x86, 0x3e}}
+#endif
+
//get the handle for a contact's parent metacontact
//wParam=(HANDLE)hSubContact
//lParam=0
diff --git a/Plugins/listeningto/sdk/m_music.h b/Plugins/listeningto/sdk/m_music.h index 4f10475..0246fab 100644 --- a/Plugins/listeningto/sdk/m_music.h +++ b/Plugins/listeningto/sdk/m_music.h @@ -4,74 +4,73 @@ #define MIID_WATRACK {0xfc6c81f4, 0x837e, 0x4430, {0x96, 0x01, 0xa0, 0xaa, 0x43, 0x17, 0x7a, 0xe3}}
typedef struct tSongInfoA {
- CHAR *artist;
- CHAR *title;
- CHAR *album;
- CHAR *genre;
- CHAR *comment;
- CHAR *year;
- CHAR *mfile; // media file
- int kbps;
- int khz;
- int channels;
- int track;
- int total; // music length
- int time; // elapsed time
- CHAR *wndtext; // window title
- CHAR *player; // player name
- int plyver; // player version
- HANDLE icon; // player icon
- int fsize; // media file size
- int vbr;
- int status; // player status: 0 - stopped; 1 - playing; 2 - paused
- HWND plwnd; // player window
- // video part
- int codec;
- int width;
- int height;
- int fps;
- __int64 date;
- CHAR *txtver;
- CHAR *lyric;
- CHAR *cover;
- int volume;
- CHAR *url;
+ CHAR* artist;
+ CHAR* title;
+ CHAR* album;
+ CHAR* genre;
+ CHAR* comment;
+ CHAR* year;
+ CHAR* mfile; // media file
+ DWORD kbps;
+ DWORD khz;
+ DWORD channels;
+ DWORD track;
+ DWORD total; // music length
+ DWORD time; // elapsed time
+ CHAR* wndtext; // window title
+ CHAR* player; // player name
+ DWORD plyver; // player version
+ HANDLE icon; // player icon
+ DWORD fsize; // media file size
+ DWORD vbr;
+ int status; // WAT_MES_* const
+ HWND plwnd; // player window
+ // video part
+ DWORD codec;
+ DWORD width;
+ DWORD height;
+ DWORD fps;
+ __int64 date;
+ CHAR* txtver;
+ CHAR* lyric;
+ CHAR* cover;
+ DWORD volume;
+ CHAR* url; // player homepage
} SONGINFOA, *LPSONGINFOA;
typedef struct tSongInfo {
- WCHAR *artist;
- WCHAR *title;
- WCHAR *album;
- WCHAR *genre;
- WCHAR *comment;
- WCHAR *year;
- WCHAR *mfile; // media file
- int kbps;
- int khz;
- int channels;
- int track;
- int total; // music length
- int time; // elapsed time
- WCHAR *wndtext; // window title
- WCHAR *player; // player name
- int plyver; // player version
- HANDLE icon; // player icon
- int fsize; // media file size
- int vbr;
- int status; // player status: 0 - stopped; 1 - playing; 2 - paused
- HWND plwnd; // player window
- // video part
- int codec;
- int width;
- int height;
- int fps;
- __int64 date;
- WCHAR txtver;
- // not implemented yet
- WCHAR *lyric;
- WCHAR *cover;
- int volume;
- WCHAR *url;
+ WCHAR* artist;
+ WCHAR* title;
+ WCHAR* album;
+ WCHAR* genre;
+ WCHAR* comment;
+ WCHAR* year;
+ WCHAR* mfile; // media file
+ DWORD kbps;
+ DWORD khz;
+ DWORD channels;
+ DWORD track;
+ DWORD total; // music length
+ DWORD time; // elapsed time
+ WCHAR* wndtext; // window title
+ WCHAR* player; // player name
+ DWORD* plyver; // player version
+ HANDLE icon; // player icon
+ DWORD fsize; // media file size
+ DWORD vbr;
+ int status; // WAT_MES_* const
+ HWND plwnd; // player window
+ // video part
+ DWORD codec;
+ DWORD width;
+ DWORD height;
+ DWORD fps;
+ __int64 date;
+ WCHAR* txtver;
+ WCHAR* lyric;
+ WCHAR* cover; // cover path
+ DWORD volume;
+ WCHAR* url; // player homepage
} SONGINFO, *LPSONGINFO;
#if defined(_UNICODE)
@@ -91,15 +90,17 @@ typedef struct tSongInfo { #define WAT_RES_DISABLED 1
// internal
#define WAT_RES_NEWFILE 3
+#define WAT_RES_NEWPLAYER 4
-#define WAT_PLS_NORMAL WAT_RES_OK
-#define WAT_PLS_NOMUSIC WAT_RES_DISABLED
-#define WAT_PLS_NOTFOUND WAT_RES_NOTFOUND
+// result for MS_WAT_GETMUSICINFO service
+#define WAT_PLS_NORMAL WAT_RES_OK
+#define WAT_PLS_NOMUSIC WAT_RES_DISABLED
+#define WAT_PLS_NOTFOUND WAT_RES_NOTFOUND
-#define WAT_INF_UNICODE 0
-#define WAT_INF_ANSI 1
-#define WAT_INF_UTF8 2
-#define WAT_INF_CHANGES 0x100
+#define WAT_INF_UNICODE 0
+#define WAT_INF_ANSI 1
+#define WAT_INF_UTF8 2
+#define WAT_INF_CHANGES 0x100
/*
wParam : WAT_INF_* constant
@@ -113,7 +114,6 @@ typedef struct tSongInfo { LPSONGINFO p;
PluginLink->CallService(MS_WAT_GETMUSICINFO,0,(DWORD)&p);
*/
-
#define MS_WAT_GETMUSICINFO "WATrack/GetMusicInfo"
/*
@@ -127,25 +127,38 @@ typedef struct tSongInfo { #define MS_WAT_GETFILEINFO "WATrack/GetFileInfo"
/*
- Get user's Music Info
+ wParam: encoding (WAT_INF_* consts, 0 = WAT_INF_UNICODE)
+ lParam: codepage (0 = ANSI)
+ Returns Global unicode SongInfo pointer or tranlated to Ansi/UTF8 structure
*/
-#define MS_WAT_GETCONTACTINFO = "WATrack/GetContactInfo"
-
-#define WAT_CTRL_PREV 1
-#define WAT_CTRL_PLAY 2
-#define WAT_CTRL_PAUSE 3
-#define WAT_CTRL_STOP 4
-#define WAT_CTRL_NEXT 5
-#define WAT_CTRL_VOLDN 6
-#define WAT_CTRL_VOLUP 7
-#define WAT_CTRL_SEEK 8 // lParam is new position (sec)
+#define MS_WAT_RETURNGLOBAL "WATrack/GetMainStructure"
+
+//!! DON'T CHANGE THESE VALUES!
+#define WAT_CTRL_FIRST 1
+
+#define WAT_CTRL_PREV 1
+#define WAT_CTRL_PLAY 2
+#define WAT_CTRL_PAUSE 3
+#define WAT_CTRL_STOP 4
+#define WAT_CTRL_NEXT 5
+#define WAT_CTRL_VOLDN 6
+#define WAT_CTRL_VOLUP 7
+#define WAT_CTRL_SEEK 8 // lParam is new position (sec)
+
+#define WAT_CTRL_LAST 8
+
/*
wParam: button code (WAT_CTRL_* const)
lParam: 0, or value (see WAT_CTRL_* const comments)
Affects: emulate player button pressing
returns: 0 if unsuccesful
*/
-#define MS_WAT_PRESSBUTTON "WATrack/PressButton"
+#define MS_WAT_PRESSBUTTON "WATrack/PressButton"
+
+/*
+ Get user's Music Info
+*/
+#define MS_WAT_GETCONTACTINFO "WATrack/GetContactInfo"
// ------------ Plugin/player status ------------
@@ -153,23 +166,28 @@ typedef struct tSongInfo { wParam: 1 - switch off plugin
0 - switch on plugin
-1 - switch plugin status
+ 2 - get plugin version
other - get plugin status
lParam: 0
Affects: Switch plugin status to enabled or disabled
returns: old plugin status, 0, if was enabled
*/
-
#define MS_WAT_PLUGINSTATUS "WATrack/PluginStatus"
+// ---------- events ------------
+
+/*ME_WAT_MODULELOADED
+ wParam: 0, lParam: 0
+*/
#define ME_WAT_MODULELOADED "WATrack/ModuleLoaded"
-#define WAT_EVENT_PLAYERSTATUS 1 // 0-normal; 1-no music (possibly stopped); 2-not found
-#define WAT_EVENT_NEWTRACK 2
-#define WAT_EVENT_PLUGINSTATUS 3 // 0-enabled; 1-dis.temporary; 2-dis.permanent
+#define WAT_EVENT_PLAYERSTATUS 1 //lParam: WAT_PLS_* const
+#define WAT_EVENT_NEWTRACK 2 //lParam: LPSONGINFO
+#define WAT_EVENT_PLUGINSTATUS 3 //lParam: 0-enabled; 1-dis.temporary; 2-dis.permanent
#define WAT_EVENT_NEWPLAYER 4 //
-#define WAT_EVENT_NEWTEMPLATE 5 // TM_* constant
+#define WAT_EVENT_NEWTEMPLATE 5 //lParam: TM_* constant
-/*
+/*ME_WAT_NEWSTATUS
Plugin or player status changed:
wParam: type of event (see above)
lParam: value
@@ -184,7 +202,6 @@ typedef struct tSongInfo { Affects: Show popup or Info window with current music information
note: Only Info window will be showed if Popup plugin disabled
*/
-
#define MS_WAT_SHOWMUSICINFO "WATrack/ShowMusicInfo"
// --------- Statistic (report) module -------------
@@ -214,35 +231,39 @@ typedef struct tSongInfo { // media file status
-#define WAT_MES_STOPPED 0
-#define WAT_MES_PLAYING 1
-#define WAT_MES_PAUSED 2
-#define WAT_MES_UNKNOWN -1
+#define WAT_MES_STOPPED 0
+#define WAT_MES_PLAYING 1
+#define WAT_MES_PAUSED 2
+#define WAT_MES_UNKNOWN -1
#define WAT_ACT_REGISTER 1
#define WAT_ACT_UNREGISTER 2
#define WAT_ACT_DISABLE 3
#define WAT_ACT_ENABLE 4
-#define WAT_ACT_GETSTATUS 5 // not found/enabled/disabled
+#define WAT_ACT_GETSTATUS 5 // not found/enabled/disabled
#define WAT_ACT_SETACTIVE 6
-#define WAT_ACT_REPLACE 0x10000 // can be combined with WAT_REGISTERFORMAT
+#define WAT_ACT_REPLACE 0x10000 // can be combined with WAT_REGISTERFORMAT
// flags
-#define WAT_OPT_DISABLED 0x0001 // format registered but disabled
-#define WAT_OPT_ONLYONE 0x0002 // format can't be overwriten
-#define WAT_OPT_PLAYERINFO 0x0004 // song info from player
-#define WAT_OPT_WINAMPAPI 0x0008 // Winamp API support
-#define WAT_OPT_CHECKTIME 0x0010 // check file time for changes
-#define WAT_OPT_VIDEO 0x0020 // only for format registering used
-#define WAT_OPT_LAST 0x0040 // (internal)
-#define WAT_OPT_FIRS 0x0080 // (internal)
-#define WAT_OPT_TEMPLATE 0x0100 // (internal)
-#define WAT_OPT_IMPLANTANT 0x0200 // use process implantation
-#define WAT_OPT_HASURL 0x0400 // (player registration) URL field present
-#define WAT_OPT_CHANGES 0x0800 // obtain only chaged values
- // (volume, status, window text, elapsed time)
-#define WAT_OPT_MULTITHREAD 0x8000 // Use multithread scan
-#define WAT_OPT_KEEPOLD 0x4000 // Keep Old opened file
+#define WAT_OPT_DISABLED 0x00001 // format registered but disabled
+#define WAT_OPT_ONLYONE 0x00002 // format can't be overwriten
+#define WAT_OPT_PLAYERINFO 0x00004 // song info from player
+#define WAT_OPT_WINAMPAPI 0x00008 // Winamp API support
+#define WAT_OPT_CHECKTIME 0x00010 // check file time for changes
+#define WAT_OPT_VIDEO 0x00020 // only for format registering used
+#define WAT_OPT_LAST 0x00040 // (internal)
+#define WAT_OPT_FIRST 0x00080 // (internal)
+#define WAT_OPT_TEMPLATE 0x00100 // (internal)
+#define WAT_OPT_IMPLANTANT 0x00200 // use process implantation
+#define WAT_OPT_HASURL 0x00400 // (player registration) URL field present
+#define WAT_OPT_CHANGES 0x00800 // obtain only chaged values
+ // (volume, status, window text, elapsed time)
+#define WAT_OPT_APPCOMMAND 0x01000 // Special (multimedia) key support
+#define WAT_OPT_CHECKALL 0x02000 // Check all players
+#define WAT_OPT_KEEPOLD 0x04000 // Keep Old opened file
+#define WAT_OPT_MULTITHREAD 0x08000 // Use multithread scan
+#define WAT_OPT_SINGLEINST 0x10000 // Single player instance
+#define WAT_OPT_PLAYERDATA 0x20000 // (internal) to obtain player data
typedef BOOL (__cdecl *LPREADFORMATPROC)(LPSONGINFO Info);
@@ -250,7 +271,7 @@ typedef BOOL (__cdecl *LPREADFORMATPROC)(LPSONGINFO Info); typedef struct tMusicFormat {
LPREADFORMATPROC proc;
CHAR ext[8];
- int flags;
+ UINT flags;
} MUSICFORMAT, *LPMUSICFORMAT;
/*
@@ -259,37 +280,42 @@ typedef struct tMusicFormat { else - pointer to extension string (ANSI)
returns: see result codes
*/
-
#define MS_WAT_FORMAT "WATrack/Format"
/*
wParam - pointer to SONGINFO structure (plwind field must be initialized)
lParam - flags
+ Affects: trying to fill SongInfo using Winamp API
*/
-
#define MS_WAT_WINAMPINFO "WATrack/WinampInfo"
/*
wParam: window
lParam: LoWord - command; HiWord - value
*/
-
#define MS_WAT_WINAMPCOMMAND "WATrack/WinampCommand"
-typedef WCHAR (__cdecl *LPNAMEPROC)();
-typedef HWND (__cdecl *LPCHECKPROC)(int flags);
-typedef int (__cdecl *LPINFOPROC)(LPSONGINFO Info, int flags);
-typedef int (__cdecl *LPCOMMANDPROC)(int command, int value);
+typedef int (__cdecl *LPINITPROC) ();
+typedef int (__cdecl *LPDEINITPROC) ();
+typedef int (__cdecl *LPSTATUSPROC) (HWND wnd);
+typedef WCHAR (__cdecl *LPNAMEPROC) (HWND wnd, int flags);
+typedef HWND (__cdecl *LPCHECKPROC) (HWND wnd,int flags);
+typedef int (__cdecl *LPINFOPROC) (LPSONGINFO Info, int flags);
+typedef int (__cdecl *LPCOMMANDPROC)(HWND wnd, int command, int value);
typedef struct tPlayerCell {
- CHAR *Desc;
- int flags;
- HICON Icon; // can be 0. for registration only
- LPCHECKPROC Check; // check player
- LPNAMEPROC GetName; // can be NULL. get media filename
- LPINFOPROC GetInfo; // can be NULL. get info from player
- LPCOMMANDPROC Command; // can be NULL. send command to player
- CHAR *URL; // only if WAT_OPT_HASURL flag present
+ CHAR* Desc; // Short player name
+ UINT flags;
+ HICON Icon; // can be 0. for registration only
+ LPINITPROC Init; // LPINITPROC; can be NULL. initialize any data
+ LPDEINITPROC DeInit; // LPDEINITPROC; can be NULL. finalize player processing
+ LPCHECKPROC Check; // check player
+ LPSTATUSPROC GetStatus; // tStatusProc; can be NULL. get player status
+ LPNAMEPROC GetName; // can be NULL. get media filename
+ LPINFOPROC GetInfo; // can be NULL. get info from player
+ LPCOMMANDPROC Command; // can be NULL. send command to player
+ CHAR* URL; // only if WAT_OPT_HASURL flag present
+ WCHAR* Notes; // any tips, notes etc for this player
} PLAYERCELL, *LPPLAYERCELL;
/*
@@ -297,27 +323,44 @@ typedef struct tPlayerCell { lParam: pointer to PLAYERCELL if wParam = WAT_ACT_REGISTER,
else - pointer to player description string (ANSI)
returns: player window handle or value>0 if found
+ note: If you use GetName or GetInfo field, please, do not return empty
+ filename even when mediafile is remote!
*/
-
#define MS_WAT_PLAYER "WATrack/Player"
-// --------- Templates ----------
+// --------- Last FM ---------
+
+/*
+ Toggle LastFM scrobbling status
+ wParam,lParam=0
+ Returns: previous state
+*/
+#define MS_WAT_LASTFM "WATrack/LastFM"
-//templates
-#define TM_MESSAGE 0 // privat message
-#define TM_CHANNEL 1 // chat
-#define TM_STAT_TITLE 2 // xstatus title
-#define TM_STAT_TEXT 3 // [x]status text
-#define TM_POPTITLE 4 // popup title
-#define TM_POPTEXT 5 // popup text
-#define TM_EXPORT 6 // other app
-#define TM_FRAMEINFO 7 // frame
+/*
+ Get Info based on currently played song
+ wParam: pLastFMInfo
+ lParam: int language (first 2 bytes - 2-letters language code)
+*/
+typedef struct tLastFMInfo {
+ UINT request; // 0 - artist, 1 - album, 2 - track
+ WCHAR* artist; // artist
+ WCHAR* album; // album or similar artists for Artist info request
+ WCHAR* title; // track title
+ WCHAR* tags; // tags
+ WCHAR* info; // artist bio or wiki article
+ WCHAR* image; // photo/cover link
+ WCHAR* similar;
+ WCHAR* release;
+ UINT trknum;
+}PLASTFMINFO, *LPLASTFMINFO;
+
+#define MS_WAT_LASTFMINFO "WATrack/LastFMInfo"
-#define TM_SETTEXT 0x100 // only for service
-#define TM_GETTEXT 0 // only for service
+// --------- Templates ----------
/*
- wParam: not used
+ wParam: 0 (standard Info) or pSongInfo
lParam: Unicode template
returns: New Unicode (replaced) string
*/
@@ -334,12 +377,10 @@ typedef struct tPlayerCell { #define EVENTTYPE_WAT_MESSAGE 9604
/*
- wParam: Template type (TM_* constants).
- lParam: Template string for template setup, or not used
- returns: pointer to statically allocated string (DON'T free!)
- note: Template set if wParam with TM_SETTEXT combined. If used for
- Protocol-dependent templates, used only for default templates.
+ wParam: 0 or parent window
+ lParam: 0
+ note: Shows Macro help window with edit aliases ability
*/
-#define MS_WAT_TEMPLATE = "WATrack/Templates"
+#define MS_WAT_MACROHELP "WATrack/MacroHelp"
#endif
diff --git a/Plugins/listeningto/sdk/m_radio.h b/Plugins/listeningto/sdk/m_radio.h new file mode 100644 index 0000000..53381ab --- /dev/null +++ b/Plugins/listeningto/sdk/m_radio.h @@ -0,0 +1,131 @@ +#ifndef M_RADIO
+#define M_RADIO
+
+#ifndef MIID_MRADIO
+#define MIID_MRADIO {0xeebc474c, 0xb0ad, 0x470f, {0x99, 0xa8, 0x9d, 0xd9, 0x21, 0x0c, 0xe2, 0x33}}
+#endif
+
+// command codes
+#define MRC_STOP 0
+#define MRC_PLAY 1 // lParam is radio contact handle
+#define MRC_PAUSE 2
+#define MRC_PREV 3
+#define MRC_NEXT 4
+#define MRC_STATUS 5 // lParam is RD_STATUS_* value (RD_STATUS_GET only now)
+#define MRC_SEEK 6 // lParam is value in sec; -1 mean obtain current position
+#define MRC_RECORD 7 // lParam is 0 - switch; 1 - on; 2 - off
+
+/* RD_STATUS_* constands
+ [C]used as command [E]used as event
+ [-]do not use [+]used as command and event
+*/
+#define RD_STATUS_NOSTATION 0 // [E] no active station found
+#define RD_STATUS_PLAYING 1 // [-] media is playing
+#define RD_STATUS_PAUSED 2 // [E] media is paused
+#define RD_STATUS_STOPPED 3 // [E] media is stopped (only for playlists)
+#define RD_STATUS_CONNECT 4 // [E] plugin try to connect to the station
+#define RD_STATUS_ABORT 5 // [E] plugin want to abort while try to connect
+#define RD_STATUS_GET 6 // [C] to get current status
+// next is for events only +0.0.2.1
+#define RD_STATUS_POSITION 107 // [E] position was changed
+#define RD_STATUS_MUTED 108 // [E] Mute/Unmute command was sent
+#define RD_STATUS_RECORD 109 // [E] "Record" action called
+#define RD_STATUS_NEWTRACK 110 // [E] new track/station
+#define RD_STATUS_NEWTAG 111 // [E] tag data changed
+#define RD_STATUS_NEWSTATION 112 // [E] new station (contact)
+
+/*
+ Open radio Options, if Main Options window not opened
+ wParam: 0
+ lParam: 0
+*/
+#define MS_RADIO_SETTINGS "mRadio/Settings"
+/*
+ Switch 'record' mode
+ +0.0.1.x (deprecatet) !!!
+ wParam: 0 - switch mode; else - get record status
+ lParam: 0
+ +0.0.2.x
+ wParam: not used
+ lParam: 0 - switch mode; else - get record status
+ Return: Current status: 1 - record is ON, 0 - OFF
+*/
+#define MS_RADIO_RECORD "mRadio/REC"
+
+/*
+ Set current radio volume
+ wParam: volume (0-100)
+ lParam: must be 0
+ Return: previous value
+*/
+#define MS_RADIO_SETVOL "mRadio/SetVol"
+
+/*
+ Get current radio volume
+ wParam: 0
+ lParam: 0
+ Return: volime value (negative if muted)
+*/
+#define MS_RADIO_GETVOL "mRadio/GetVol"
+
+/*
+ wParam,lParam = 0
+*/
+#define MS_RADIO_MUTE "mRadio/Mute"
+
+/*
+ Send command to mRadio
+ wParam: command (see MRC_* constant)
+ lParam: value (usually 0)
+ Return: return value (now for status only)
+*/
+#define MS_RADIO_COMMAND "mRadio/Command"
+
+/*
+ Starting or stopping radio station
+ wParam: Radio contact handle (lParam=0) or Station name
+ lParam: 0 - wParam is handle, 1 - ANSI, else - unicode
+*/
+#define MS_RADIO_PLAYSTOP "mRadio/PlayStop"
+
+/* +0.0.1.4
+ wParam: station handle (0 - all)
+ lParam: nil (through dialog, radio.ini by default) or ansi string with filename
+ Return: exported stations amount
+*/
+#define MS_RADIO_EXPORT "mRadio/Export"
+
+/* +0.0.1.4
+ wParam: group to import radio or 0
+ lParam: nil (through dialog, radio.ini by default) or ansi string with filename
+ Return: imported stations amount
+*/
+#define MS_RADIO_IMPORT "mRadio/Import"
+
+/*
+ wParam: 0 - switch; 1 - switch on; -1 - switch off
+ lParam: 0
+ Return: last state (0 - was off, 1 - was on)
+*/
+#define MS_RADIO_EQONOFF "mRadio/EqOnOff"
+
+//////event/////
+
+/* +0.0.1.4 (deprecatet only used in 0.0.1.4+)
+ wParam:
+ MRC_STOP , LParam - 0
+ MRC_PLAY , LParam - url
+ MRC_PAUSE , LParam - 0 (pause) / 1 (play)
+ MRC_SEEK , LParam - lParam is value in sec
+ MRC_RECORD , LParam - 0 (stop) / 1 (record)
+
+ +0.0.2.1 new event constants !!
+ wParam: RD_STATUS_* (see constants)
+ RD_STATUS_NEWSTATION , lParam: contact handle
+ RD_STATUS_NEWTRACK , lParam: URL (unicode)
+ RD_STATUS_PAUSED , lParam: 1 - pause, 0 - continued
+ RD_STATUS_RECORD , lParam: 0 - off, 1 - on
+*/
+#define ME_RADIO_STATUS "mRadio/Status"
+
+#endif
diff --git a/Plugins/listeningto/sdk/m_toptoolbar.h b/Plugins/listeningto/sdk/m_toptoolbar.h index 6b1a018..5628f68 100644 --- a/Plugins/listeningto/sdk/m_toptoolbar.h +++ b/Plugins/listeningto/sdk/m_toptoolbar.h @@ -28,6 +28,24 @@ typedef struct { } TTBButton, * lpTTBButton;
+typedef struct {
+ int cbSize;
+ HBITMAP hbBitmapUp;
+ HBITMAP hbBitmapDown;
+ char *pszServiceUp;
+ char *pszServiceDown;
+ DWORD dwFlags;
+ LPARAM lParamUp;
+ WPARAM wParamUp;
+ LPARAM lParamDown;
+ WPARAM wParamDown;
+ char *name;
+ HICON hIconUp,hIconDn;
+ char *tooltipUp;
+ char *tooltipDn;
+
+} TTBButtonV2, * lpTTBButtonV2;
+
//=== EVENTS ===
/*
toptoolbar/moduleloaded event
diff --git a/Plugins/listeningto/sdk/m_updater.h b/Plugins/listeningto/sdk/m_updater.h index 371b743..488d372 100644 --- a/Plugins/listeningto/sdk/m_updater.h +++ b/Plugins/listeningto/sdk/m_updater.h @@ -63,6 +63,10 @@ __inline static char *CreateVersionStringPlugin(PLUGININFO *pluginInfo, char *bu return CreateVersionString(pluginInfo->version, buf);
}
+__inline static char *CreateVersionStringPluginEx(PLUGININFOEX *pluginInfo, char *buf) {
+ return CreateVersionString(pluginInfo->version, buf);
+}
+
// register the 'easy' way - use this method if you have no beta URL and the plugin is on the miranda file listing
// NOTE: the plugin version string on the file listing must be the string version of the version in pluginInfo (i.e. 0.0.0.1,
diff --git a/Plugins/listeningto/sdk/m_variables.h b/Plugins/listeningto/sdk/m_variables.h index 3f13c96..2109cc9 100644 --- a/Plugins/listeningto/sdk/m_variables.h +++ b/Plugins/listeningto/sdk/m_variables.h @@ -28,6 +28,10 @@ #include <m_button.h>
#endif
+#ifndef SIZEOF
+#include <win2k.h>
+#endif
+
// --------------------------------------------------------------------------
// Memory management
// --------------------------------------------------------------------------
@@ -168,6 +172,32 @@ __inline static TCHAR *variables_parse(TCHAR *tszFormat, TCHAR *tszExtraText, HA return (TCHAR *)CallService(MS_VARS_FORMATSTRING, (WPARAM)&fi, 0);
}
+
+__inline static char *variables_parse_char(char *szFormat, char *szExtraText, HANDLE hContact)
+{
+ FORMATINFO fi = {0};
+
+ fi.cbSize = sizeof(fi);
+ fi.szFormat = szFormat;
+ fi.szExtraText = szExtraText;
+ fi.hContact = hContact;
+ fi.flags = 0;
+
+ return (char *) CallService(MS_VARS_FORMATSTRING, (WPARAM)&fi, 0);
+}
+__inline static wchar_t *variables_parse_wchar(wchar_t *wszFormat, wchar_t *wszExtraText, HANDLE hContact)
+{
+ FORMATINFO fi = {0};
+
+ fi.cbSize = sizeof(fi);
+ fi.wszFormat = wszFormat;
+ fi.wszExtraText = wszExtraText;
+ fi.hContact = hContact;
+ fi.flags = FIF_UNICODE;
+
+ return (wchar_t *) CallService(MS_VARS_FORMATSTRING, (WPARAM)&fi, 0);
+}
+
#endif
__inline static TCHAR *variables_parse_ex(TCHAR *tszFormat, TCHAR *tszExtraText, HANDLE hContact,
@@ -578,41 +608,38 @@ __inline static int variables_skin_helpbutton(HWND hwndDlg, UINT uIDButton) { hIcon = NULL;
res = 0;
- if (ServiceExists(MS_VARS_GETSKINITEM)) {
+ if (ServiceExists(MS_VARS_GETSKINITEM))
hIcon = (HICON)CallService(MS_VARS_GETSKINITEM, 0, (LPARAM)VSI_HELPICON);
- }
- GetClassName(GetDlgItem(hwndDlg, uIDButton), tszClass, sizeof(tszClass));
+
+ GetClassName(GetDlgItem(hwndDlg, uIDButton), tszClass, SIZEOF(tszClass));
if (!_tcscmp(tszClass, _T("Button"))) {
if (hIcon != NULL) {
- SetWindowLong(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE, GetWindowLong(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE)|BS_ICON);
+ SetWindowLongPtr(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE, GetWindowLongPtr(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE)|BS_ICON);
SendMessage(GetDlgItem(hwndDlg, uIDButton), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hIcon);
}
else {
- SetWindowLong(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE, GetWindowLong(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE)&~BS_ICON);
+ SetWindowLongPtr(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE, GetWindowLongPtr(GetDlgItem(hwndDlg, uIDButton), GWL_STYLE)&~BS_ICON);
SetDlgItemText(hwndDlg, uIDButton, _T("V"));
}
}
else if (!_tcscmp(tszClass, MIRANDABUTTONCLASS)) {
if (hIcon != NULL) {
- char *szTipInfo;
+ char *szTipInfo = NULL;
SendMessage(GetDlgItem(hwndDlg, uIDButton), BM_SETIMAGE, (WPARAM)IMAGE_ICON, (LPARAM)hIcon);
- if (ServiceExists(MS_VARS_GETSKINITEM)) {
+ if (ServiceExists(MS_VARS_GETSKINITEM))
szTipInfo = (char *)CallService(MS_VARS_GETSKINITEM, 0, (LPARAM)VSI_HELPTIPTEXT);
- }
- if (szTipInfo == NULL) {
+
+ if (szTipInfo == NULL)
szTipInfo = Translate("Open String Formatting Help");
- }
+
SendMessage(GetDlgItem(hwndDlg, uIDButton), BUTTONADDTOOLTIP, (WPARAM)szTipInfo, 0);
SendDlgItemMessage(hwndDlg, uIDButton, BUTTONSETASFLATBTN, 0, 0);
}
- else {
- SetDlgItemText(hwndDlg, uIDButton, _T("V"));
- }
- }
- else {
- res = -1;
+ else SetDlgItemText(hwndDlg, uIDButton, _T("V"));
}
+ else res = -1;
+
ShowWindow(GetDlgItem(hwndDlg, uIDButton), ServiceExists(MS_VARS_FORMATSTRING));
return res;
diff --git a/Plugins/listeningto/version.h b/Plugins/listeningto/version.h new file mode 100644 index 0000000..8ac6bf8 --- /dev/null +++ b/Plugins/listeningto/version.h @@ -0,0 +1,95 @@ +/*
+ListeningTo plugin for Miranda IM
+==========================================================================
+Copyright (C) 2005-2011 Ricardo Pescuma Domenecci
+ (C) 2010-2011 Merlin_de
+
+PRE-CONDITION to use this code under the GNU General Public License:
+ 1. you do not build another Miranda IM plugin with the code without written permission
+ of the autor (peace for the project).
+ 2. you do not publish copies of the code in other Miranda IM-related code repositories.
+ This project is already hosted in a SVN and you are welcome to become a contributing member.
+ 3. you do not create listeningTo-derivatives based on this code for the Miranda IM project.
+ (feel free to do this for another project e.g. foobar)
+ 4. you do not distribute any kind of self-compiled binary of this plugin (we want continuity
+ for the plugin users, who should know that they use the original) you can compile this plugin
+ for your own needs, friends, but not for a whole branch of people (e.g. miranda plugin pack).
+ 5. This isn't free beer. If your jurisdiction (country) does not accept
+ GNU General Public License, as a whole, you have no rights to the software
+ until you sign a private contract with its author. !!!
+ 6. you always put these notes and copyright notice at the beginning of your code.
+==========================================================================
+
+in case you accept the pre-condition,
+this 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 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.
+*/
+
+#ifndef __M_VERSION_H__
+#define __M_VERSION_H__
+
+#define __MAJOR_VERSION 0
+#define __MINOR_VERSION 3
+#define __RELEASE_NUM 1 // due to beta builders
+#define __BUILD_NUM 0 // due to beta builders
+
+#define __STRINGIFY_(x) #x
+#define __STRINGIFY(x) __STRINGIFY_(x)
+
+#define __FILEVERSION_STRING __MAJOR_VERSION,__MINOR_VERSION,__RELEASE_NUM,__BUILD_NUM
+#define __FILEVERSION_STRING_DOTS __MAJOR_VERSION.__MINOR_VERSION.__RELEASE_NUM.__BUILD_NUM
+
+#define __VERSION_STRING __STRINGIFY(__FILEVERSION_STRING_DOTS)
+#define __VERSION_DWORD PLUGIN_MAKE_VERSION(__MAJOR_VERSION, __MINOR_VERSION, __RELEASE_NUM, __BUILD_NUM)
+
+#define __SHORT_DESC "Handle listening information to/for contacts"
+#define __DESC ""
+#define __AUTHOR "Ricardo Pescuma Domenecci, Merlin_de"
+#define __AUTHOREMAIL ""
+#define __COPYRIGHT "© 2006-2010 Ricardo Pescuma Domenecci"
+#define __AUTHORWEB "http://pescuma.org/miranda/listeningto"
+#ifndef MIID_LISTENINGTO
+#define MIID_LISTENINGTO { 0x1fc1efa, 0xaa9f, 0x461b, { 0x92, 0x69, 0xaf, 0x66, 0x6b, 0x89, 0x31, 0xee } }
+#endif
+
+
+#ifdef _WIN64 //TODO get file listing details for x64 (and update #define)
+ #ifdef _UNICODE
+ #define __UPDATER_DOWNLOAD_ID ????
+ #define __PLUGIN_DISPLAY_NAME "ListeningTo (Unicode x64)" //ensure plugin shortName matches file listing! <title>ListeningTo (Unicode x64)</title>
+ #define __PLUGIN_FILENAME "listeningtoW.dll"
+ #define __UPDATER_BETA_URL "http://pescuma.org/miranda/listeningto64.zip"
+//#define __UPDATER_UID { 0x614e00b5, 0x2571, 0x46b5, { 0xb2, 0x1d, 0xed, 0xaf, 0xa4, 0xa9, 0xa2, 0x4b } } // {614E00B5-2571-46b5-B21D-EDAFA4A9A24B}
+#endif
+#else
+ #ifdef _UNICODE
+ #define __UPDATER_DOWNLOAD_ID 3693
+ #define __PLUGIN_DISPLAY_NAME "ListeningTo (Unicode)" //ensure plugin shortName matches file listing! <title>ListeningTo (Unicode)</title>
+ #define __PLUGIN_FILENAME "listeningtoW.dll"
+ #define __UPDATER_BETA_URL "http://pescuma.org/miranda/listeningtoW.zip"
+//#define __UPDATER_UID { 0xf981f3f5, 0x35a, 0x444f, { 0x98, 0x92, 0xca, 0x72, 0x2c, 0x19, 0x5a, 0xda } } // {F981F3F5-035A-444f-9892-CA722C195ADA}
+ #else
+ #define __UPDATER_DOWNLOAD_ID 3692
+ #define __PLUGIN_DISPLAY_NAME "ListeningTo (Ansi)" //ensure plugin shortName matches file listing! <title>ListeningTo (Ansi)</title>
+ #define __PLUGIN_FILENAME "listeningto.dll"
+ #define __UPDATER_BETA_URL "http://pescuma.org/miranda/listeningto.zip"
+//#define __UPDATER_UID { 0xa4a8ff7a, 0xc48a, 0x4d2a, { 0xb5, 0xa9, 0x46, 0x46, 0x84, 0x43, 0x26, 0x3d } } // {A4A8FF7A-C48A-4d2a-B5A9-46468443263D}
+ #endif
+#endif
+#define __UPDATER_BETA_VERPRE "ListeningTo "
+#define __UPDATER_BETA_VERURL "http://pescuma.org/miranda/listeningto_version.txt"
+#define __UPDATER_BETA_CHLOG "http://pescuma.org/miranda/listeningto#Changelog"
+
+#endif // __M_VERSION_H__
diff --git a/Plugins/listeningto/version.rc b/Plugins/listeningto/version.rc new file mode 100644 index 0000000..af012b9 --- /dev/null +++ b/Plugins/listeningto/version.rc @@ -0,0 +1,63 @@ +// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+#include "version.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "winresrc.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1252)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION __FILEVERSION_STRING
+ PRODUCTVERSION __FILEVERSION_STRING
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "000004b0"
+ BEGIN
+ VALUE "Author", __AUTHOR
+ VALUE "E-Mail", __AUTHOREMAIL
+ VALUE "Homepage", __AUTHORWEB
+ VALUE "FileDescription", __SHORT_DESC
+ VALUE "FileVersion", __VERSION_STRING
+ VALUE "LegalCopyright", __COPYRIGHT
+ VALUE "ProductName", __PLUGIN_DISPLAY_NAME
+ VALUE "ProductVersion", __VERSION_STRING
+ VALUE "InternalName", __PLUGIN_DISPLAY_NAME
+ VALUE "OriginalFilename", __PLUGIN_FILENAME
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x0, 1200
+ END
+END
+/////////////////////////////////////////////////////////////////////////////
|