advconfig.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 class NOVTABLE advconfig_entry : public service_base {
00005 public:
00006         virtual void get_name(pfc::string_base & p_out) = 0;
00007         virtual GUID get_guid() = 0;
00008         virtual GUID get_parent() = 0;
00009         virtual void reset() = 0;
00010         virtual double get_sort_priority() = 0;
00011 
00012         static bool g_find(service_ptr_t<advconfig_entry>& out, const GUID & id) {
00013                 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;
00014         }
00015 
00016         static const GUID guid_root;
00017         static const GUID guid_branch_tagging,guid_branch_decoding,guid_branch_tools,guid_branch_playback,guid_branch_display;
00018 
00019         FB2K_MAKE_SERVICE_INTERFACE_ENTRYPOINT(advconfig_entry);
00020 };
00021 
00024 class NOVTABLE advconfig_branch : public advconfig_entry {
00025 public:
00026         FB2K_MAKE_SERVICE_INTERFACE(advconfig_branch,advconfig_entry);
00027 };
00028 
00032 class NOVTABLE advconfig_entry_checkbox : public advconfig_entry {
00033 public:
00034         virtual bool get_state() = 0;
00035         virtual void set_state(bool p_state) = 0;
00036         virtual bool is_radio() = 0;
00037 
00038         FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_checkbox,advconfig_entry);
00039 };
00040 
00043 class NOVTABLE advconfig_entry_string : public advconfig_entry {
00044 public:
00045         virtual void get_state(pfc::string_base & p_out) = 0;
00046         virtual void set_state(const char * p_string,t_size p_length = infinite) = 0;
00047         virtual t_uint32 get_flags() = 0;
00048 
00049         enum {
00050                 flag_is_integer         = 1 << 0, 
00051                 flag_is_signed          = 1 << 1,
00052         };
00053 
00054         FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_string,advconfig_entry);
00055 };
00056 
00057 
00060 class advconfig_branch_impl : public advconfig_branch {
00061 public:
00062         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) {}
00063         void get_name(pfc::string_base & p_out) {p_out = m_name;}
00064         GUID get_guid() {return m_guid;}
00065         GUID get_parent() {return m_parent;}
00066         void reset() {}
00067         double get_sort_priority() {return m_priority;}
00068 private:
00069         pfc::string8 m_name;
00070         GUID m_guid,m_parent;
00071         const double m_priority;
00072 };
00073 
00076 template<bool p_is_radio = false>
00077 class advconfig_entry_checkbox_impl : public advconfig_entry_checkbox {
00078 public:
00079         advconfig_entry_checkbox_impl(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,bool p_initialstate)
00080                 : m_name(p_name), m_initialstate(p_initialstate), m_state(p_guid,p_initialstate), m_parent(p_parent), m_priority(p_priority) {}
00081         
00082         void get_name(pfc::string_base & p_out) {p_out = m_name;}
00083         GUID get_guid() {return m_state.get_guid();}
00084         GUID get_parent() {return m_parent;}
00085         void reset() {m_state = m_initialstate;}
00086         bool get_state() {return m_state;}
00087         void set_state(bool p_state) {m_state = p_state;}
00088         bool is_radio() {return p_is_radio;}
00089         double get_sort_priority() {return m_priority;}
00090 private:
00091         pfc::string8 m_name;
00092         const bool m_initialstate;
00093         cfg_bool m_state;
00094         GUID m_parent;
00095         const double m_priority;
00096 };
00097 
00100 class advconfig_branch_factory : public service_factory_single_t<advconfig_branch_impl> {
00101 public:
00102         advconfig_branch_factory(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority)
00103                 : service_factory_single_t<advconfig_branch_impl>(p_name,p_guid,p_parent,p_priority) {}
00104 };
00105 
00108 template<bool p_is_radio>
00109 class advconfig_checkbox_factory_t : public service_factory_single_t<advconfig_entry_checkbox_impl<p_is_radio> > {
00110 public:
00111         advconfig_checkbox_factory_t(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,bool p_initialstate) 
00112                 : service_factory_single_t<advconfig_entry_checkbox_impl<p_is_radio> >(p_name,p_guid,p_parent,p_priority,p_initialstate) {}
00113 };
00114 
00116 typedef advconfig_checkbox_factory_t<false> advconfig_checkbox_factory;
00118 typedef advconfig_checkbox_factory_t<true> advconfig_radio_factory;
00119 
00120 
00122 class advconfig_entry_string_impl : public advconfig_entry_string {
00123 public:
00124         advconfig_entry_string_impl(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate)
00125                 : m_name(p_name), m_parent(p_parent), m_priority(p_priority), m_initialstate(p_initialstate), m_state(p_guid,p_initialstate) {}
00126         void get_name(pfc::string_base & p_out) {p_out = m_name;}
00127         GUID get_guid() {return m_state.get_guid();}
00128         GUID get_parent() {return m_parent;}
00129         void reset() {core_api::ensure_main_thread();m_state = m_initialstate;}
00130         double get_sort_priority() {return m_priority;}
00131         void get_state(pfc::string_base & p_out) {core_api::ensure_main_thread();p_out = m_state;}
00132         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);}
00133         t_uint32 get_flags() {return 0;}
00134 private:
00135         const pfc::string8 m_initialstate, m_name;
00136         cfg_string m_state;
00137         const double m_priority;
00138         const GUID m_parent;
00139 };
00140 
00143 class advconfig_string_factory : public service_factory_single_t<advconfig_entry_string_impl> {
00144 public:
00145         advconfig_string_factory(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate) 
00146                 : service_factory_single_t<advconfig_entry_string_impl>(p_name,p_guid,p_parent,p_priority,p_initialstate) {}
00147 };
00148 
00149 
00151 class advconfig_entry_integer_impl : public advconfig_entry_string {
00152 public:
00153         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)
00154                 : 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) {}
00155         void get_name(pfc::string_base & p_out) {p_out = m_name;}
00156         GUID get_guid() {return m_state.get_guid();}
00157         GUID get_parent() {return m_parent;}
00158         void reset() {m_state = m_initval;}
00159         double get_sort_priority() {return m_priority;}
00160         void get_state(pfc::string_base & p_out) {p_out = pfc::format_uint(m_state.get_value());}
00161         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);}
00162         t_uint32 get_flags() {return advconfig_entry_string::flag_is_integer;}
00163 
00164         t_uint64 get_state_int() const {return m_state;}
00165 private:
00166         cfg_int_t<t_uint64> m_state;
00167         const double m_priority;
00168         const t_uint64 m_initval, m_min, m_max;
00169         const GUID m_parent;
00170         const pfc::string8 m_name;
00171 };
00172 
00175 class advconfig_integer_factory : public service_factory_single_t<advconfig_entry_integer_impl> {
00176 public:
00177         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) 
00178                 : service_factory_single_t<advconfig_entry_integer_impl>(p_name,p_guid,p_parent,p_priority,p_initialstate,p_min,p_max) {}
00179 };
00180 
00181 
00183 class NOVTABLE advconfig_entry_enum : public advconfig_entry {
00184 public:
00185         virtual t_size get_value_count() = 0;
00186         virtual void enum_value(pfc::string_base & p_out,t_size p_index) = 0;
00187         virtual t_size get_state() = 0;
00188         virtual void set_state(t_size p_value) = 0;
00189         
00190         FB2K_MAKE_SERVICE_INTERFACE(advconfig_entry_enum,advconfig_entry);
00191 };
00192 
00193 
00194 
00195 
00197 class advconfig_entry_string_impl_MT : public advconfig_entry_string {
00198 public:
00199         advconfig_entry_string_impl_MT(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate)
00200                 : m_name(p_name), m_parent(p_parent), m_priority(p_priority), m_initialstate(p_initialstate), m_state(p_guid,p_initialstate) {}
00201         void get_name(pfc::string_base & p_out) {p_out = m_name;}
00202         GUID get_guid() {return m_state.get_guid();}
00203         GUID get_parent() {return m_parent;}
00204         void reset() {
00205                 insync(m_sync);
00206                 m_state = m_initialstate;
00207         }
00208         double get_sort_priority() {return m_priority;}
00209         void get_state(pfc::string_base & p_out) {
00210                 insync(m_sync);
00211                 p_out = m_state;
00212         }
00213         void set_state(const char * p_string,t_size p_length = infinite) {
00214                 insync(m_sync);
00215                 m_state.set_string(p_string,p_length);
00216         }
00217         t_uint32 get_flags() {return 0;}
00218 private:
00219         const pfc::string8 m_initialstate, m_name;
00220         cfg_string m_state;
00221         critical_section m_sync;
00222         const double m_priority;
00223         const GUID m_parent;
00224 };
00225 
00227 class advconfig_string_factory_MT : public service_factory_single_t<advconfig_entry_string_impl_MT> {
00228 public:
00229         advconfig_string_factory_MT(const char * p_name,const GUID & p_guid,const GUID & p_parent,double p_priority,const char * p_initialstate) 
00230                 : service_factory_single_t<advconfig_entry_string_impl_MT>(p_name,p_guid,p_parent,p_priority,p_initialstate) {}
00231 };

Generated on Thu Aug 28 21:15:31 2008 for foobar2000 SDK by  doxygen 1.5.5