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

#ifndef __javax_swing_plaf_basic_BasicColorChooserUI__
#define __javax_swing_plaf_basic_BasicColorChooserUI__

#pragma interface

#include <javax/swing/plaf/ColorChooserUI.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Container;
    }
    namespace beans
    {
        class PropertyChangeListener;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class JColorChooser;
        class JComponent;
        class JTabbedPane;
      namespace colorchooser
      {
          class AbstractColorChooserPanel;
      }
      namespace event
      {
          class ChangeListener;
      }
      namespace plaf
      {
          class ComponentUI;
        namespace basic
        {
            class BasicColorChooserUI;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicColorChooserUI : public ::javax::swing::plaf::ColorChooserUI
{

public:
  BasicColorChooserUI();
  static ::javax::swing::plaf::ComponentUI * createUI(::javax::swing::JComponent *);
public: // actually protected
  virtual JArray< ::javax::swing::colorchooser::AbstractColorChooserPanel * > * createDefaultChoosers();
public:
  virtual void installUI(::javax::swing::JComponent *);
public: // actually package-private
  virtual void makeTabs(JArray< ::javax::swing::colorchooser::AbstractColorChooserPanel * > *);
public:
  virtual void uninstallUI(::javax::swing::JComponent *);
public: // actually protected
  virtual void uninstallDefaultChoosers();
  virtual void installPreviewPanel();
public: // actually package-private
  virtual void updatePreviewPanel(::javax::swing::JComponent *);
public: // actually protected
  virtual void installDefaults();
  virtual void uninstallDefaults();
  virtual void installListeners();
  virtual ::java::beans::PropertyChangeListener * createPropertyChangeListener();
  virtual void uninstallListeners();
  JArray< ::javax::swing::colorchooser::AbstractColorChooserPanel * > * __attribute__((aligned(__alignof__( ::javax::swing::plaf::ColorChooserUI)))) defaultChoosers;
  ::javax::swing::event::ChangeListener * previewListener;
  ::java::beans::PropertyChangeListener * propertyChangeListener;
  ::javax::swing::JColorChooser * chooser;
public: // actually package-private
  ::javax::swing::JTabbedPane * pane;
private:
  ::java::awt::Container * prevContainer;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicColorChooserUI__
