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

#ifndef __javax_swing_plaf_metal_MetalInternalFrameTitlePane$MetalInternalFrameTitlePanePropertyChangeHandler__
#define __javax_swing_plaf_metal_MetalInternalFrameTitlePane$MetalInternalFrameTitlePanePropertyChangeHandler__

#pragma interface

#include <javax/swing/plaf/basic/BasicInternalFrameTitlePane$PropertyChangeHandler.h>
extern "Java"
{
  namespace java
  {
    namespace beans
    {
        class PropertyChangeEvent;
    }
  }
  namespace javax
  {
    namespace swing
    {
      namespace plaf
      {
        namespace metal
        {
            class MetalInternalFrameTitlePane;
            class MetalInternalFrameTitlePane$MetalInternalFrameTitlePanePropertyChangeHandler;
        }
      }
    }
  }
}

class javax::swing::plaf::metal::MetalInternalFrameTitlePane$MetalInternalFrameTitlePanePropertyChangeHandler : public ::javax::swing::plaf::basic::BasicInternalFrameTitlePane$PropertyChangeHandler
{

public:
  MetalInternalFrameTitlePane$MetalInternalFrameTitlePanePropertyChangeHandler(::javax::swing::plaf::metal::MetalInternalFrameTitlePane *);
  virtual void propertyChange(::java::beans::PropertyChangeEvent *);
public: // actually package-private
  ::javax::swing::plaf::metal::MetalInternalFrameTitlePane * __attribute__((aligned(__alignof__( ::javax::swing::plaf::basic::BasicInternalFrameTitlePane$PropertyChangeHandler)))) this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_metal_MetalInternalFrameTitlePane$MetalInternalFrameTitlePanePropertyChangeHandler__
