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

#ifndef __javax_swing_plaf_basic_BasicLookAndFeel__
#define __javax_swing_plaf_basic_BasicLookAndFeel__

#pragma interface

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

extern "Java"
{
  namespace javax
  {
    namespace swing
    {
        class Action;
        class ActionMap;
        class UIDefaults;
      namespace plaf
      {
        namespace basic
        {
            class BasicLookAndFeel;
            class BasicLookAndFeel$PopupHelper;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicLookAndFeel : public ::javax::swing::LookAndFeel
{

public:
  BasicLookAndFeel();
  virtual ::javax::swing::UIDefaults * getDefaults();
public: // actually protected
  virtual void initClassDefaults(::javax::swing::UIDefaults *);
  virtual void initSystemColorDefaults(::javax::swing::UIDefaults *);
  virtual void loadSystemColors(::javax::swing::UIDefaults *, JArray< ::java::lang::String * > *, jboolean);
private:
  void loadResourceBundle(::javax::swing::UIDefaults *);
public: // actually protected
  virtual void initComponentDefaults(::javax::swing::UIDefaults *);
  virtual ::javax::swing::ActionMap * getAudioActionMap();
  virtual ::javax::swing::Action * createAudioAction(::java::lang::Object *);
  virtual void playSound(::javax::swing::Action *);
public:
  virtual void initialize();
  virtual void uninitialize();
public: // actually package-private
  static const jlong serialVersionUID = -6096995660290287879LL;
  static ::java::lang::String * DONT_CANCEL_POPUP;
private:
  ::javax::swing::plaf::basic::BasicLookAndFeel$PopupHelper * __attribute__((aligned(__alignof__( ::javax::swing::LookAndFeel)))) popupHelper;
  ::javax::swing::ActionMap * audioActionMap;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicLookAndFeel__
