From 44a07609061c36a3e248a76c368a0fa697ad064d Mon Sep 17 00:00:00 2001 From: Petr Sykora Date: Thu, 18 Sep 2008 23:02:16 +0200 Subject: [PATCH] widget structure preview --- widget.c | 28 ++++++++++++++++++++++++++++ widget.h | 20 ++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 widget.c create mode 100644 widget.h diff --git a/widget.c b/widget.c new file mode 100644 index 0000000..ca83adc --- /dev/null +++ b/widget.c @@ -0,0 +1,28 @@ +#include "widget.h" +#include + + +int HandleEvent(TWidget *widget, char event[EVENT_LENGHT], void *data){ + TEventHandler *eh; + + eh = widget->handlers; + while(eh != 0){ + if(strncmp(event, eh->event, EVENT_LENGHT) == 0) + return eh->handler(widget, data, eh->userdata); + eh = eh->next; + }; + + return 0; +} + +void AddHandler(TWidget *widget char event[EVENT_LENGHT], int (*handler)(TWidget *widget, void *data, void *userdata), void *userdata){ + TEventHandler *eh; + + eh = malloc(sizeof(TEventHandler)); + memset(eh, 0, sizeof(TEventHandler)); //TODO:check if this is valid for eh->event + strncpy(eh->event, event, EVENT_LENGHT); + eh->userdata = userdata; + eh->next = widget->handlers; + eh->handler = handler; + widget->handlers = eh; +} diff --git a/widget.h b/widget.h new file mode 100644 index 0000000..2e137b7 --- /dev/null +++ b/widget.h @@ -0,0 +1,20 @@ +#ifndef __WIDGET_H_INCLUDED +#define __WIDGET_H_INCLUDED +#define EVENT_LENGTH 8 + + +typedef struct _TEventHandler{ + char event[EVENT_LENGHT]; + void *userdata; + int (*handler)(struct _TWidget *widget, void *data, void *userdata); + struct _TEventHandler *next; +}TEventHandler; + +typedef struct _TWidget{ + TEventHandler *handlers; //linked list of TEventHandler terminated by ->next==0 + void *data; +}TWidget; + +int HandleEvent(TWidget *widget, char event[EVENT_LENGHT], void *data); +void AddHandler(TWidget *widgetm char event[EVENT_LENGHT], int (*handler)(TWidget *widget, void *data, void *userdata), void *userdata); +#endif -- 2.11.4.GIT