// -*- C++ -*-
#ifndef _gtkdispatch_h_included_
#define _gtkdispatch_h_included_

//
// Gtkのウィジェット用のディスパッチャ
//

#include <gtk/gtk.h>

#define WIDGET_DESTROY 1
#define WIDGET_EXPOSE 2
#define WIDGET_BUTTON_PRESS 4
#define WIDGET_CLICK 8
#define WIDGET_ACTIVATE 16
#define WIDGET_DELETE 32
#define WIDGET_ROW_SELECTED 64
#define WIDGET_KEY_PRESS 128
#define WIDGET_RESIZE 256
#define WIDGET_MOTION 512
#define WIDGET_BUTTON_RELEASE 1024

class WidgetIf {
public:
    virtual ~WidgetIf();
    virtual void destroy(GtkWidget *){};
    virtual void expose(GtkWidget *){};
    virtual void button_press(GtkWidget *,int x,int y,int b){};
    virtual void button_release(GtkWidget *,int x,int y,int b){};
    virtual void clicked(GtkWidget *){};
    virtual void activate(GtkWidget *,gpointer ){};
    // delete eventに対してTRUEを返すと実際にウィンドウは閉じられる。
    virtual int delete_event(GtkWidget *){return FALSE;};
    virtual void select_row(GtkWidget *,int ,int ){};
    virtual void key_press(GtkWidget *,GdkEventKey *){};
    virtual void resize(GtkWidget *,int w,int h){};
    virtual void motion(GtkWidget *,int x,int y,int b){};
};

//eventごとに異なるreceiverは付けれない。
void add_widget_watch(GtkWidget *,int ,WidgetIf *,void *opt=0);
void remove_widget_watch(GtkWidget *);

#endif
/*
 * Local variables:
 *  c-indent-level: 4
 *  c-basic-offset: 4
 * End:
 */
