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

#ifndef __gnu_java_awt_peer_gtk_GtkFileDialogPeer__
#define __gnu_java_awt_peer_gtk_GtkFileDialogPeer__

#pragma interface

#include <gnu/java/awt/peer/gtk/GtkDialogPeer.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace awt
      {
        namespace peer
        {
          namespace gtk
          {
              class GtkContainerPeer;
              class GtkFileDialogPeer;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace awt
    {
        class FileDialog;
      namespace event
      {
          class PaintEvent;
      }
    }
  }
}

class gnu::java::awt::peer::gtk::GtkFileDialogPeer : public ::gnu::java::awt::peer::gtk::GtkDialogPeer
{

public: // actually package-private
  virtual void create(::gnu::java::awt::peer::gtk::GtkContainerPeer *, jint);
  virtual void connectSignals();
  virtual void nativeSetFile(::java::lang::String *);
public:
  virtual ::java::lang::String * nativeGetDirectory();
  virtual void nativeSetDirectory(::java::lang::String *);
public: // actually package-private
  virtual void nativeSetFilenameFilter(::java::io::FilenameFilter *);
public:
  virtual void create();
  GtkFileDialogPeer(::java::awt::FileDialog *);
public: // actually package-private
  virtual void setComponentBounds();
public:
  virtual void setFile(::java::lang::String *);
  virtual void setDirectory(::java::lang::String *);
  virtual void setFilenameFilter(::java::io::FilenameFilter *);
public: // actually package-private
  virtual jboolean filenameFilterCallback(::java::lang::String *);
public: // actually protected
  virtual void updateComponent(::java::awt::event::PaintEvent *);
public: // actually package-private
  virtual void gtkHideFileDialog();
  virtual void gtkDisposeFileDialog();
  virtual void gtkSetFilename(::java::lang::String *);
  static ::java::lang::String * FS;
private:
  ::java::lang::String * __attribute__((aligned(__alignof__( ::gnu::java::awt::peer::gtk::GtkDialogPeer)))) currentFile;
  ::java::lang::String * currentDirectory;
  ::java::io::FilenameFilter * filter;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_awt_peer_gtk_GtkFileDialogPeer__
