aboutsummaryrefslogtreecommitdiff
path: root/Src/Wasabi/api/config/items/cfgitemi.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/Wasabi/api/config/items/cfgitemi.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/Wasabi/api/config/items/cfgitemi.h')
-rw-r--r--Src/Wasabi/api/config/items/cfgitemi.h158
1 files changed, 158 insertions, 0 deletions
diff --git a/Src/Wasabi/api/config/items/cfgitemi.h b/Src/Wasabi/api/config/items/cfgitemi.h
new file mode 100644
index 00000000..7824abf5
--- /dev/null
+++ b/Src/Wasabi/api/config/items/cfgitemi.h
@@ -0,0 +1,158 @@
+#ifndef _CFGITEMI_H
+#define _CFGITEMI_H
+
+#include "cfgitemx.h"
+
+#include <bfc/named.h>
+#include <bfc/ptrlist.h>
+#include <bfc/depend.h>
+
+#include <map>
+#include <string>
+
+class AttrCallback;
+class Attribute;
+
+// this is the one you inherit from/use
+/**
+
+ @short Configuration Item
+ @ver 1.0
+ @author Nullsoft
+ @see Attribute
+ @see _bool
+ @see _int
+ @see _float
+ @see _string
+*/
+class CfgItemI : public CfgItemX, public DependentI, private NamedW
+{
+public:
+ /**
+ Optionally sets the name and the GUID of the
+ configuration item if they are specified
+ upon creation of the object.
+
+ @param name Name of the configuration item.
+ @param guid GUID of the configuration item.
+ */
+ CfgItemI(const wchar_t *name=NULL, GUID guid=INVALID_GUID);
+
+ /**
+ Does nothing.
+ */
+ virtual ~CfgItemI();
+
+ /**
+ Get the name of the configuration item.
+
+ @ret Name of the configuration item.
+ */
+ const wchar_t *cfgitem_getName();
+
+ /**
+ Get the GUID of the configuration item.
+
+ @ret GUID of the configuration item.
+ */
+ GUID cfgitem_getGuid();
+
+ /**
+ Sets the prefix to be prepended in the config file for all attributes
+ of this item.
+
+ @see cfgitem_getPrefix
+ @param prefix The prefix.
+ */
+ void cfgitem_setPrefix(const wchar_t *prefix);
+/**
+ Gets the config prefix, if any was set.
+
+ @see cfgitem_setPrefix
+ @ret Pointer to the config prefix.
+*/
+ const wchar_t *cfgitem_getPrefix();
+
+ /**
+ Get the number of attributes registered
+ to this configuration item.
+
+ @ret Number of attributes.
+ */
+ int cfgitem_getNumAttributes();
+
+ /**
+ Enumerate the attributes registered
+ with this configuration item.
+
+ @ret
+ */
+ const wchar_t *cfgitem_enumAttribute(int n);
+
+ const wchar_t *cfgitem_getConfigXML();
+ virtual void cfgitem_onCfgGroupCreate(ifc_window *cfggroup, const wchar_t *attrname) {}
+ virtual void cfgitem_onCfgGroupDelete(ifc_window *cfggroup) {}
+
+ virtual int cfgitem_getNumChildren();
+ virtual CfgItem *cfgitem_enumChild(int n);
+ virtual GUID cfgitem_getParentGuid();
+
+ virtual void cfgitem_onRegister();
+ virtual void cfgitem_onDeregister();
+
+ int cfgitem_getAttributeType(const wchar_t *name);
+ const wchar_t *cfgitem_getAttributeConfigGroup(const wchar_t *name);
+ int cfgitem_getDataLen(const wchar_t *name);
+ int cfgitem_getData(const wchar_t *name, wchar_t *data, int data_len);
+ int cfgitem_setData(const wchar_t *name, const wchar_t *data);
+
+ // override these to catch notifications from attribs, call down
+ virtual int cfgitem_onAttribSetValue(Attribute *attr);
+
+ virtual int cfgitem_usePrivateStorage() { return 0; } //override and return 1 to keep stuff out of system settings
+
+protected:
+ void cfgitem_setGUID(GUID guid);
+
+public:
+ int setName(const wchar_t *name);
+ int registerAttribute(Attribute *attr, AttrCallback *acb=NULL);
+ // does not call delete on the attribute
+ int deregisterAttribute(Attribute *attr);
+ void deregisterAll();
+
+ void addCallback(Attribute *attr, AttrCallback *acb);
+
+ int cfgitem_addAttribute(const wchar_t *name, const wchar_t *defval);
+ int cfgitem_delAttribute(const wchar_t *name);
+
+protected:
+
+ // derived classes can override this to catch name changes
+ virtual void cfgitem_onSetName() { }
+
+ Attribute *getAttributeByName(const wchar_t *name);
+
+ void addChildItem(CfgItemI *child);
+
+ void setCfgXml(const wchar_t *groupname);
+
+ void setParentGuid(GUID guid);
+
+private:
+ api_dependent *cfgitem_getDependencyPtr() { return this; };
+ virtual void *dependent_getInterface(const GUID *classguid);
+
+ // from Named
+ virtual void onSetName() { cfgitem_onSetName(); }
+
+ std::wstring prefix;
+ PtrList<Attribute> attributes;
+ std::multimap<Attribute*, AttrCallback*> callbacks; //CUT
+ PtrList<CfgItemI> children;
+ std::wstring cfgxml;
+ GUID myguid, parent_guid;
+ PtrList<Attribute> newattribs;
+};
+
+#endif