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

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

/* widget.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.
 */


/* this file is quite critical for our compile times... keep #includes minimal
 */

/* object.h is needed because of derivation */
#include <gtk--/object.h>
//#include <glib.h>
#include <gtk/gtkdnd.h>
#include <gtk/gtkwidget.h>

typedef struct _GtkTargetEntry GtkTargetEntry;
typedef struct _GtkTargetList GtkTargetList;

namespace Gtk {
class Widget;
class Widget_Class;
}
namespace Gtk { Gtk::Widget *wrap (GtkWidget *o); }
extern "C" gint gtkmm_widget_button_press_event(GtkWidget*,GdkEventButton* p0);
extern "C" gint gtkmm_widget_button_release_event(GtkWidget*,GdkEventButton* p0);
extern "C" gint gtkmm_widget_motion_notify_event(GtkWidget*,GdkEventMotion* p0);
extern "C" gint gtkmm_widget_delete_event(GtkWidget*,GdkEventAny* p0);
extern "C" gint gtkmm_widget_expose_event(GtkWidget*,GdkEventExpose* p0);
extern "C" gint gtkmm_widget_key_press_event(GtkWidget*,GdkEventKey* p0);
extern "C" gint gtkmm_widget_key_release_event(GtkWidget*,GdkEventKey* p0);
extern "C" gint gtkmm_widget_enter_notify_event(GtkWidget*,GdkEventCrossing* p0);
extern "C" gint gtkmm_widget_leave_notify_event(GtkWidget*,GdkEventCrossing* p0);
extern "C" gint gtkmm_widget_configure_event(GtkWidget*,GdkEventConfigure* p0);
extern "C" gint gtkmm_widget_focus_in_event(GtkWidget*,GdkEventFocus* p0);
extern "C" gint gtkmm_widget_focus_out_event(GtkWidget*,GdkEventFocus* p0);
extern "C" gint gtkmm_widget_map_event(GtkWidget*,GdkEventAny* p0);
extern "C" gint gtkmm_widget_unmap_event(GtkWidget*,GdkEventAny* p0);
extern "C" gint gtkmm_widget_property_notify_event(GtkWidget*,GdkEventProperty* p0);
extern "C" gint gtkmm_widget_selection_clear_event(GtkWidget*,GdkEventSelection* p0);
extern "C" gint gtkmm_widget_selection_request_event(GtkWidget*,GdkEventSelection* p0);
extern "C" gint gtkmm_widget_selection_notify_event(GtkWidget*,GdkEventSelection* p0);
extern "C" gint gtkmm_widget_proximity_in_event(GtkWidget*,GdkEventProximity* p0);
extern "C" gint gtkmm_widget_proximity_out_event(GtkWidget*,GdkEventProximity* p0);
extern "C" gint gtkmm_widget_client_event(GtkWidget*,GdkEventClient* p0);
extern "C" gint gtkmm_widget_no_expose_event(GtkWidget*,GdkEventAny* p0);
extern "C" gint gtkmm_widget_visibility_notify_event(GtkWidget*,GdkEventVisibility* p0);
namespace Gtk
{
class Style;
class AccelGroup;
class Adjustment;
class Window;

//: Abstract Widget (Base class for all widgets)
//- As the base class of all widgets this contains all of the properties
//- and methods common to all widgets.  It is an abstract class that
//- can not be instantiated.
//-
//- Important part of widgets is the *_event signals and virtual methods
//- that every widget has. Those are events coming directly from gdk and
//- thus also from XLib. By overriding those virtual methods you can
//- trap everything a widget can ever do.
//- In order to capture events from a widget, the event mask must
//- first be set with {set_events()}.
//-
//- Only widgets with a Gdk_Window on the server side are allowed to
//- capture events.  Widgets in the {Gtk::Misc::} group for example lack
//- a Gdk_Window.
class Widget : public Object {

public:
  typedef Widget          CppObjectType;
  typedef Widget_Class    CppClassType;
  typedef GtkWidget           BaseObjectType;
  typedef GtkWidgetClass      BaseClassType;

private:
  friend class Widget_Class;
  static CppClassType widget_class;

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

protected:
  void   initialize_class();
  explicit Widget(GtkWidget *castitem);

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

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

  virtual ~Widget();

private:

public:
  friend class Main;

/*
  Not implemented:
    signal gint destroy_event(GdkEventAny*)
      This is useless for users, so we dont provide it - saves us
      from confusion.

    void destroyed            (Gtk_Widget* w); ??
      Utility function: sets widget_pointer
      to 0 when widget is destroyed.

    void gtk_widget_modify_style(GtkWidget*,GtkRcStyle*)
      Need to wrap GtkRcStyle with gdk-- first.

    void gtk_widget_set_parent(GtkWidget*,GtkWidget*)
      Set the widgets parent.
      This is better left to the container to which the widget
      gets added.  (Not for application use)

    bool gtk_widget_hide_on_delete(GtkWidget*)
      This doesn't appear to do anything but call hide!

    gboolean gtk_widget_set_scroll_adjustments(GtkWidget*,
                   GtkAdjustment*,GtkAdjustment*),
    gboolean gtk_widget_set_scroll_adjustments(GtkWidget*,
                   GtkAdjustment*,GtkAdjustment*),
      This is gtk+ idea of MI.  They define a function which
      can't be used on most classes here then the impl later. (bad, bad)
      return type is if it worked or not.
*/





  void unparent();



  void show_now();


/* QUEUE DRAWS */


  void queue_draw();

  void queue_draw_area(gint x,gint y,gint width,gint height);



  void queue_clear();

  void queue_clear_area(gint x,gint y,gint width,gint height);



  void queue_resize();


/* ACCELERATORS - none are user callable */

// (internal)
// WRAP_METHOD(
//   guint gtk_widget_accelerator_signal(GtkWidget*,GtkAccelGroup*,guint,guint),
//   guint accelerator_signal(Gtk::AccelGroup &accel_group,
//			   guint                accel_key,
//			   guint                accel_mods));


  void lock_accelerators();


  void unlock_accelerators();

#if GTK_VERSION_GT_MICRO(1,2,0)
  //: (Gtk 1.1)
  bool accelerators_locked();
#endif

  //: (internal) adds a key to an accelerator group for this widget

  void add_accelerator(const nstring& accel_signal,Gtk::AccelGroup& accel_group,guint accel_key,guint accel_mods,GtkAccelFlags accel_flags);

  //: (internal) removes a key to an accelerator group for this widget




  void remove_accelerator(Gtk::AccelGroup& accel_group,guint accel_key,guint accel_mods);

  //: (internal) removes all accelerators to this object



  void remove_accelerators(const nstring& accel_signal,bool visible_only);

  //:


  bool activate();


  //: Change a widgets parent.
  //- Equivalent to removing widget from old parent and adding it to
  //- the new parent, except that the widget will not be temporarily
  //- unrealized if both the old parent and the new parent are realized.
  //-
  //- Use this in place of {set_parent()} in an application.


  void reparent(Gtk::Widget& newparent);




  void popup(gint x,gint y);




  gint intersect(const Gdk_Rectangle& area,const Gdk_Rectangle& intersection) const;



  void grab_default();

  //: Set the name of the widget.
  //- You can name your widgets, so that you can know which one you
  //- have a pointer to. I don't think that this has anything to do
  //- with a text label that is shown on the widget.


  void set_name(const nstring& name);

  //: Return the {name} of the widget.


  Gtk::nstring get_name() const;

  GtkStateType get_state() const;


  void set_state(GtkStateType state);

  //: Change the widgets sensitivty.
  //- The sensitivity of a widget is whether it will accept user
  //- input or not. Usually this also changes the widget's look,
  //- to incicate it's usability. Set true to allow user input on
  //- the widget, false to disable user input.


  void set_sensitive(bool sensitive);



  void set_app_paintable(bool app_paintable);

  //: Return the {parent} of this widget.
  Gtk::Widget* get_parent() const;



  void set_parent_window(const Gdk_Window& parent_window);

  //: Return the parent's Gdk_Window.


  Gdk_Window get_parent_window() const;





  void set_uposition(gint x,gint y);

  //: Set the minumum widget size.
  //- Set either x or y to -1 to keep it's old size.



  void set_usize(gint x,gint y);

  //: Set the events the widget wishs to capture.
  //- The available event masks that the user can select are:
  //- {\enum GDK_EXPOSURE_MASK}, {\enum GDK_POINTER_MOTION_MASK},
  //- {\enum GDK_POINTER_MOTION_HINT_MASK}, {\enum GDK_BUTTON_MOTION_MASK},
  //- {\enum GDK_BUTTON1_MOTION_MASK}, {\enum GDK_BUTTON2_MOTION_MASK},
  //- {\enum GDK_BUTTON3_MOTION_MASK}, {\enum GDK_BUTTON_PRESS_MASK},
  //- {\enum GDK_BUTTON_RELEASE_MASK}, {\enum GDK_KEY_PRESS_MASK},
  //- {\enum GDK_KEY_RELEASE_MASK}, {\enum GDK_ENTER_NOTIFY_MASK},
  //- {\enum GDK_LEAVE_NOTIFY_MASK}, {\enum GDK_FOCUS_CHANGE_MASK},
  //- {\enum GDK_STRUCTURE_MASK}, {\enum GDK_PROPERTY_CHANGE_MASK},
  //- {\enum GDK_VISIBILITY_NOTIFY_MASK}, {\enum GDK_PROXIMITY_IN_MASK},
  //- {\enum GDK_PROXIMITY_OUT_MASK}, {\enum GDK_SUBSTRUCTURE_MASK}
  //-


  void set_events(gint events);

  //: Add additional events to be monitored by the widget.


  void add_events(gint events);



  void set_extension_events(GdkExtensionMode mode);



  GdkExtensionMode get_extension_events() const;

  //:
  //-


  Gtk::Window* get_toplevel();

  //:
  //-


  Gtk::Widget* get_ancestor(GtkType type) const;

  //: Return the widget's colormap.


  Gdk_Colormap get_colormap() const;

  //: Return the widget's visual.


  Gdk_Visual get_visual() const;

  //: Set colormap prior to realization.
  //  This function must not be called on an already
  //  {realized()} widget. Because it is possible that somebody
  //  can call {get_colormap()} or {get_visual()} and save the
  //  result, this function is only safe to
  //  call in a widget's {\func init}() function.


  void set_colormap(const Gdk_Colormap& colormap);

  //: Set visual prior to realization.
  //  This function must not be called on an already
  //  {realized()} widget. Because it is possible that somebody
  //  can call {get_colormap()} or {get_visual()} and save the
  //  result, this function is only safe to
  //  call in a widget's {\func init}() function.


  void set_visual(const Gdk_Visual& visual);

  //: Get the widget's events (bitwise or'd together).


  gint get_events() const;



  void get_pointer(gint& x,gint& y) const;



  bool is_ancestor(Gtk::Widget& widget) const;

  //: Set the widget's style.
  //- The style of a widget includes font, color, and other
  //- information.


  void set_style(Gtk::Style& style);



  void set_rc_style();



  void ensure_style();

  // GtkStyle* gtk_widget_get_style(GtkWidget*);
  //: Get the widget's style.
  //- Once a style is used it is constant and unchangeable.


  Gtk::Style* get_style() const;



  void restore_default_style();



  void set_composite_name(const nstring& name);



  Gtk::nstring get_composite_name();



  void reset_rc_styles();



/* PUSH/POP */
  //: Sets a new style for the widget, and saves the old one.


  static void push_style(Gtk::Style& style);



  static void push_colormap(const Gdk_Colormap& cmap);



  static void push_visual(const Gdk_Visual& visual);



  static void push_composite_child();

  //: Restores the old style for the widget.


  static void pop_style();



  static void pop_colormap();



  static void pop_visual();



  static void pop_composite_child();



/* DEFAULTS */


  static void set_default_style(Gtk::Style& style);



  static void set_default_colormap(const Gdk_Colormap& colormap);



  static void set_default_visual(const Gdk_Visual& visual);



  static Gtk::Style* get_default_style();



  static Gdk_Colormap get_default_colormap();



  static Gdk_Visual get_default_visual();


//  WRAP_METHOD(
//    GtkStyle*   gtk_widget_peek_style(),
//    static Gtk::Style* get_current_style());

//  WRAP_METHOD(
//    GdkColormap*   gtk_widget_peek_colormap(),
//    static Gdk_Colormap get_current_colormap());

//  WRAP_METHOD(
//    GdkVisual*   gtk_widget_peek_visual(),
//    static Gdk_Visual get_current_visual());




  void shape_combine_mask(const Gdk_Bitmap& shape_mask,gint offset_x,gint offset_y);
private:
  // why is this private??


  void reset_shapes();

public:

  //: (Gtk 1.1)
  // void gtk_widget_path(GtkWidget*,guint*,gchar**,gchar**);
  void path		   (string    &path,
			    string    &path_reversed);

  //: (Gtk 1.1)
  // void gtk_widget_class_path(GtkWidget*,guint*,gchar**,gchar**);
  void class_path	   (string    &path,
			    string    &path_reversed);



  //: Return the Gdk_Window on which the widget is drawn.
  Gdk_Window get_window        () const;



/* DRAG'N DROP */


  GdkDragContext* gtkmm_drag_begin(GtkTargetList* p0,GdkDragAction p1,gint p2,GdkEvent* p3);

  //: (Gtk 1.1)




  void drag_get_data(Gdk_Drag_Context& context,Gdk_Atom target,guint32 time);
  //: (Gtk 1.1)





  static void drag_finish(Gdk_Drag_Context& context,bool success,bool del,guint32 time);

  //: (Gtk 1.1)


  void drag_highlight();

  //: (Gtk 1.1)


  void drag_unhighlight();

  //: (Gtk 1.1)

  void drag_dest_set(GtkDestDefaults flags,const GtkTargetEntry* targets,gint n_targets,GdkDragAction actions);

  //: (Gtk 1.1)





  void drag_dest_set_proxy(Gdk_Window& proxy_window,GdkDragProtocol protocol,bool use_coordinates);

  //: (Gtk 1.1)


  void drag_dest_unset();

  //: (Gtk 1.1)

  void drag_source_set(GdkModifierType start_button_mask,const GtkTargetEntry* targets,gint n_targets,GdkDragAction actions);

  //: (Gtk 1.1)


  void drag_source_unset();


  //: (Gtk 1.1)





  void drag_source_set_icon(Gdk_Colormap& colormap,Gdk_Pixmap& pixmap,Gdk_Bitmap& mask);

  /* these may not belong here, as they don't are widget member
     functions. however, they group nicely with the other
     drag_* functions

     (should move to Gdk_DragContext)
  */


  static Gtk::Widget* drag_get_source_widget(GdkDragContext* context);


  //: (Gtk 1.1)





  static void drag_set_icon_widget(Gdk_Drag_Context& context,Gtk::Widget& widget,gint hot_x,gint hot_y);

  //: (Gtk 1.1)

  static void drag_set_icon_pixmap(Gdk_Drag_Context& context,Gdk_Colormap& colormap,Gdk_Pixmap& pixmap,Gdk_Bitmap& mask,gint hot_x,gint hot_y);

  //: (Gtk 1.1)
  // move to Drag_Context??


  static void drag_set_icon_default(Gdk_Drag_Context& context);

  //: (Gtk 1.1)

  static void drag_set_default_icon(Gdk_Colormap& colormap,Gdk_Pixmap& pixmap,Gdk_Bitmap& mask,gint hot_x,gint hot_y);



/* FLAGS */
  //: Returns property {flags.toplevel}.
  bool is_toplevel() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_TOPLEVEL)?true:false; }

  //: Returns property {flags.nowindow}.
  bool has_no_window() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_NO_WINDOW)?true:false; }

  //: Returns property {flags.realized}.
  bool is_realized() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_REALIZED)?true:false; }

  //: Returns property {flags.mapped}.
  bool is_mapped() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_MAPPED)?true:false; }

  //: Returns property {flags.visible}.
  bool is_visible() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_VISIBLE)?true:false; }

  //: Returns if the widget is ready to be drawn to.
  // Checks to see if the widget is both visible and mapped which
  // makes it possible to perform drawing commands on.
  bool is_drawable() const
    { return (is_visible() && is_mapped())?true:false; }

  //: Returns property {flags.sensitive}. You might want to check
  // is_sensitive instead.
  bool sensitive() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_SENSITIVE)?true:false; }

  bool parent_sensitive() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_PARENT_SENSITIVE)?true:false; }
  bool is_sensitive() const
    { return (GTK_WIDGET_IS_SENSITIVE(GTK_WIDGET(gtkobj())))?true:false; }
  bool can_focus() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_CAN_FOCUS)?true:false; }
  bool has_focus() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_HAS_FOCUS)?true:false; }
  bool can_default() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_CAN_DEFAULT)?true:false; }
  bool has_default() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_HAS_DEFAULT)?true:false; }
  bool rc_style() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_RC_STYLE)?true:false; }
  bool has_grab() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_HAS_GRAB)?true:false; }
  bool is_composite_child() const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_COMPOSITE_CHILD)?true:false; }
  bool app_paintable()      const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_APP_PAINTABLE)?true:false; }
  bool recieves_default()   const
    { return (GTK_OBJECT_FLAGS (gtkobj()) & GTK_RECEIVES_DEFAULT)?true:false; }

  //: Set a member of the {flags} field.
  void set_flags(gint flag) { GTK_OBJECT_SET_FLAGS(gtkobj(), flag); }

  //: Clear a member of the {flags} field.
  void unset_flags(gint flag) { GTK_OBJECT_UNSET_FLAGS(gtkobj(), flag); }


/* SIGNALS */

  //: Show a widget.
  //- If the widget is not already destroyed, this will make the widget
  //- visible by setting {flags.visible}.


  //: Show a widget and all items inserted to it.
  void show_all();

  //: Hide a widget


  //: Hide a widget and all items inserted to it
  void hide_all();

  //: Emitted on mapping of a widget to the screen.
  //- See {flags.mapped}.  This should not be called by the user.


  //- See {flags.mapped}.  This should not be called by the user.


  //: Emitted on realization of a widget.
  //- See {flags.realized}.  This is also responsible for
  //- setting {flags.realized} when it is done.  Therefore,
  //- when overriding the impl method, you should call the
  //- default realize method.


  //- See {flags.realized}.  This should not be called by the user.
  //SIGNAL_SPEC("unrealize",both,void unrealize_(),gtk_widget_unrealize);



  //: Emitted to draw the widget.
  //- This is a gtk virtual function.  It can only be
  //- overriden with the impl method.
  void draw(GdkRectangle* p0);

  //: Emitted to draw the widget in a focused state.


  //: Emitted to draw the widget in a normal state.

// Changed signals -- inform widget of internal changes.
// We rename parent_set => parent_changed
//  and      style_set  => style_changed
//  to avoid confusion with set_parent and set_style.

  //: Informs objects that their state has changed.
  //- The old state is passed as the argument.


  //: Informs objects that their parent changed.
  //- The widget passed is the former parent, which may be 0 if
  //- there was no parent. (was parent_set in gtk+)


  //: Informs objects that their style has been changed.
  //- The former style is passed as the argument. (was style_set in gtk+)




  //: Event triggered by user pressing button.


  //: Event triggered by user releasing button.


  //: Event triggered by user moving pointer.


  //: Event triggered by window begin closed.


  //: Event triggered by window requiring a refresh.
  //- Expose events cover a rectangular area that was covered
  //- or obscured by another window.  That area is now exposed
  //- and thus is needs to be redrawn.
  //-
  //- If the application is not capable of redrawing sections
  //- it should watch the count field and only draw on the last
  //- even indicated.  This is important for things such as
  //- {Gtk::DrawingArea::}.


  //: Event triggered by a key press will widget has focus.


  //: Event triggered by a key release will widget has focus.


  //: Event triggered by pointer entering widget area.


  //: Event triggered by pointer leaving widget area.


  //: Event triggered by a window resizing.

/* DRAG'N DRAW */

  //: Returns width of widget.
  gint width() const { return gtkobj()->allocation.width; }

  //: Returns height of widget.
  gint height() const { return gtkobj()->allocation.height; }

protected:
  void realize_if_needed();
  Widget();

public:

    class Proxy_parent_changed
      : public ProxySignal1<void,GtkWidget*,CppObjectType,BaseObjectType,14>
      {
          typedef ProxySignal1<void,GtkWidget*,CppObjectType,BaseObjectType,14> BaseType;
        public:
          Connection connect(const SigC::Slot1<void,Gtk::Widget*> &s);
      };
    class Proxy_style_changed
      : public ProxySignal1<void,GtkStyle*,CppObjectType,BaseObjectType,15>
      {
          typedef ProxySignal1<void,GtkStyle*,CppObjectType,BaseObjectType,15> BaseType;
        public:
          Connection connect(const SigC::Slot1<void,Gtk::Style*> &s);
      };
  union
    {
      CppObjectType * widget_self;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,0,&gtk_widget_show> show;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,2,&gtk_widget_hide> hide;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,4,&gtk_widget_map> map_;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,5,&gtk_widget_unmap> unmap_;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,6,&gtk_widget_realize> realize;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,7,&gtk_widget_grab_focus> grab_focus;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,9,&gtk_widget_draw_focus> draw_focus;
      Gtk::EmitProxySignal0<void,CppObjectType,BaseObjectType,10,&gtk_widget_draw_default> draw_default;
      Gtk::EmitProxySignal1<void,GtkRequisition*,CppObjectType,BaseObjectType,11,&gtk_widget_size_request> size_request;
      Gtk::EmitProxySignal1<void,GtkAllocation*,CppObjectType,BaseObjectType,12,&gtk_widget_size_allocate> size_allocate;
      Gtk::ProxySignal1<void,GtkStateType,CppObjectType,BaseObjectType,13> state_changed;
      Proxy_parent_changed parent_changed;
      Proxy_style_changed style_changed;
      Gtk::EmitProxySignal1<gint,GdkEvent*,CppObjectType,BaseObjectType,16,&gtk_widget_event> event;
      Gtk::EmitProxySignal1<gint,GdkEventButton*,CppObjectType,BaseObjectType,17,&gtkmm_widget_button_press_event> button_press_event;
      Gtk::EmitProxySignal1<gint,GdkEventButton*,CppObjectType,BaseObjectType,18,&gtkmm_widget_button_release_event> button_release_event;
      Gtk::EmitProxySignal1<gint,GdkEventMotion*,CppObjectType,BaseObjectType,19,&gtkmm_widget_motion_notify_event> motion_notify_event;
      Gtk::EmitProxySignal1<gint,GdkEventAny*,CppObjectType,BaseObjectType,20,&gtkmm_widget_delete_event> delete_event;
      Gtk::EmitProxySignal1<gint,GdkEventExpose*,CppObjectType,BaseObjectType,21,&gtkmm_widget_expose_event> expose_event;
      Gtk::EmitProxySignal1<gint,GdkEventKey*,CppObjectType,BaseObjectType,22,&gtkmm_widget_key_press_event> key_press_event;
      Gtk::EmitProxySignal1<gint,GdkEventKey*,CppObjectType,BaseObjectType,23,&gtkmm_widget_key_release_event> key_release_event;
      Gtk::EmitProxySignal1<gint,GdkEventCrossing*,CppObjectType,BaseObjectType,24,&gtkmm_widget_enter_notify_event> enter_notify_event;
      Gtk::EmitProxySignal1<gint,GdkEventCrossing*,CppObjectType,BaseObjectType,25,&gtkmm_widget_leave_notify_event> leave_notify_event;
      Gtk::EmitProxySignal1<gint,GdkEventConfigure*,CppObjectType,BaseObjectType,26,&gtkmm_widget_configure_event> configure_event;
      Gtk::EmitProxySignal1<gint,GdkEventFocus*,CppObjectType,BaseObjectType,27,&gtkmm_widget_focus_in_event> focus_in_event;
      Gtk::EmitProxySignal1<gint,GdkEventFocus*,CppObjectType,BaseObjectType,28,&gtkmm_widget_focus_out_event> focus_out_event;
      Gtk::EmitProxySignal1<gint,GdkEventAny*,CppObjectType,BaseObjectType,29,&gtkmm_widget_map_event> map_event;
      Gtk::EmitProxySignal1<gint,GdkEventAny*,CppObjectType,BaseObjectType,30,&gtkmm_widget_unmap_event> unmap_event;
      Gtk::EmitProxySignal1<gint,GdkEventProperty*,CppObjectType,BaseObjectType,31,&gtkmm_widget_property_notify_event> property_notify_event;
      Gtk::EmitProxySignal1<gint,GdkEventSelection*,CppObjectType,BaseObjectType,32,&gtkmm_widget_selection_clear_event> selection_clear_event;
      Gtk::EmitProxySignal1<gint,GdkEventSelection*,CppObjectType,BaseObjectType,33,&gtkmm_widget_selection_request_event> selection_request_event;
      Gtk::EmitProxySignal1<gint,GdkEventSelection*,CppObjectType,BaseObjectType,34,&gtkmm_widget_selection_notify_event> selection_notify_event;
      Gtk::EmitProxySignal1<gint,GdkEventProximity*,CppObjectType,BaseObjectType,35,&gtkmm_widget_proximity_in_event> proximity_in_event;
      Gtk::EmitProxySignal1<gint,GdkEventProximity*,CppObjectType,BaseObjectType,36,&gtkmm_widget_proximity_out_event> proximity_out_event;
      Gtk::EmitProxySignal1<gint,GdkEventClient*,CppObjectType,BaseObjectType,37,&gtkmm_widget_client_event> client_event;
      Gtk::EmitProxySignal1<gint,GdkEventAny*,CppObjectType,BaseObjectType,38,&gtkmm_widget_no_expose_event> no_expose_event;
      Gtk::EmitProxySignal1<gint,GdkEventVisibility*,CppObjectType,BaseObjectType,39,&gtkmm_widget_visibility_notify_event> visibility_notify_event;
      Gtk::ProxySignal1<void,const gchar*,CppObjectType,BaseObjectType,40> debug_msg;
      Gtk::ProxySignal3<void,GtkSelectionData*,guint,guint,CppObjectType,BaseObjectType,41> selection_get;
      Gtk::ProxySignal2<void,GtkSelectionData*,guint,CppObjectType,BaseObjectType,42> selection_received;
      Gtk::ProxySignal1<void,GdkDragContext*,CppObjectType,BaseObjectType,43> drag_begin;
      Gtk::ProxySignal1<void,GdkDragContext*,CppObjectType,BaseObjectType,44> drag_end;
      Gtk::ProxySignal4<void,GdkDragContext*,GtkSelectionData*,guint,guint,CppObjectType,BaseObjectType,45> drag_data_get;
      Gtk::ProxySignal1<void,GdkDragContext*,CppObjectType,BaseObjectType,46> drag_data_delete;
      Gtk::ProxySignal2<void,GdkDragContext*,guint,CppObjectType,BaseObjectType,47> drag_leave;
      Gtk::ProxySignal4<gboolean,GdkDragContext*,gint,gint,guint,CppObjectType,BaseObjectType,48> drag_motion;
      Gtk::ProxySignal4<gboolean,GdkDragContext*,gint,gint,guint,CppObjectType,BaseObjectType,49> drag_drop;
      Gtk::ProxySignal6<void,GdkDragContext*,gint,gint,GtkSelectionData*,guint,guint32,CppObjectType,BaseObjectType,50> drag_data_received;
    };

protected:
  // impl functions
    virtual void show_impl();
    virtual void show_all_impl();
    virtual void hide_impl();
    virtual void hide_all_impl();
    virtual void map__impl();
    virtual void unmap__impl();
    virtual void realize_impl();
    virtual void grab_focus_impl();
    virtual void draw_impl(GdkRectangle* p0);
    virtual void draw_focus_impl();
    virtual void draw_default_impl();
    virtual void size_request_impl(GtkRequisition* p0);
    virtual void size_allocate_impl(GtkAllocation* p0);
    virtual void state_changed_impl(GtkStateType p0);
    virtual void parent_changed_impl(Gtk::Widget* p0);
    virtual void style_changed_impl(Gtk::Style* p0);
    virtual gint event_impl(GdkEvent* p0);
    virtual gint button_press_event_impl(GdkEventButton* p0);
    virtual gint button_release_event_impl(GdkEventButton* p0);
    virtual gint motion_notify_event_impl(GdkEventMotion* p0);
    virtual gint delete_event_impl(GdkEventAny* p0);
    virtual gint expose_event_impl(GdkEventExpose* p0);
    virtual gint key_press_event_impl(GdkEventKey* p0);
    virtual gint key_release_event_impl(GdkEventKey* p0);
    virtual gint enter_notify_event_impl(GdkEventCrossing* p0);
    virtual gint leave_notify_event_impl(GdkEventCrossing* p0);
    virtual gint configure_event_impl(GdkEventConfigure* p0);
    virtual gint focus_in_event_impl(GdkEventFocus* p0);
    virtual gint focus_out_event_impl(GdkEventFocus* p0);
    virtual gint map_event_impl(GdkEventAny* p0);
    virtual gint unmap_event_impl(GdkEventAny* p0);
    virtual gint property_notify_event_impl(GdkEventProperty* p0);
    virtual gint selection_clear_event_impl(GdkEventSelection* p0);
    virtual gint selection_request_event_impl(GdkEventSelection* p0);
    virtual gint selection_notify_event_impl(GdkEventSelection* p0);
    virtual gint proximity_in_event_impl(GdkEventProximity* p0);
    virtual gint proximity_out_event_impl(GdkEventProximity* p0);
    virtual gint client_event_impl(GdkEventClient* p0);
    virtual gint no_expose_event_impl(GdkEventAny* p0);
    virtual gint visibility_notify_event_impl(GdkEventVisibility* p0);
    virtual void debug_msg_impl(const gchar* p0);
    virtual void selection_get_impl(GtkSelectionData* p0,guint p1,guint p2);
    virtual void selection_received_impl(GtkSelectionData* p0,guint p1);
    virtual void drag_begin_impl(GdkDragContext* p0);
    virtual void drag_end_impl(GdkDragContext* p0);
    virtual void drag_data_get_impl(GdkDragContext* p0,GtkSelectionData* p1,guint p2,guint p3);
    virtual void drag_data_delete_impl(GdkDragContext* p0);
    virtual void drag_leave_impl(GdkDragContext* p0,guint p1);
    virtual gboolean drag_motion_impl(GdkDragContext* p0,gint p1,gint p2,guint p3);
    virtual gboolean drag_drop_impl(GdkDragContext* p0,gint p1,gint p2,guint p3);
    virtual void drag_data_received_impl(GdkDragContext* p0,gint p1,gint p2,GtkSelectionData* p3,guint p4,guint32 p5);

};

}

//+ PROPERTIES(GTK_WIDGET)
//. name: allocation
//. type: GtkAllocation
//. get:
//. set:  {size_allocate()}
//. desc: The widgets actual size.

//. name: flags
//. type: GTK_OBJECT_FLAGS
//. get:  See below.
//. set:  {set_flags()}, {unset_flags()}
//. desc: A large set of flags controlling the behaviors of the widget.

//. name: flags.can_focus
//. type: bool
//. get:  {can_focus()}
//. set:  NA
//. desc: This flag determines whether a widget is able to handle focus grabs.
//. There are no directly corresponding functions for setting/unsetting
//. this flag, but it can be affected by the {has_focus()} argument
//. via {set_arg()}.

//. name: flags.can_default
//. type: bool
//. get:  {can_focus()}
//. set:  NA
//. desc: Same as {can_focus} for the default widget.

//. name: flags.has_focus
//. type: bool
//. get:  {has_focus()}
//. set:  {grab_focus()}
//. desc:
//. This flag will be set by {grab_focus()} for widgets that also
//. have {\enum GTK_CAN_FOCUS} set. The flag will be unset once another widget
//. grabs the focus.

//. name: flags.has_default
//. type: bool
//. get:  {has_default()}
//. set:  NA
//. desc: Same as {has_focus} for the default widget.

//. name: flags.has_grab
//. type: bool
//. get:  {has_grab()}
//. set:  NA
//. desc: This flag indicated the widget is in the grab_widgets stack,
//. and will be the preferred
//. one for receiving events other than ones of cosmetic value.

//. name: flags.mapped
//. type: bool
//. get:  {mapped()}
//. set:  NA
//. desc: Indicates that {show()} has been called on the widgets window(s).
//. Mapping follows realization.

//. name: flags.no_window
//. type: bool
//. get:  {no_window()}
//. set:  NA
//. desc:  This flag is indicative for a widget that does not provide
//. its own GdkWindow. Visible action (e.g. drawing) is performed
//. on the parent's GdkWindow.
//.
//. See {Gtk::EventBox::} and {Gtk::Misc::}
//. for more details.

//. name: flags.realized
//. type: bool
//. get:  {realized()}
//. set:  NA
//. desc: Indicates if a widget has been realized on the
//. server.  A widget may be constructed, but not yet mapped
//. into the X server yet.  The process of constructing a
//. server side object is called realization.  After realization
//. the widget has a GdkWindow (or its parent does in the case of
//. {flags.no_window} )

//. name: flags.sensitive
//. type: bool
//. get:  {sensitive()}
//. set:  NA
//. desc:
//. The sensitivity of a widget determines whether it will receive
//. certain events (e.g. button or key presses). One premise for
//. the widgets sensitivity is to have {flags.sensitive} set.

//. name: flags.parent_sensitive
//. type: bool
//. get:  {parent_sensitive()}
//. set:  NA
//. desc:
//. This is the second premise for the widgets sensitivity. Once
//. it has {flags.sensitive} and {flags.parent_sensitive}
//. set, its state is
//. effectively sensitive.

//. name: flags.visible
//. type: bool
//. get:  {visible()}
//. set:  {show()}, {hide()}
//. desc:
//. Implies that a widget will be flagged {flags.mapped} as soon as its
//. parent is mapped. If not set, implies that a widget is not onscreen,
//. therefore !{flags.mapped}.

//. name: name
//. type: string
//. get:  {get_name()}
//. set:  {set_name()}
//. desc: The widgets name. If the widget does not have a name
//.   then its name is its classes name.
//.   Among other things, the widget name is used to determine
//.   the style to use for a widget.

//. name: parent
//. type: Gtk_Widget *
//. get:
//. set:  {set_parent()}, {reparent()}
//. desc: Parent of this widget.
//.
//. This is normally set by the
//. container to which the widget is added.

//. name: requisition
//. type: GtkRequisition
//. get:
//. set:  {size_request()}
//. desc: The widgets desired size.

//. name: state
//. type: GtkStateType
//. get:  {get_state()}
//. set:  {set_state()}
//. desc: The saved state of the widget. When a widgets state
//.     is changed to {\enum GTK_STATE_INSENSITIVE} via
//.     set_state or set_sensitive
//.     the old state is kept around in this field. The state
//.     will be restored once the widget gets sensitive again.
//.
//.     Available states:
//.     {\enum GTK_STATE_NORMAL, GTK_STATE_ACTIVE, GTK_STATE_PRELIGHT,
//.     GTK_STATE_SELECTED, GTK_STATE_INSENSITIVE }

//. name: style
//. type: Gtk::Style *
//. get:  {get_style()}
//. set:  {set_style()}
//. desc:  The style for the widget. The style contains the
//.      colors the widget should be drawn in for each state
//.      along with graphics contexts used to draw with and
//.      the font to use for text.
//.
//.      Set {Gtk::Style::} for more info.

//. name: window
//. type: Gdk_Window
//. get:  {get_window()}
//. set:
//. desc: The widgets window or its parent window if it does
//.   not have a window, which will be indicated
//.   {no_window()}.



#endif
