// -*- c++ -*-
//  Generated by gtkmmproc from ./../container.gen_h -- DO NOT MODIFY!
#ifndef _GTKMM_CONTAINER_H
#define _GTKMM_CONTAINER_H

/* $Id: container.h,v 1.2 2003/06/17 16:37:40 pbd Exp $ */

/* container.h
 *
 * Copyright (C) 1998-1999 The Gtk-- Development Team
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Library General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Library General Public License for more details.
 *
 * You should have received a copy of the GNU Library General Public
 * License along with this library; if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <gtk--/widget.h>
#include <gtk/gtkcontainer.h>
/* we'll include gtkfeatures because we dont want to include the whole
   gtk/gtk.h - this file is used by almost ALL our widgets, so dependencies
   in minimum - adding things here will increase compile times ALOT */
#include <gtk/gtkfeatures.h>

namespace Gtk {
class Container;
class Container_Class;
}
namespace Gtk { Gtk::Container *wrap (GtkContainer *o); }
namespace Gtk
{
class Adjustment;
class Label;

//: Abstract container class.
//- This is the abstract container from which all gtk+ widgets which hold
//- other items derive from.  It mainly houses virtual functions
//- used for inserting and removing children.  Containers in gtk+
//- may hold one item or many items depending on the implementation.
//-
//- This interface is used for all single item holding containers.
//- Multi-item containers provide their own unique interface as their
//- items are generally more complex.  The methods of the derived
//- classes should be prefered over these.
class Container;
class Container : public Widget
{

public:
  typedef Container          CppObjectType;
  typedef Container_Class    CppClassType;
  typedef GtkContainer           BaseObjectType;
  typedef GtkContainerClass      BaseClassType;

private:
  friend class Container_Class;
  static CppClassType container_class;

  Container(const Container&);
  Container& operator=(const Container&); // not implemented

protected:
  void   initialize_class();
  explicit Container(GtkContainer *castitem);

public:
  static GtkType get_type();
  GtkContainer* gtkobj()             { return (GtkContainer*)(gtkobject); }
  const GtkContainer* gtkobj() const { return (GtkContainer*)(gtkobject); }
  static bool isA(Object *checkcast);

  // Hook for proxies
  static const char* const signal_names[];

  virtual ~Container();

private:

private:
  // This one is no longer needed use add(Gtk_Widget&) instead
  void add(Widget*);

public:

/* Application-level methods */



  // Deprecated method?


  void set_border_width(guint width);

  //: Add a single item to container at unspecified location.
  //- Adds an item to the list or item slot for the container.
  //- The meaning of this operation varies from one container to
  //- the next.
  //-
  //- For single item containers, this means replace the current contents
  //- with the specified widget.
  //-
  //- For multi item containers, this inserts without a location
  //- (should be avoided)
  //-
  //- Ownership follows gtk+ rules (reference counting).  Reference insertions
  //- and insertion of unmanaged pointers will not confer ownership.
  //- A managed pointer will be referenced and thus unless referenced
  //- externally will be deleted with the container.

  void add(Gtk::Widget& p0);


  //: Remove an item from container.
  //- Removes an item if found in the container.

  void remove(Gtk::Widget& p0);

  //: Set the resizing policy of the container.


  void set_resize_mode(GtkResizeMode resize_mode);

  //: Request contained widgets check their size.


  //: Operate on contained items.
  //- This is largely an internal used mainly for things like
  //- creating duplicates of internal lists and other such
  //- operations.  The result is lossy as it only gets the
  //- the main child and not its external pieces.
  //-
  //- For example notebook pages contain a page, a label, and
  //- a menu item.  But this only operates on the pages.
  typedef SigC::Slot1<void, Gtk::Widget&> ForeachCallback;
  void foreach(const ForeachCallback&);

  //: (internal) Operate on contained items (see {foreach()}).


  void foreach_(GtkCallback callback,gpointer data);

  //: (internal) Operate on contained items (see {foreach()}).




  void foreach_full_(GtkCallback callback,GtkCallbackMarshal marshal,gpointer data,GtkDestroyNotify notify);


  // Gtk_container_childern returned allocated object (bad)
  //Gtk_Container_List children();
  //GList* gtk_container_children            (GtkContainer     *container);




/* Widget-level methods */

  //: Sets the focus on a child.
  void set_focus_child(Gtk::Widget* p0);
  //: Sets the focus on a child.


  void set_focus_child(Gtk::Widget& p0);



  void set_focus_vadjustment(Gtk::Adjustment& adjustment);



  void set_focus_hadjustment(Gtk::Adjustment& adjustment);



  void register_toplevel();



  void unregister_toplevel();

  //GList * gtk_container_get_toplevels        (void);



  void resize_children();


  GtkType child_type();
protected:
  Container();

public:

  union
    {
      CppObjectType * container_self;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,2,&gtk_container_check_resize> check_resize;
      Gtk::EmitProxySignal1<gint,GtkDirectionType,CppObjectType,BaseObjectType,3,&gtk_container_focus> focus;
    };

protected:
  // impl functions
    virtual void add_impl(Gtk::Widget& p0);
    virtual void remove_impl(Gtk::Widget& p0);
    virtual void check_resize_impl();
    virtual gint focus_impl(GtkDirectionType p0);
    virtual void set_focus_child_impl(Gtk::Widget* p0);
    virtual GtkType child_type_impl();

};

}


//+ PROPERTIES(Gtk_Container)
//. name: focus_child
//. type: Gtk::Widget*
//. get:
//. set:
//. desc:

//. name: border_width
//. type: guint:16
//. get:
//. set:
//. desc:

//. name: need_resize
//. type: guint:1
//. get:
//. set:
//. desc:

//. name: resize_mode
//. type: guint:2
//. get:
//. set:
//. desc:

//. name: resize_widgets
//. type: GSList*
//. get:
//. set:
//. desc: The list of children that requested a resize
//.

#endif
