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

#ifndef __javax_swing_plaf_basic_BasicSplitPaneDivider$BasicOneTouchButton__
#define __javax_swing_plaf_basic_BasicSplitPaneDivider$BasicOneTouchButton__

#pragma interface

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

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Graphics;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace border
      {
          class Border;
      }
      namespace plaf
      {
        namespace basic
        {
            class BasicSplitPaneDivider;
            class BasicSplitPaneDivider$BasicOneTouchButton;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicSplitPaneDivider$BasicOneTouchButton : public ::javax::swing::JButton
{

public: // actually package-private
  BasicSplitPaneDivider$BasicOneTouchButton(::javax::swing::plaf::basic::BasicSplitPaneDivider *, jint);
public:
  virtual void setBorder(::javax::swing::border::Border *);
  virtual jboolean isFocusTraversable();
  virtual void paint(::java::awt::Graphics *);
public: // actually package-private
  static const jint LEFT = 0;
  static const jint RIGHT = 1;
private:
  JArray< jint > * __attribute__((aligned(__alignof__( ::javax::swing::JButton)))) xpoints;
  JArray< jint > * ypoints;
  jint direction;
public: // actually package-private
  ::javax::swing::plaf::basic::BasicSplitPaneDivider * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicSplitPaneDivider$BasicOneTouchButton__
