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

#ifndef __javax_swing_Timer__
#define __javax_swing_Timer__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
      namespace event
      {
          class ActionEvent;
          class ActionListener;
      }
    }
  }
  namespace javax
  {
    namespace swing
    {
        class Timer;
        class Timer$Task;
      namespace event
      {
          class EventListenerList;
      }
    }
  }
}

class javax::swing::Timer : public ::java::lang::Object
{

public:
  Timer(jint, ::java::awt::event::ActionListener *);
  virtual JArray< ::java::awt::event::ActionListener * > * getActionListeners();
  virtual void setCoalesce(jboolean);
  virtual jboolean isCoalesce();
  virtual JArray< ::java::util::EventListener * > * getListeners(::java::lang::Class *);
  static void setLogTimers(jboolean);
  static jboolean getLogTimers();
  virtual void setDelay(jint);
  virtual jint getDelay();
  virtual void setInitialDelay(jint);
  virtual jint getInitialDelay();
  virtual void setRepeats(jboolean);
  virtual jboolean isRepeats();
  virtual jboolean isRunning();
  virtual void addActionListener(::java::awt::event::ActionListener *);
  virtual void removeActionListener(::java::awt::event::ActionListener *);
  virtual void restart();
  virtual void start();
  virtual void stop();
public: // actually protected
  virtual void fireActionPerformed(::java::awt::event::ActionEvent *);
public: // actually package-private
  virtual void fireActionPerformed();
  virtual void drainEvents();
  virtual void queueEvent();
private:
  static const jlong serialVersionUID = -1116180831621385484LL;
  ::java::lang::Runnable * __attribute__((aligned(__alignof__( ::java::lang::Object)))) drainer;
  static ::java::util::Timer * timer;
public: // actually package-private
  static jboolean logTimers;
public: // actually protected
  ::javax::swing::event::EventListenerList * listenerList;
public: // actually package-private
  jboolean coalesce;
  jboolean repeats;
  jint delay;
  jint initialDelay;
  jint ticks;
  ::javax::swing::Timer$Task * task;
private:
  jlong queue;
  ::java::lang::Object * queueLock;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_Timer__
