#ifndef _ATTRINT_H
#define _ATTRINT_H

#include "attribute.h"

// inherit from this one, or just use it
/**
  Boolean configuration attributes have two values, true or false.
  They can be used like any other config item.
  
  @short Integer configuration attribute.
  @ver 1.0
  @author Nullsoft
  @see CfgItemI
  @see _bool
  @see _string
  @see _float
*/
class _int : public Attribute {
public:
  /**
    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.
  */
  _int(const wchar_t *name=NULL, int default_val=0) : Attribute(name) {
    setValueAsInt(default_val, true);
  }

  // from AttributeI
  /**
    Get the attribute type. This will return 
    a constant representing the attribute type.
    
    These constants can be: BOOL, FLOAT, STRING and INT.
    
    @see AttributeType
    @ret The attribute type.
  */
  virtual int getAttributeType() { return AttributeType::INT; }
  
  /**
    Get the configuration group to be used to represent
    this attribute in the registry.
    
    @ret Config group to be used.
  */
  virtual const wchar_t *getConfigGroup() { return L"studio.configgroup.int"; }
//  virtual int getPermissions();

  // convenience operators
  /**
    Get the value of the attribute.
  */
  operator int() { return getValueAsInt(); }

  /**
    Set the value of the attribute.
  */
  int operator =(int newval) { return setValueAsInt(newval) ? newval : getValueAsInt(); }
};

#endif