
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __javax_swing_AbstractButton__
#define __javax_swing_AbstractButton__

#pragma interface

#include <javax/swing/JComponent.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Component;
        class Graphics;
        class Image;
        class Insets;
        class LayoutManager;
      namespace event
      {
          class ActionEvent;
          class ActionListener;
          class ItemEvent;
          class ItemListener;
      }
    }
    namespace beans
    {
        class PropertyChangeListener;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class AbstractButton;
        class AbstractButton$EventHandler;
        class Action;
        class ButtonModel;
        class Icon;
      namespace event
      {
          class ChangeEvent;
          class ChangeListener;
      }
      namespace plaf
      {
          class ButtonUI;
      }
    }
  }
}

class javax::swing::AbstractButton : public ::javax::swing::JComponent
{

public:
  AbstractButton();
  virtual ::javax::swing::ButtonModel * getModel();
  virtual void setModel(::javax::swing::ButtonModel *);
public: // actually protected
  virtual void init(::java::lang::String *, ::javax::swing::Icon *);
public:
  virtual ::java::lang::String * getActionCommand();
  virtual void setActionCommand(::java::lang::String *);
  virtual void addActionListener(::java::awt::event::ActionListener *);
  virtual void removeActionListener(::java::awt::event::ActionListener *);
  virtual JArray< ::java::awt::event::ActionListener * > * getActionListeners();
  virtual void addItemListener(::java::awt::event::ItemListener *);
  virtual void removeItemListener(::java::awt::event::ItemListener *);
  virtual JArray< ::java::awt::event::ItemListener * > * getItemListeners();
  virtual void addChangeListener(::javax::swing::event::ChangeListener *);
  virtual void removeChangeListener(::javax::swing::event::ChangeListener *);
  virtual JArray< ::javax::swing::event::ChangeListener * > * getChangeListeners();
public: // actually protected
  virtual void fireItemStateChanged(::java::awt::event::ItemEvent *);
  virtual void fireActionPerformed(::java::awt::event::ActionEvent *);
  virtual void fireStateChanged();
public:
  virtual jint getMnemonic();
  virtual void setMnemonic(jchar);
  virtual void setMnemonic(jint);
  virtual void setDisplayedMnemonicIndex(jint);
  virtual jint getDisplayedMnemonicIndex();
  virtual void setRolloverEnabled(jboolean);
  virtual jboolean isRolloverEnabled();
  virtual void setSelected(jboolean);
  virtual jboolean isSelected();
  virtual void setEnabled(jboolean);
  virtual jint getHorizontalAlignment();
  virtual void setHorizontalAlignment(jint);
  virtual jint getHorizontalTextPosition();
  virtual void setHorizontalTextPosition(jint);
  virtual jint getVerticalAlignment();
  virtual void setVerticalAlignment(jint);
  virtual jint getVerticalTextPosition();
  virtual void setVerticalTextPosition(jint);
  virtual jboolean isBorderPainted();
  virtual void setBorderPainted(jboolean);
  virtual ::javax::swing::Action * getAction();
  virtual void setAction(::javax::swing::Action *);
  virtual ::javax::swing::Icon * getIcon();
  virtual void setIcon(::javax::swing::Icon *);
  virtual ::java::lang::String * getText();
  virtual void setLabel(::java::lang::String *);
  virtual ::java::lang::String * getLabel();
  virtual void setText(::java::lang::String *);
  virtual void setIconTextGap(jint);
  virtual jint getIconTextGap();
  virtual ::java::awt::Insets * getMargin();
  virtual void setMargin(::java::awt::Insets *);
  virtual ::javax::swing::Icon * getPressedIcon();
  virtual void setPressedIcon(::javax::swing::Icon *);
  virtual ::javax::swing::Icon * getDisabledIcon();
  virtual void setDisabledIcon(::javax::swing::Icon *);
  virtual jboolean isFocusPainted();
  virtual void setFocusPainted(jboolean);
public: // actually protected
  virtual jint checkHorizontalKey(jint, ::java::lang::String *);
  virtual jint checkVerticalKey(jint, ::java::lang::String *);
  virtual void configurePropertiesFromAction(::javax::swing::Action *);
  virtual ::java::awt::event::ActionListener * createActionListener();
  virtual ::java::beans::PropertyChangeListener * createActionPropertyChangeListener(::javax::swing::Action *);
  virtual ::javax::swing::event::ChangeListener * createChangeListener();
  virtual ::java::awt::event::ItemListener * createItemListener();
public:
  virtual void doClick();
  virtual void doClick(jint);
  virtual ::javax::swing::Icon * getDisabledSelectedIcon();
  virtual void setDisabledSelectedIcon(::javax::swing::Icon *);
  virtual ::javax::swing::Icon * getRolloverIcon();
  virtual void setRolloverIcon(::javax::swing::Icon *);
  virtual ::javax::swing::Icon * getRolloverSelectedIcon();
  virtual void setRolloverSelectedIcon(::javax::swing::Icon *);
  virtual ::javax::swing::Icon * getSelectedIcon();
  virtual void setSelectedIcon(::javax::swing::Icon *);
  virtual JArray< ::java::lang::Object * > * getSelectedObjects();
  virtual jboolean imageUpdate(::java::awt::Image *, jint, jint, jint, jint, jint);
  virtual jboolean isContentAreaFilled();
  virtual void setContentAreaFilled(jboolean);
public: // actually protected
  virtual void paintBorder(::java::awt::Graphics *);
  virtual ::java::lang::String * paramString();
public:
  virtual void setUI(::javax::swing::plaf::ButtonUI *);
  virtual ::javax::swing::plaf::ButtonUI * getUI();
  virtual void updateUI();
  virtual jlong getMultiClickThreshhold();
  virtual void setMultiClickThreshhold(jlong);
public: // actually protected
  virtual void addImpl(::java::awt::Component *, ::java::lang::Object *, jint);
public:
  virtual void setLayout(::java::awt::LayoutManager *);
public: // actually package-private
  virtual void setUIProperty(::java::lang::String *, ::java::lang::Object *);
  virtual ::javax::swing::AbstractButton$EventHandler * getEventHandler();
private:
  static const jlong serialVersionUID = -937921345538462020LL;
public: // actually package-private
  ::javax::swing::Icon * __attribute__((aligned(__alignof__( ::javax::swing::JComponent)))) default_icon;
  ::javax::swing::Icon * pressed_icon;
  ::javax::swing::Icon * disabledIcon;
  ::javax::swing::Icon * selectedIcon;
  ::javax::swing::Icon * disabledSelectedIcon;
  ::javax::swing::Icon * rolloverIcon;
  ::javax::swing::Icon * rolloverSelectedIcon;
  ::javax::swing::Icon * current_icon;
  ::java::lang::String * text;
  jint iconTextGap;
  jint verticalAlignment;
  jint horizontalAlignment;
  jint horizontalTextPosition;
  jint verticalTextPosition;
  jboolean borderPainted;
  jboolean focusPainted;
  jboolean contentAreaFilled;
  jboolean rollOverEnabled;
  ::javax::swing::Action * action;
public: // actually protected
  ::javax::swing::ButtonModel * model;
public: // actually package-private
  ::java::awt::Insets * margin;
  jint mnemonicIndex;
public: // actually protected
  ::java::awt::event::ActionListener * actionListener;
  ::java::awt::event::ItemListener * itemListener;
  ::javax::swing::event::ChangeListener * changeListener;
private:
  ::javax::swing::AbstractButton$EventHandler * eventHandler;
public: // actually package-private
  jlong multiClickThreshhold;
  ::java::beans::PropertyChangeListener * actionPropertyChangeListener;
public: // actually protected
  ::javax::swing::event::ChangeEvent * changeEvent;
private:
  jboolean clientBorderPaintedSet;
  jboolean clientRolloverEnabledSet;
  jboolean clientIconTextGapSet;
  jboolean clientContentAreaFilledSet;
public:
  static ::java::lang::String * BORDER_PAINTED_CHANGED_PROPERTY;
  static ::java::lang::String * CONTENT_AREA_FILLED_CHANGED_PROPERTY;
  static ::java::lang::String * DISABLED_ICON_CHANGED_PROPERTY;
  static ::java::lang::String * DISABLED_SELECTED_ICON_CHANGED_PROPERTY;
  static ::java::lang::String * FOCUS_PAINTED_CHANGED_PROPERTY;
  static ::java::lang::String * HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY;
  static ::java::lang::String * HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY;
  static ::java::lang::String * ICON_CHANGED_PROPERTY;
  static ::java::lang::String * MARGIN_CHANGED_PROPERTY;
  static ::java::lang::String * MNEMONIC_CHANGED_PROPERTY;
  static ::java::lang::String * MODEL_CHANGED_PROPERTY;
  static ::java::lang::String * PRESSED_ICON_CHANGED_PROPERTY;
  static ::java::lang::String * ROLLOVER_ENABLED_CHANGED_PROPERTY;
  static ::java::lang::String * ROLLOVER_ICON_CHANGED_PROPERTY;
  static ::java::lang::String * ROLLOVER_SELECTED_ICON_CHANGED_PROPERTY;
  static ::java::lang::String * SELECTED_ICON_CHANGED_PROPERTY;
  static ::java::lang::String * TEXT_CHANGED_PROPERTY;
  static ::java::lang::String * VERTICAL_ALIGNMENT_CHANGED_PROPERTY;
  static ::java::lang::String * VERTICAL_TEXT_POSITION_CHANGED_PROPERTY;
  static ::java::lang::Class class$;
};

#endif // __javax_swing_AbstractButton__
