123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- #ifndef _ATTRIBUTE_H
- #define _ATTRIBUTE_H
- #include <bfc/depend.h>
- #include <bfc/named.h>
- #include <bfc/common.h>
- #include <bfc/string/StringW.h>
- class CfgItemI;
- // lowercase types are reserved for official Nullsoft use
- // uppercase are 3rd-party defined
- namespace AttributeType {
- /**
- Attribute types.
- */
- enum {
- NONE = 0,
- INT = MK3CC('i','n','t'), // attrint.h
- STRING = MK3CC('s','t','r'), // attrstr.h
- BOOL = MK4CC('b','o','o','l'), // attrbool.h
- FLOAT = MK4CC('f','l','o','t'), // attrfloat.h
- FILENAME = MK2CC('f','n'), // attrfn.h
- };
- };
- /**
- Generic configuration attribute.
-
- Configuration attributes enable you to store
- uniquely identifiable values that get pushed
- to a configuration file automatically upon shutdown
- of any Wasabi application.
-
- You shouldn't normally use this on
- it's own, look at the CfgItemI class
- instead.
- @short Generic configuration attribute.
- @ver 1.0
- @author Nullsoft
- @see _float
- @see _int
- @see _bool
- @see _string
- @see CfgItemI
- */
- class NOVTABLE Attribute : public DependentI, private NamedW
- {
- public:
- static const GUID *depend_getClassGuid() {
- // {5AB601D4-1628-4604-808A-7ED899849BEB}
- static const GUID ret =
- { 0x5ab601d4, 0x1628, 0x4604, { 0x80, 0x8a, 0x7e, 0xd8, 0x99, 0x84, 0x9b, 0xeb } };
- return &ret;
- }
- protected:
-
- /**
- Optionally set the name and default value of
- your configuration attribute during construction.
-
- @param name Name of the configuration attribute.
- @param default_val Default value.
- */
- Attribute(const wchar_t *name=NULL, const wchar_t *desc=NULL);
-
- public:
- virtual ~Attribute();
- /**
- Set the name of the configuration
- attribute.
-
- @param newname Name of the attribute.
- */
- void setName(const wchar_t *newname);
-
- /**
- Get the name of the configuration
- attribute.
-
- @ret Name of the attribute.
- */
- const wchar_t *getAttributeName();
- /**
- Get the attribute's description.
-
- @ret Attribute's description.
- */
- const wchar_t *getAttributeDesc();
- /**
- Get the attribute type. Override
- this for your custom attribute type.
-
- @ret Attribute type.
- */
- virtual int getAttributeType()=0; // override me
-
- /**
- Get the configuration group to be used to represent
- this attribute in the registry.
-
- This is only called if the kernel doesn't have a default
- config group set for your type already.
-
- @ret Config group to be used.
- */
- virtual const wchar_t *getConfigGroup() { return NULL; } // override me
- /**
- Get the attribute's value as signed integer.
-
- @ret Attribute value, as a signed integer.
- */
- int getValueAsInt();
-
- /**
- Set the attribute's value with a signed integer while
- also being able to replace the default value previously
- set.
-
- @param newval Attribute's new value.
- @param def true, replace the current default value; false, leave the default value unchanged;
- */
- int setValueAsInt(int newval, bool def=false);
- /**
- Get the attribute's value as signed double.
-
- @ret Attribute value, as a signed double.
- */
- double getValueAsDouble();
-
- /**
- Set the attribute's value with a signed double while
- also being able to replace the default value previously
- set.
-
- @param newval Attribute's new value.
- @param def true, replace the current default value; false, leave the default value unchanged;
- */
- double setValueAsDouble(double newval, bool def=false);
- /**
- Get the length of the attribute's value (data)
- in bytes.
-
- @ret Attribute value (data) length, in bytes.
- */
- int getDataLen();
- /**
- Get the attribute's raw data.
-
- This will return the data the attribute is storing
- in a char buffer you hand to it.
-
- @ret Attribute value, as a signed double.
- @param data Pointer to a char buffer.
- @param data_len The maximum amount of bytes the char buffer can hold.
- */
- int getData(wchar_t *data, int data_len);
-
- /**
- Set the attribute's value with a zero terminated string. Also
- enables you to replace the default value previously
- set.
-
- @param newval Attribute's new value.
- @param def true, replace the current default value; false, leave the default value unchanged;
- */
- int setData(const wchar_t *data, bool def=false);
- void disconnect();
- enum {
- Event_DATACHANGE=100,
- };
- protected:
- friend class CfgItemI;
-
- /**
- Set the attribute's value without causing
- a callback.
- @ret 1.
- @param data Attribute's new value.
- */
- int setDataNoCB(const wchar_t *data);
-
- /**
- Set the configuration item associated with this
- attribute.
- */
- void setCfgItem(CfgItemI *item);
- StringW mkTag();
- private:
- StringW desc;
- StringW default_val, *private_storage;
- CfgItemI *cfgitemi;
- };
- #define ATTR_PERM_READ 1
- #define ATTR_PERM_WRITE 2
- #define ATTR_PERM_ALL (~0)
- // render hints for getRenderHint
- enum {
- ATTR_RENDER_HINT_INT_CHECKMARK
- };
- #endif
|