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

#ifndef __java_awt_AWTEventMulticaster__
#define __java_awt_AWTEventMulticaster__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class AWTEventMulticaster;
      namespace event
      {
          class ActionEvent;
          class ActionListener;
          class AdjustmentEvent;
          class AdjustmentListener;
          class ComponentEvent;
          class ComponentListener;
          class ContainerEvent;
          class ContainerListener;
          class FocusEvent;
          class FocusListener;
          class HierarchyBoundsListener;
          class HierarchyEvent;
          class HierarchyListener;
          class InputMethodEvent;
          class InputMethodListener;
          class ItemEvent;
          class ItemListener;
          class KeyEvent;
          class KeyListener;
          class MouseEvent;
          class MouseListener;
          class MouseMotionListener;
          class MouseWheelEvent;
          class MouseWheelListener;
          class TextEvent;
          class TextListener;
          class WindowEvent;
          class WindowFocusListener;
          class WindowListener;
          class WindowStateListener;
      }
    }
  }
}

class java::awt::AWTEventMulticaster : public ::java::lang::Object
{

public: // actually protected
  AWTEventMulticaster(::java::util::EventListener *, ::java::util::EventListener *);
  virtual ::java::util::EventListener * remove(::java::util::EventListener *);
public:
  virtual void componentResized(::java::awt::event::ComponentEvent *);
  virtual void componentMoved(::java::awt::event::ComponentEvent *);
  virtual void componentShown(::java::awt::event::ComponentEvent *);
  virtual void componentHidden(::java::awt::event::ComponentEvent *);
  virtual void componentAdded(::java::awt::event::ContainerEvent *);
  virtual void componentRemoved(::java::awt::event::ContainerEvent *);
  virtual void focusGained(::java::awt::event::FocusEvent *);
  virtual void focusLost(::java::awt::event::FocusEvent *);
  virtual void keyTyped(::java::awt::event::KeyEvent *);
  virtual void keyPressed(::java::awt::event::KeyEvent *);
  virtual void keyReleased(::java::awt::event::KeyEvent *);
  virtual void mouseClicked(::java::awt::event::MouseEvent *);
  virtual void mousePressed(::java::awt::event::MouseEvent *);
  virtual void mouseReleased(::java::awt::event::MouseEvent *);
  virtual void mouseEntered(::java::awt::event::MouseEvent *);
  virtual void mouseExited(::java::awt::event::MouseEvent *);
  virtual void mouseDragged(::java::awt::event::MouseEvent *);
  virtual void mouseMoved(::java::awt::event::MouseEvent *);
  virtual void windowOpened(::java::awt::event::WindowEvent *);
  virtual void windowClosing(::java::awt::event::WindowEvent *);
  virtual void windowClosed(::java::awt::event::WindowEvent *);
  virtual void windowIconified(::java::awt::event::WindowEvent *);
  virtual void windowDeiconified(::java::awt::event::WindowEvent *);
  virtual void windowActivated(::java::awt::event::WindowEvent *);
  virtual void windowDeactivated(::java::awt::event::WindowEvent *);
  virtual void windowStateChanged(::java::awt::event::WindowEvent *);
  virtual void windowGainedFocus(::java::awt::event::WindowEvent *);
  virtual void windowLostFocus(::java::awt::event::WindowEvent *);
  virtual void actionPerformed(::java::awt::event::ActionEvent *);
  virtual void itemStateChanged(::java::awt::event::ItemEvent *);
  virtual void adjustmentValueChanged(::java::awt::event::AdjustmentEvent *);
  virtual void textValueChanged(::java::awt::event::TextEvent *);
  virtual void inputMethodTextChanged(::java::awt::event::InputMethodEvent *);
  virtual void caretPositionChanged(::java::awt::event::InputMethodEvent *);
  virtual void hierarchyChanged(::java::awt::event::HierarchyEvent *);
  virtual void ancestorMoved(::java::awt::event::HierarchyEvent *);
  virtual void ancestorResized(::java::awt::event::HierarchyEvent *);
  virtual void mouseWheelMoved(::java::awt::event::MouseWheelEvent *);
  static ::java::awt::event::ComponentListener * add(::java::awt::event::ComponentListener *, ::java::awt::event::ComponentListener *);
  static ::java::awt::event::ContainerListener * add(::java::awt::event::ContainerListener *, ::java::awt::event::ContainerListener *);
  static ::java::awt::event::FocusListener * add(::java::awt::event::FocusListener *, ::java::awt::event::FocusListener *);
  static ::java::awt::event::KeyListener * add(::java::awt::event::KeyListener *, ::java::awt::event::KeyListener *);
  static ::java::awt::event::MouseListener * add(::java::awt::event::MouseListener *, ::java::awt::event::MouseListener *);
  static ::java::awt::event::MouseMotionListener * add(::java::awt::event::MouseMotionListener *, ::java::awt::event::MouseMotionListener *);
  static ::java::awt::event::WindowListener * add(::java::awt::event::WindowListener *, ::java::awt::event::WindowListener *);
  static ::java::awt::event::WindowStateListener * add(::java::awt::event::WindowStateListener *, ::java::awt::event::WindowStateListener *);
  static ::java::awt::event::WindowFocusListener * add(::java::awt::event::WindowFocusListener *, ::java::awt::event::WindowFocusListener *);
  static ::java::awt::event::ActionListener * add(::java::awt::event::ActionListener *, ::java::awt::event::ActionListener *);
  static ::java::awt::event::ItemListener * add(::java::awt::event::ItemListener *, ::java::awt::event::ItemListener *);
  static ::java::awt::event::AdjustmentListener * add(::java::awt::event::AdjustmentListener *, ::java::awt::event::AdjustmentListener *);
  static ::java::awt::event::TextListener * add(::java::awt::event::TextListener *, ::java::awt::event::TextListener *);
  static ::java::awt::event::InputMethodListener * add(::java::awt::event::InputMethodListener *, ::java::awt::event::InputMethodListener *);
  static ::java::awt::event::HierarchyListener * add(::java::awt::event::HierarchyListener *, ::java::awt::event::HierarchyListener *);
  static ::java::awt::event::HierarchyBoundsListener * add(::java::awt::event::HierarchyBoundsListener *, ::java::awt::event::HierarchyBoundsListener *);
  static ::java::awt::event::MouseWheelListener * add(::java::awt::event::MouseWheelListener *, ::java::awt::event::MouseWheelListener *);
  static ::java::awt::event::ComponentListener * remove(::java::awt::event::ComponentListener *, ::java::awt::event::ComponentListener *);
  static ::java::awt::event::ContainerListener * remove(::java::awt::event::ContainerListener *, ::java::awt::event::ContainerListener *);
  static ::java::awt::event::FocusListener * remove(::java::awt::event::FocusListener *, ::java::awt::event::FocusListener *);
  static ::java::awt::event::KeyListener * remove(::java::awt::event::KeyListener *, ::java::awt::event::KeyListener *);
  static ::java::awt::event::MouseListener * remove(::java::awt::event::MouseListener *, ::java::awt::event::MouseListener *);
  static ::java::awt::event::MouseMotionListener * remove(::java::awt::event::MouseMotionListener *, ::java::awt::event::MouseMotionListener *);
  static ::java::awt::event::WindowListener * remove(::java::awt::event::WindowListener *, ::java::awt::event::WindowListener *);
  static ::java::awt::event::WindowStateListener * remove(::java::awt::event::WindowStateListener *, ::java::awt::event::WindowStateListener *);
  static ::java::awt::event::WindowFocusListener * remove(::java::awt::event::WindowFocusListener *, ::java::awt::event::WindowFocusListener *);
  static ::java::awt::event::ActionListener * remove(::java::awt::event::ActionListener *, ::java::awt::event::ActionListener *);
  static ::java::awt::event::ItemListener * remove(::java::awt::event::ItemListener *, ::java::awt::event::ItemListener *);
  static ::java::awt::event::AdjustmentListener * remove(::java::awt::event::AdjustmentListener *, ::java::awt::event::AdjustmentListener *);
  static ::java::awt::event::TextListener * remove(::java::awt::event::TextListener *, ::java::awt::event::TextListener *);
  static ::java::awt::event::InputMethodListener * remove(::java::awt::event::InputMethodListener *, ::java::awt::event::InputMethodListener *);
  static ::java::awt::event::HierarchyListener * remove(::java::awt::event::HierarchyListener *, ::java::awt::event::HierarchyListener *);
  static ::java::awt::event::HierarchyBoundsListener * remove(::java::awt::event::HierarchyBoundsListener *, ::java::awt::event::HierarchyBoundsListener *);
  static ::java::awt::event::MouseWheelListener * remove(::java::awt::event::MouseWheelListener *, ::java::awt::event::MouseWheelListener *);
public: // actually protected
  static ::java::util::EventListener * addInternal(::java::util::EventListener *, ::java::util::EventListener *);
  static ::java::util::EventListener * removeInternal(::java::util::EventListener *, ::java::util::EventListener *);
  virtual void saveInternal(::java::io::ObjectOutputStream *, ::java::lang::String *);
  static void save(::java::io::ObjectOutputStream *, ::java::lang::String *, ::java::util::EventListener *);
public:
  static JArray< ::java::util::EventListener * > * getListeners(::java::util::EventListener *, ::java::lang::Class *);
private:
  void getListeners(::java::util::ArrayList *, ::java::lang::Class *);
public: // actually protected
  ::java::util::EventListener * __attribute__((aligned(__alignof__( ::java::lang::Object)))) a;
  ::java::util::EventListener * b;
public:
  static ::java::lang::Class class$;
};

#endif // __java_awt_AWTEventMulticaster__
