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

#ifndef __javax_swing_plaf_basic_BasicInternalFrameTitlePane__
#define __javax_swing_plaf_basic_BasicInternalFrameTitlePane__

#pragma interface

#include <javax/swing/JComponent.h>
extern "Java"
{
  namespace java
  {
    namespace awt
    {
        class Color;
        class FontMetrics;
        class Graphics;
        class LayoutManager;
    }
    namespace beans
    {
        class PropertyChangeListener;
    }
  }
  namespace javax
  {
    namespace swing
    {
        class Action;
        class Icon;
        class JButton;
        class JInternalFrame;
        class JLabel;
        class JMenu;
        class JMenuBar;
      namespace plaf
      {
        namespace basic
        {
            class BasicInternalFrameTitlePane;
        }
      }
    }
  }
}

class javax::swing::plaf::basic::BasicInternalFrameTitlePane : public ::javax::swing::JComponent
{

public:
  BasicInternalFrameTitlePane(::javax::swing::JInternalFrame *);
public: // actually protected
  virtual void installTitlePane();
  virtual void addSubComponents();
  virtual void createActions();
  virtual void installListeners();
  virtual void uninstallListeners();
  virtual void installDefaults();
  virtual void uninstallDefaults();
  virtual void createButtons();
  virtual void setButtonIcons();
  virtual void assembleSystemMenu();
  virtual void addSystemMenuItems(::javax::swing::JMenu *);
  virtual ::javax::swing::JMenuBar * createSystemMenuBar();
  virtual ::javax::swing::JMenu * createSystemMenu();
  virtual void showSystemMenu();
public:
  virtual void paintComponent(::java::awt::Graphics *);
public: // actually protected
  virtual void paintTitleBackground(::java::awt::Graphics *);
  virtual ::java::lang::String * getTitle(::java::lang::String *, ::java::awt::FontMetrics *, jint);
  virtual void postClosingEvent(::javax::swing::JInternalFrame *);
  virtual void enableActions();
  virtual ::java::beans::PropertyChangeListener * createPropertyChangeListener();
  virtual ::java::awt::LayoutManager * createLayout();
  static ::java::lang::String * CLOSE_CMD;
  static ::java::lang::String * ICONIFY_CMD;
  static ::java::lang::String * MAXIMIZE_CMD;
  static ::java::lang::String * MOVE_CMD;
  static ::java::lang::String * RESTORE_CMD;
  static ::java::lang::String * SIZE_CMD;
  ::javax::swing::Action * __attribute__((aligned(__alignof__( ::javax::swing::JComponent)))) closeAction;
  ::javax::swing::Action * iconifyAction;
  ::javax::swing::Action * maximizeAction;
  ::javax::swing::Action * moveAction;
  ::javax::swing::Action * restoreAction;
  ::javax::swing::Action * sizeAction;
  ::javax::swing::JButton * closeButton;
  ::javax::swing::JButton * iconButton;
  ::javax::swing::JButton * maxButton;
  ::javax::swing::Icon * minIcon;
  ::javax::swing::Icon * maxIcon;
  ::javax::swing::Icon * iconIcon;
  ::javax::swing::Icon * closeIcon;
  ::javax::swing::JInternalFrame * frame;
  ::javax::swing::JMenuBar * menuBar;
  ::javax::swing::JMenu * windowMenu;
  ::java::awt::Color * notSelectedTextColor;
  ::java::awt::Color * notSelectedTitleColor;
  ::java::awt::Color * selectedTextColor;
  ::java::awt::Color * selectedTitleColor;
  ::java::beans::PropertyChangeListener * propertyChangeListener;
public: // actually package-private
  ::javax::swing::JLabel * title;
public:
  static ::java::lang::Class class$;
};

#endif // __javax_swing_plaf_basic_BasicInternalFrameTitlePane__
