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

#ifndef __javax_swing_undo_StateEdit__
#define __javax_swing_undo_StateEdit__

#pragma interface

#include <javax/swing/undo/AbstractUndoableEdit.h>
extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace undo
      {
          class StateEdit;
          class StateEditable;
      }
    }
  }
}

class javax::swing::undo::StateEdit : public ::javax::swing::undo::AbstractUndoableEdit
{

public:
  StateEdit(::javax::swing::undo::StateEditable *);
  StateEdit(::javax::swing::undo::StateEditable *, ::java::lang::String *);
public: // actually protected
  virtual void init(::javax::swing::undo::StateEditable *, ::java::lang::String *);
public:
  virtual void end();
  virtual void undo();
  virtual void redo();
  virtual ::java::lang::String * getPresentationName();
public: // actually protected
  virtual void removeRedundantState();
  static ::java::lang::String * RCSID;
  ::javax::swing::undo::StateEditable * __attribute__((aligned(__alignof__( ::javax::swing::undo::AbstractUndoableEdit)))) object;
  ::java::util::Hashtable * preState;
  ::java::util::Hashtable * postState;
  ::java::lang::String * undoRedoName;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_undo_StateEdit__
