// This may look like C code, but it's really -*- C++ -*-
/*
 * Copyright (C) 2008 Emweb bvba, Kessel-Lo, Belgium.
 *
 * See the LICENSE file for terms of use.
 */
#ifndef EXT_COMPONENT_H_
#define EXT_COMPONENT_H_

#include <Wt/Ext/Widget>

namespace Wt {
  namespace Ext {

/*! \class Component Wt/Ext/Component Wt/Ext/Component
 *  \brief An abstract base class for widgets that can be visually disabled.
 *
 * %Component is the abstract base class of all major %Ext widgets,
 * and offers an API to enable or disable a widget.
 *
 * \ingroup ext
 */
class WT_EXT_API Component : public Widget
{
protected:
  Component(WContainerWidget *parent = 0);

public:
  /*! \brief Enables or disables the widget.
   *
   * \sa setDisabled()
   */
  void setEnabled(bool how);

  /*! \brief Enables the widget.
   */
  void enable();

  /*! \brief Disables the widget.
   */
  void disable();

protected:
  virtual void createConfig(std::ostream& config);
  virtual void propagateSetEnabled(bool enabled);
};

  }
}

#endif // EXT_COMPONENT_H_
