Skip to content
Browse files

v1.0 - initial commit

  • Loading branch information...
0 parents commit 55b009bc0a0ae2f5d820c5fe530b6b6d2069169f @Chronial committed Jan 11, 2012
Showing with 668 additions and 0 deletions.
  1. +51 −0 .gitignore
  2. +87 −0 config.cpp
  3. +206 −0 foo_trackpos.cpp
  4. +9 −0 foo_trackpos.h
  5. +108 −0 foo_trackpos.rc
  6. +72 −0 foo_trackpos.sln
  7. +107 −0 foo_trackpos.vcproj
  8. +4 −0 readme.txt
  9. +24 −0 resource.h
51 .gitignore
@@ -0,0 +1,51 @@
+#OS junk files
+[Tt]humbs.db
+*.DS_Store
+
+#Visual Studio files
+*.[Oo]bj
+*.exe
+*.pdb
+*.user
+*.aps
+*.pch
+*.vspscc
+*.vssscc
+*_i.c
+*_p.c
+*.ncb
+*.suo
+*.tlb
+*.tlh
+*.bak
+*.[Cc]ache
+*.ilk
+*.log
+*.lib
+*.sbr
+*.sdf
+ipch/
+obj/
+[Bb]in
+[Dd]ebug*/
+[Rr]elease*/
+Ankh.NoLoad
+
+#InstallShield
+[Ss]ingle[Ii]mage/
+[Dd][Vv][Dd]-5/
+[Ii]nterm/
+
+#Tooling
+_ReSharper*/
+*.resharper
+[Tt]est[Rr]esult*
+
+#Project files
+[Bb]uild/
+
+#Subversion files
+.svn
+
+# Office Temp Files
+~$*
87 config.cpp
@@ -0,0 +1,87 @@
+#include "foo_trackpos.h"
+#include "resource.h"
+
+extern cfg_bool cfgMovePlaylistContext;
+extern cfg_bool cfgMovePlaylistExists;
+extern cfg_bool cfgFocus;
+extern cfg_bool cfgEmptyQueue;
+extern cfg_bool cfgEnqueueOnLock;
+extern cfg_bool cfgSetPlaybackOrder;
+extern cfg_bool cfgNoPlayPlace;
+
+struct {
+ int id;
+ cfg_bool *var;
+} bool_var_map[] =
+{
+ { IDC_EMPTY_QUEUE, &cfgEmptyQueue },
+ { IDC_FOCUS, &cfgFocus },
+ { IDC_MOVE_PLAYLIST_EXIST, &cfgMovePlaylistExists },
+ { IDC_MOVE_PLAYLIST_CONTEXT, &cfgMovePlaylistContext },
+ { IDC_LOCK_ENQUEUE, &cfgEnqueueOnLock },
+ { IDC_PLAYBACK_ORDER, &cfgSetPlaybackOrder },
+ { IDC_NOPLAY_PLACE, &cfgNoPlayPlace },
+};
+
+class pref_page : public preferences_page
+{
+ static BOOL CALLBACK dialog_proc( HWND wnd, UINT msg, WPARAM wp, LPARAM lp ){
+ if( msg == WM_INITDIALOG){
+ int n, m;
+ m = tabsize( bool_var_map );
+ // Setup ALL check boxes
+ for ( n = 0; n < m; n++ )
+ {
+ CheckDlgButton( wnd, bool_var_map[n].id, (bool_var_map[n].var->get_value()) ? BST_CHECKED : BST_UNCHECKED ) ;
+ }
+ } else if ( msg == WM_COMMAND){
+ // Handle all the booleans in bool_var_map
+ if ( wp >> 16 == BN_CLICKED )
+ {
+ int button = wp & 0xffff;
+ int m = tabsize( bool_var_map );
+ int n;
+
+ for ( n = 0; n < m; n++ )
+ {
+ if ( bool_var_map[n].id == button )
+ {
+ bool val = ( BST_CHECKED == IsDlgButtonChecked( wnd, bool_var_map[n].id ) );
+ (*bool_var_map[n].var) = val;
+ return false;
+ }
+ }
+ }
+ }
+ return false;
+ }
+
+ virtual HWND create(HWND parent){
+ return uCreateDialog( IDD_CONFIG, parent, dialog_proc );
+ }
+
+ virtual const char * get_name(){
+ return "Track Positioner";
+ }
+
+ virtual GUID get_guid(){
+ // {2A1FF559-732D-4dc9-9580-3F257FD3C54F}
+ static const GUID guid_preferences =
+ { 0x2a1ff559, 0x732d, 0x4dc9, { 0x95, 0x80, 0x3f, 0x25, 0x7f, 0xd3, 0xc5, 0x4f } };
+
+ return guid_preferences;
+ }
+
+ virtual GUID get_parent_guid(){
+ return preferences_page::guid_tools;
+ }
+
+ //! Queries whether this page supports "reset page" feature.
+ virtual bool reset_query(){
+ return false;
+ }
+ virtual void reset(){
+ }
+};
+
+static service_factory_single_t<pref_page> g_pref;
206 foo_trackpos.cpp
@@ -0,0 +1,206 @@
+#include "foo_trackpos.h"
+
+#define VERSION "1.0"
+
+DECLARE_COMPONENT_VERSION( "Track Positioner", VERSION,
+ "This compoment allows you to place tracks in the playlist after the current playing Track\n"
+ "by Chronial (Christian Fersch)\n"
+ "\n"
+ "Version: " VERSION "\n"
+ "Compiled: " __DATE__ " - " __TIME__ )
+
+// Settings
+
+// {87C514D4-776B-4ed2-9CBB-E4AD52C40707}
+static const GUID guid_cfgMovePlaylistContext = { 0x87c514d4, 0x776b, 0x4ed2, { 0x9c, 0xbb, 0xe4, 0xad, 0x52, 0xc4, 0x7, 0x7 } };
+cfg_bool cfgMovePlaylistContext (guid_cfgMovePlaylistContext, true);
+
+// {53E78C2B-D357-40a5-A070-93CCFEA08217}
+static const GUID guid_cfgMovePlaylistExists = { 0x53e78c2b, 0xd357, 0x40a5, { 0xa0, 0x70, 0x93, 0xcc, 0xfe, 0xa0, 0x82, 0x17 } };
+cfg_bool cfgMovePlaylistExists (guid_cfgMovePlaylistExists, false);
+
+// {74A30E17-F2C6-465d-94BA-97EADBB352B0}
+static const GUID guid_cfgFocus = { 0x74a30e17, 0xf2c6, 0x465d, { 0x94, 0xba, 0x97, 0xea, 0xdb, 0xb3, 0x52, 0xb0 } };
+cfg_bool cfgFocus (guid_cfgFocus, true);
+
+// {E5A09D5D-2742-4102-9A37-14EF626552A4}
+static const GUID guid_cfgEmptyQueue = { 0xe5a09d5d, 0x2742, 0x4102, { 0x9a, 0x37, 0x14, 0xef, 0x62, 0x65, 0x52, 0xa4 } };
+cfg_bool cfgEmptyQueue (guid_cfgEmptyQueue,true);
+
+// {ECD7510C-63C5-465c-822C-4054252FA391}
+static const GUID guid_cfgEnqueueOnLock = { 0xecd7510c, 0x63c5, 0x465c, { 0x82, 0x2c, 0x40, 0x54, 0x25, 0x2f, 0xa3, 0x91 } };
+cfg_bool cfgEnqueueOnLock (guid_cfgEnqueueOnLock,true);
+
+// {D1EE91FE-CFEF-4425-95DA-485691DD54B3}
+static const GUID guid_cfgSetPlaybackOrder = { 0xd1ee91fe, 0xcfef, 0x4425, { 0x95, 0xda, 0x48, 0x56, 0x91, 0xdd, 0x54, 0xb3 } };
+cfg_bool cfgSetPlaybackOrder (guid_cfgSetPlaybackOrder, true);
+
+// {8079575C-9728-4b2d-892B-8A0D9F54713B}
+static const GUID guid_cfgNoPlayPlace = { 0x8079575c, 0x9728, 0x4b2d, { 0x89, 0x2b, 0x8a, 0xd, 0x9f, 0x54, 0x71, 0x3b } };
+cfg_bool cfgNoPlayPlace (guid_cfgNoPlayPlace, true);
+
+char * guidToSource (GUID guid){
+ char * out = new char[100];
+ sprintf_s(out,100, "{ 0x%x, 0x%x, 0x%x, { 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x, 0x%x } }",
+ guid.Data1, guid.Data2, guid.Data3,
+ (int)guid.Data4[0], (int)guid.Data4[1], (int)guid.Data4[2], (int)guid.Data4[3],
+ (int)guid.Data4[4], (int)guid.Data4[5], (int)guid.Data4[6], (int)guid.Data4[7]);
+ return out;
+}
+
+bool getCurrentLocation(t_size * playlist, t_size * trackindex){
+ static_api_ptr_t<playlist_manager> pm;
+ if (!pm->get_playing_item_location(playlist,trackindex)){
+ if (!cfgNoPlayPlace)
+ return false;
+ *trackindex = pm->activeplaylist_get_focus_item();
+ if (*trackindex == ~0){
+ *trackindex = 0;
+ }
+ *playlist = pm->get_active_playlist();
+ if (*playlist == ~0)
+ return false;
+ }
+ return true;
+}
+
+void placeAfterCurrent(const pfc::list_base_const_t<metadb_handle_ptr> & p_data, bool playlistCalled){
+ static_api_ptr_t<playlist_manager> pm;
+ t_size playingList, playingIndex;
+ if (!getCurrentLocation(&playingList,&playingIndex))
+ return;
+ bool wasQueued = false;
+ pfc::list_base_const_t<metadb_handle_ptr> const * insertItems = 0;
+ t_size playlistLength = pm->playlist_get_item_count(playingList);
+ bit_array_bittable moveMask(playlistLength);
+ t_size moveCount = 0;
+
+ pm->playlist_undo_backup(playingList);
+
+ if (playlistCalled && (cfgMovePlaylistContext || cfgMovePlaylistExists)&& (playingList == pm->get_active_playlist())){
+ pm->playlist_set_selection_single(playingList,playingIndex,false);
+ pm->activeplaylist_get_selection_mask(moveMask);
+ moveCount = pm->activeplaylist_get_selection_count(~0);
+ } else {
+ if (cfgMovePlaylistExists){
+ pfc::list_t<metadb_handle_ptr> listContent;
+ bit_array_bittable deleteMask(playlistLength);
+ pm->playlist_get_all_items(playingList,listContent);
+ for (int i=0; i < p_data.get_count(); i++){
+ metadb_handle_ptr item = p_data.get_item(i);
+ for (int j=0; j < listContent.get_count(); j++){
+ if (listContent.get_item(j) == item && j != playingIndex){
+ deleteMask.set(j,true);
+ }
+ }
+ }
+ pm->playlist_remove_items(playingList,deleteMask);
+ getCurrentLocation(&playingList,&playingIndex);
+ playlistLength = pm->playlist_get_item_count(playingList);
+ }
+ insertItems = &p_data;
+ }
+
+ if (moveCount > 0){
+ t_size * newOrder = new t_size[playlistLength];
+ int delta = 0;
+ t_size * toInsert = new t_size[moveCount];
+ unsigned int n = 0;
+ int insertPos = -1;
+ for ( int i=0; i < playlistLength; i++ ){
+ if (!moveMask.get(i)){
+ newOrder[i + delta] = i;
+ if (i == playingIndex){
+ playingIndex = i + delta; // we need this to focus the track later.
+ // can do this as delta will be <= 0 when we reach playingIndex so i == playingIndex won't be true again
+ insertPos = i + delta + 1;
+ for (int j = 0; j < n; j++){
+ newOrder[insertPos++] = toInsert[j];
+ }
+ delta += moveCount;
+ }
+ } else if (insertPos == -1){
+ toInsert[n++] = i;
+ delta--;
+ } else {
+ newOrder[insertPos++] = i;
+ delta--;
+ }
+ }
+ if(!pm->playlist_reorder_items(playingList,newOrder,playlistLength)){
+ if (cfgEnqueueOnLock){
+ for ( int i=0; i < playlistLength; i++ ){
+ if (moveMask.get(i)){
+ metadb_handle_ptr toQueue;
+ pm->playlist_get_item_handle(toQueue,playingList,i);
+ pm->queue_add_item(toQueue);
+ }
+ }
+ }
+ wasQueued = true;
+ }
+ delete[] newOrder;
+ delete[] toInsert;
+ }
+ if (insertItems != 0 && insertItems->get_count() > 0){
+ bit_array_val * selection;
+ if (playingList == pm->get_active_playlist()){
+ pm->playlist_clear_selection(playingList);
+ selection = new bit_array_val(true);
+ } else {
+ selection = new bit_array_val(false);
+ }
+ if (pm->playlist_insert_items(playingList,playingIndex+1,*insertItems,*selection) == -1){
+ if (cfgEnqueueOnLock){
+ for ( int i=0; i < insertItems->get_count(); i++ ){
+ pm->queue_add_item(insertItems->get_item(i));
+ }
+ }
+ wasQueued = true;
+ }
+ delete selection;
+ }
+ if (cfgFocus && (playingList == pm->get_active_playlist()) && !wasQueued){
+ pm->playlist_set_focus_item(playingList,playingIndex+1);
+ }
+ if (cfgEmptyQueue && !wasQueued)
+ pm->queue_flush();
+ if (cfgSetPlaybackOrder && !wasQueued){
+ static const GUID guid_playbackOrder_default = { 0xbfc61179, 0x49ad, 0x4e95, { 0x8d, 0x60, 0xa2, 0x27, 0x6, 0x48, 0x55, 0x5 } };
+ static const GUID guid_playbackOrder_repeatPlaylist = { 0x681cc6ea, 0x60ae, 0x4bf9, { 0x91, 0x3b, 0xbb, 0x5f, 0x4e, 0x86, 0x4f, 0x2a } };
+ //static const GUID guid_playbackOrder_repeatTrack = { 0x4bf4b280, 0xbb4, 0x4dd0, { 0x8e, 0x84, 0x37, 0xc3, 0x20, 0x9c, 0x3d, 0xa2 } };
+ GUID activeOrder = pm->playback_order_get_guid(pm->playback_order_get_active());
+ if (activeOrder != guid_playbackOrder_default && activeOrder != guid_playbackOrder_repeatPlaylist){
+ for (int i=0; i < pm->playback_order_get_count(); i++){
+ if (pm->playback_order_get_guid(i) == guid_playbackOrder_default){
+ pm->playback_order_set_active(i);
+ }
+ }
+ }
+ }
+}
+
+class my_contextmenu : public contextmenu_item_simple {
+ virtual unsigned get_num_items(){
+ return 1;
+ };
+ virtual void get_item_name(unsigned p_index,pfc::string_base & p_out){
+ p_out = "Place After Current Playing";
+ };
+ virtual void get_item_default_path(unsigned p_index,pfc::string_base & p_out){
+ p_out = "";
+ };
+ virtual void context_command(unsigned p_index,const pfc::list_base_const_t<metadb_handle_ptr> & p_data,const GUID& p_caller){
+ placeAfterCurrent(p_data,(p_caller == this->caller_playlist));
+ };
+ virtual GUID get_item_guid(unsigned p_index){
+ // {b5889b2b-6d8e-4932-82ed-d20a7a54be5d}
+ static const GUID guid_contextAddAfterPlaying = { 0xb5889b2b, 0x6d8e, 0x4932, { 0x82, 0xed, 0xd2, 0xa, 0x7a, 0x54, 0xbe, 0x5d } };
+ return guid_contextAddAfterPlaying;
+ }
+ virtual bool get_item_description(unsigned p_index,pfc::string_base & p_out){
+ p_out = "Places the selected song in the playlist after the currently playling song";
+ return true;
+ }
+};
+static contextmenu_item_factory_t< my_contextmenu > foo_contextmenu;
9 foo_trackpos.h
@@ -0,0 +1,9 @@
+#include "../_sdk/foobar2000/SDK/foobar2000.h"
+#include "../_sdk/foobar2000/helpers/helpers.h"
+#pragma once
+#ifndef _FOO_TRACKPOS_H_
+#define _FOO_TRACKPOS_H_
+
+
+
+#endif //_FOO_TRACKPOS_H_
108 foo_trackpos.rc
@@ -0,0 +1,108 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include "afxres.h"
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Deutsch (Deutschland) resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
+#ifdef _WIN32
+LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include ""afxres.h""\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_CONFIG DIALOGEX 0, 0, 326, 314
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_SYSMENU
+FONT 8, "MS Shell Dlg", 400, 0, 0x1
+BEGIN
+ CONTROL "Empty Queue when ""Place after current"" is used",IDC_EMPTY_QUEUE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,7,170,10
+ CONTROL "Focus tracks after moving/copying",IDC_FOCUS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,19,126,10
+ CONTROL "...if ""place after current"" is used from playlist context menu",IDC_MOVE_PLAYLIST_CONTEXT,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,81,206,10
+ GROUPBOX "Move files instead of copying...",IDC_STATIC,8,70,311,40
+ CONTROL "...if the tracks already exists in the current playlist",IDC_MOVE_PLAYLIST_EXIST,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,94,178,10
+ CONTROL "Enqueue Tracks, if playing playlist is locked",IDC_LOCK_ENQUEUE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,31,153,10
+ CONTROL "Set Playback Order to default, if incompatile Playback Order is active (eg Shuffle)",IDC_PLAYBACK_ORDER,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,43,275,10
+ CONTROL "Place after focused track, if no track is playing or playing track has no location",IDC_NOPLAY_PLACE,
+ "Button",BS_AUTOCHECKBOX | WS_TABSTOP,8,55,265,10
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_CONFIG, DIALOG
+ BEGIN
+ LEFTMARGIN, 8
+ RIGHTMARGIN, 319
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 307
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+#endif // Deutsch (Deutschland) resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
72 foo_trackpos.sln
@@ -0,0 +1,72 @@
+
+Microsoft Visual Studio Solution File, Format Version 10.00
+# Visual Studio 2008
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "foo_trackpos", "foo_trackpos.vcproj", "{E6B1B2D9-953B-4110-9AA5-268652FBE35F}"
+ ProjectSection(ProjectDependencies) = postProject
+ {E8091321-D79D-4575-86EF-064EA1A4A20D} = {E8091321-D79D-4575-86EF-064EA1A4A20D}
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F} = {EE47764E-A202-4F85-A767-ABDAB4AFF35F}
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081} = {71AD2674-065B-48F5-B8B0-E1F9D3892081}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "foobar2000_component_client", "..\_sdk\foobar2000\foobar2000_component_client\foobar2000_component_client.vcproj", "{71AD2674-065B-48F5-B8B0-E1F9D3892081}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "foobar2000_sdk_helpers", "..\_sdk\foobar2000\helpers\foobar2000_sdk_helpers.vcproj", "{EE47764E-A202-4F85-A767-ABDAB4AFF35F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "foobar2000_SDK", "..\_sdk\foobar2000\SDK\foobar2000_SDK.vcproj", "{E8091321-D79D-4575-86EF-064EA1A4A20D}"
+ ProjectSection(ProjectDependencies) = postProject
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C} = {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pfc", "..\_sdk\pfc\pfc.vcproj", "{EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E6B1B2D9-953B-4110-9AA5-268652FBE35F}.Debug|Win32.ActiveCfg = Release|Win32
+ {E6B1B2D9-953B-4110-9AA5-268652FBE35F}.Debug|Win32.Build.0 = Release|Win32
+ {E6B1B2D9-953B-4110-9AA5-268652FBE35F}.Debug|x64.ActiveCfg = Release|Win32
+ {E6B1B2D9-953B-4110-9AA5-268652FBE35F}.Release|Win32.ActiveCfg = Release|Win32
+ {E6B1B2D9-953B-4110-9AA5-268652FBE35F}.Release|Win32.Build.0 = Release|Win32
+ {E6B1B2D9-953B-4110-9AA5-268652FBE35F}.Release|x64.ActiveCfg = Release|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Debug|Win32.ActiveCfg = Debug|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Debug|Win32.Build.0 = Debug|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Debug|x64.ActiveCfg = Debug|x64
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Debug|x64.Build.0 = Debug|x64
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Release|Win32.ActiveCfg = Release|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Release|Win32.Build.0 = Release|Win32
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Release|x64.ActiveCfg = Release|x64
+ {71AD2674-065B-48F5-B8B0-E1F9D3892081}.Release|x64.Build.0 = Release|x64
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Debug|Win32.Build.0 = Debug|Win32
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Debug|x64.ActiveCfg = Debug|x64
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Debug|x64.Build.0 = Debug|x64
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Release|Win32.ActiveCfg = Release|Win32
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Release|Win32.Build.0 = Release|Win32
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Release|x64.ActiveCfg = Release|x64
+ {EE47764E-A202-4F85-A767-ABDAB4AFF35F}.Release|x64.Build.0 = Release|x64
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Debug|Win32.ActiveCfg = Debug|Win32
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Debug|Win32.Build.0 = Debug|Win32
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Debug|x64.ActiveCfg = Debug|x64
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Debug|x64.Build.0 = Debug|x64
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Release|Win32.ActiveCfg = Release|Win32
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Release|Win32.Build.0 = Release|Win32
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Release|x64.ActiveCfg = Release|x64
+ {E8091321-D79D-4575-86EF-064EA1A4A20D}.Release|x64.Build.0 = Release|x64
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Debug|Win32.ActiveCfg = Debug|Win32
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Debug|Win32.Build.0 = Debug|Win32
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Debug|x64.ActiveCfg = Debug|x64
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Debug|x64.Build.0 = Debug|x64
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Release|Win32.ActiveCfg = Release|Win32
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Release|Win32.Build.0 = Release|Win32
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Release|x64.ActiveCfg = Release|x64
+ {EBFFFB4E-261D-44D3-B89C-957B31A0BF9C}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
107 foo_trackpos.vcproj
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="foo_trackpos"
+ ProjectGUID="{E6B1B2D9-953B-4110-9AA5-268652FBE35F}"
+ RootNamespace="foo_trackpos"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)"
+ IntermediateDirectory="$(ConfigurationName)"
+ ConfigurationType="2"
+ InheritedPropertySheets="..\Foobar Component.vsprops"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <File
+ RelativePath=".\config.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\foo_trackpos.cpp"
+ >
+ </File>
+ <File
+ RelativePath=".\foo_trackpos.h"
+ >
+ </File>
+ <File
+ RelativePath=".\foo_trackpos.rc"
+ >
+ </File>
+ <File
+ RelativePath=".\resource.h"
+ >
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
4 readme.txt
@@ -0,0 +1,4 @@
+Building This Project:
+
+This project was last build using the foobar2000 0.9 SDK. Compatibilty with newer SDKs is not known, but likely.
+The SDK is expected to be found in ../_sdk/foobar2000 and ../_sdk/pfc.
24 resource.h
@@ -0,0 +1,24 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by foo_trackpos.rc
+//
+#define IDD_CONFIG 101
+#define IDC_EMPTY_QUEUE 1001
+#define IDC_FOCUS 1002
+#define IDC_MOVE_PLAYLIST_CONTEXT 1003
+#define IDC_MOVE_PLAYLIST_EXIST 1004
+#define IDC_LOCK_ENQUEUE 1005
+#define IDC_PLAYBACK_ORDER 1006
+#define IDC_NOPLAY_INSERT 1007
+#define IDC_NOPLAY_PLACE 1007
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 102
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1006
+#define _APS_NEXT_SYMED_VALUE 101
+#endif
+#endif

0 comments on commit 55b009b

Please sign in to comment.
Something went wrong with that request. Please try again.