Mercurial > foo_out_sdl
comparison foosdk/sdk/foobar2000/SDK/track_property.h @ 1:20d02a178406 default tip
*: check in everything else
yay
| author | Paper <paper@tflc.us> |
|---|---|
| date | Mon, 05 Jan 2026 02:15:46 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 0:e9bb126753e7 | 1:20d02a178406 |
|---|---|
| 1 #pragma once | |
| 2 | |
| 3 #include "tracks.h" | |
| 4 | |
| 5 class track_property_provider_v5_info_source; | |
| 6 class track_property_provider_v3_info_source; | |
| 7 | |
| 8 //! Callback interface for track_property_provider::enumerate_properties(). | |
| 9 class NOVTABLE track_property_callback { | |
| 10 public: | |
| 11 //! Sets a property list entry to display. Called by track_property_provider::enumerate_properties() implementation. | |
| 12 //! @param p_group Name of group to put the entry in, case-sensitive. Note that non-standard groups are sorted alphabetically. | |
| 13 //! @param p_sortpriority Sort priority of the property inside its group (smaller value means earlier in the list), pass 0 if you don't care (alphabetic order by name used when more than one item has same priority). | |
| 14 //! @param p_name Name of the property. | |
| 15 //! @param p_value Value of the property. | |
| 16 virtual void set_property(const char * p_group,double p_sortpriority,const char * p_name,const char * p_value) = 0; | |
| 17 protected: | |
| 18 track_property_callback() {} | |
| 19 ~track_property_callback() {} | |
| 20 track_property_callback(track_property_callback const &) {}; | |
| 21 void operator=(track_property_callback const &) {}; | |
| 22 }; | |
| 23 | |
| 24 //! Extended version of track_property_callback | |
| 25 class NOVTABLE track_property_callback_v2 : public track_property_callback { | |
| 26 public: | |
| 27 //! Returns a boolean value indicating whether the specified group is wanted; can be used to suppress expensive processing of information that will not be actually shown. \n | |
| 28 //! See also set_property() p_group parameter. | |
| 29 virtual bool is_group_wanted(const char * p_group) = 0; | |
| 30 protected: | |
| 31 ~track_property_callback_v2() {} | |
| 32 }; | |
| 33 | |
| 34 //! \since 1.3 | |
| 35 class NOVTABLE track_property_provider_v3_info_source { | |
| 36 public: | |
| 37 virtual trackInfoContainer::ptr get_info(size_t index) = 0; | |
| 38 | |
| 39 protected: | |
| 40 track_property_provider_v3_info_source() {} | |
| 41 ~track_property_provider_v3_info_source() {} | |
| 42 track_property_provider_v3_info_source( const track_property_provider_v3_info_source & ) {}; | |
| 43 void operator=( const track_property_provider_v3_info_source & ) {}; | |
| 44 }; | |
| 45 | |
| 46 //! Service for adding custom entries in "Properties" tab of the properties dialog. | |
| 47 class NOVTABLE track_property_provider : public service_base { | |
| 48 public: | |
| 49 //! Enumerates properties of specified track list. | |
| 50 //! @param p_tracks List of tracks to enumerate properties on. | |
| 51 //! @param p_out Callback interface receiving enumerated properties. | |
| 52 virtual void enumerate_properties(trackListRef p_tracks, track_property_callback & p_out) = 0; | |
| 53 //! Returns whether specified tech info filed is processed by our service and should not be displayed among unknown fields. | |
| 54 //! @param p_name Name of tech info field being queried. | |
| 55 //! @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. | |
| 56 virtual bool is_our_tech_info(const char * p_name) = 0; | |
| 57 | |
| 58 | |
| 59 //! Helper; calls modern versions of this API where appropriate. | |
| 60 //! @param items List of tracks to enumerate properties on. | |
| 61 //! @param info Callback object to fetch info from. Pass null to use a generic implementation querying the metadb. | |
| 62 //! @param callback Callback interface receiving enumerated properties. | |
| 63 //! @param abort The aborter for this operation. | |
| 64 void enumerate_properties_helper(trackListRef items, track_property_provider_v3_info_source * info, track_property_callback_v2 & callback, abort_callback & abort); | |
| 65 void enumerate_properties_helper(trackListRef items, track_property_provider_v5_info_source* info, track_property_callback_v2& callback, abort_callback& abort); | |
| 66 void enumerate_properties_helper(trackListRef items, std::nullptr_t, track_property_callback_v2& callback, abort_callback& abort); | |
| 67 | |
| 68 FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(track_property_provider); | |
| 69 }; | |
| 70 | |
| 71 class NOVTABLE track_property_provider_v2 : public track_property_provider { | |
| 72 FB2K_MAKE_SERVICE_INTERFACE(track_property_provider_v2,track_property_provider) | |
| 73 public: | |
| 74 virtual void enumerate_properties_v2(trackListRef p_tracks, track_property_callback_v2 & p_out) = 0; | |
| 75 }; | |
| 76 | |
| 77 | |
| 78 //! \since 1.3 | |
| 79 class NOVTABLE track_property_provider_v3 : public track_property_provider_v2 { | |
| 80 FB2K_MAKE_SERVICE_INTERFACE(track_property_provider_v3,track_property_provider_v2) | |
| 81 public: | |
| 82 virtual void enumerate_properties_v3(trackListRef items, track_property_provider_v3_info_source & info, track_property_callback_v2 & callback) = 0; | |
| 83 | |
| 84 void enumerate_properties(trackListRef p_tracks, track_property_callback & p_out) override; | |
| 85 void enumerate_properties_v2(trackListRef p_tracks, track_property_callback_v2 & p_out) override; | |
| 86 }; | |
| 87 | |
| 88 template<typename T> | |
| 89 class track_property_provider_factory_t : public service_factory_single_t<T> {}; | |
| 90 | |
| 91 //! \since 1.5 | |
| 92 //! Adds abortability on top of track_property_provider_v3 interface. \n | |
| 93 //! The previous revisions of this API were only legal to call from the main thread. \n | |
| 94 //! track_property_provider_v4 implementers should make NO ASSUMPTIONS about the thread they are in. \n | |
| 95 //! Implementing track_property_provider_v4 declares your class as safe to call from any thread. \n | |
| 96 //! If called via enumerate_properties_v4() method or off-main-thread, the implementation can assume the info source object to be thread-safe. | |
| 97 class NOVTABLE track_property_provider_v4 : public track_property_provider_v3 { | |
| 98 FB2K_MAKE_SERVICE_INTERFACE(track_property_provider_v4, track_property_provider_v3 ); | |
| 99 public: | |
| 100 void enumerate_properties_v3(trackListRef items, track_property_provider_v3_info_source & info, track_property_callback_v2 & callback) override; | |
| 101 | |
| 102 virtual void enumerate_properties_v4(trackListRef items, track_property_provider_v3_info_source & info, track_property_callback_v2 & callback, abort_callback & abort) = 0; | |
| 103 }; | |
| 104 | |
| 105 //! \since 2.0 | |
| 106 //! Allows metadb v2 info records to be handed over transparently. | |
| 107 class NOVTABLE track_property_provider_v5_info_source { | |
| 108 public: | |
| 109 virtual metadb_v2_rec_t get_info(size_t index) = 0; | |
| 110 }; | |
| 111 | |
| 112 //! \since 2.0 | |
| 113 //! Allows metadb v2 info records to be handed over transparently. | |
| 114 class NOVTABLE track_property_provider_v5 : public track_property_provider_v4 { | |
| 115 FB2K_MAKE_SERVICE_INTERFACE(track_property_provider_v5, track_property_provider_v4); | |
| 116 public: | |
| 117 void enumerate_properties_v4(trackListRef items, track_property_provider_v3_info_source& info, track_property_callback_v2& callback, abort_callback& abort) override; | |
| 118 | |
| 119 virtual void enumerate_properties_v5(trackListRef items, track_property_provider_v5_info_source& info, track_property_callback_v2& callback, abort_callback& abort) = 0; | |
| 120 }; | |
| 121 | |
| 122 class track_property_provider_v5_info_source_impl : public track_property_provider_v5_info_source { | |
| 123 public: | |
| 124 track_property_provider_v5_info_source_impl(trackListRef items, abort_callback &a); | |
| 125 metadb_v2_rec_t get_info(size_t index) override; | |
| 126 private: | |
| 127 pfc::array_t< metadb_v2_rec_t > m_infos; | |
| 128 #if FOOBAR2000_TARGET_VERSION < 81 | |
| 129 metadb_handle_list m_tracks; | |
| 130 #endif | |
| 131 }; |
