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

#ifndef __javax_swing_plaf_metal_MetalFileChooserUI$DirectoryComboBoxModel__
#define __javax_swing_plaf_metal_MetalFileChooserUI$DirectoryComboBoxModel__

#pragma interface

#include <javax/swing/AbstractListModel.h>
extern "Java"
{
  namespace javax
  {
    namespace swing
    {
      namespace plaf
      {
        namespace metal
        {
            class MetalFileChooserUI;
            class MetalFileChooserUI$DirectoryComboBoxModel;
        }
      }
    }
  }
}

class javax::swing::plaf::metal::MetalFileChooserUI$DirectoryComboBoxModel : public ::javax::swing::AbstractListModel
{

public:
  MetalFileChooserUI$DirectoryComboBoxModel(::javax::swing::plaf::metal::MetalFileChooserUI *);
  virtual jint getSize();
  virtual ::java::lang::Object * getElementAt(jint);
  virtual jint getDepth(jint);
  virtual ::java::lang::Object * getSelectedItem();
  virtual void setSelectedItem(::java::lang::Object *);
private:
  ::java::util::List * __attribute__((aligned(__alignof__( ::javax::swing::AbstractListModel)))) items;
  jint selectedIndex;
public: // actually package-private
  ::javax::swing::plaf::metal::MetalFileChooserUI * this$0;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_metal_MetalFileChooserUI$DirectoryComboBoxModel__
