Enlightenment CVS committal

Author  : ningerso
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/bin/tests/widget


Modified Files:
        ewl_widget.c 


Log Message:
Add tutorial for widget creation.

===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/bin/tests/widget/ewl_widget.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- ewl_widget.c        4 Jan 2007 07:49:23 -0000       1.3
+++ ewl_widget.c        7 Jan 2007 04:51:27 -0000       1.4
@@ -5,6 +5,104 @@
 #include <string.h>
 #include <stdlib.h>
 
+/**
+ * @addtogroup Ewl_Widget
+ * @section widget_tut Tutorial
+ *
+ * Small as small can be
+ * (originally at http://everburning.com/news/small-as-small-can-be)
+ * 
+ * Whats the minimum amount of work you need to do to create your own EWL
+ * widget? Just want something you can build on but dont know where to start?
+ * 
+ * Well, hopefully this should give you the base for starting your widget.
+ * Assuming youre creating a widget called My_Widget, the EWL convention is to
+ * have a my_widget.c and my_widget.h files. There are only a couple things you
+ * need to implement to get a working widget.
+ * 
+ * First, my_widget.h.
+ * 
+ * @code
+ *     #ifndef MY_WIDGET_H
+ *     #define MY_WIDGET_H
+ * 
+ *     #include <Ewl.h>
+ * 
+ *     #define MY_WIDGET(w) ((My_Widget *)w)
+ *     #define MY_WIDGET_TYPE "my_widget"
+ * 
+ *     typedef struct My_Widget My_Widget;
+ *     struct My_Widget
+ *     {
+ *         Ewl_Widget widget;
+ *     };
+ * 
+ *     Ewl_Widget *my_widget_new(void);
+ *     int my_widget_init(My_Widget *w);
+ * 
+ *     #endif
+ * @endcode
+ * 
+ * That wasnt so bad. What have we got? Well, the MY_WIDGET(w) define gives us 
a
+ * simple macro to cast other widgets to our widget. The second define,
+ * MY_WIDGET_TYPE, is a simple macro containing the type name of the widget.
+ * Well use that a bit later (and in any type checking we add to our widget.)
+ * 
+ * We then create the widget structure. In this case were inheriting from
+ * Ewl_Widget so its the first item in our struct (and not a pointer, thats
+ * important). This is how EWLs inhertiance works. The widget youre inheriting
+ * from is the first item in the struct and not a pointer. You will now be able
+ * to call any of the methods of the inherited class on the new class.
+ * 
+ * We then declare two methods. The convention in EWL is that the _new()
+ * function always takes no parameters (void). There is also always a _init()
+ * function that takes the widget as its only parameter and returns an int, if
+ * the initialization succeeded or failed.
+ * 
+ * With that out of the way, lets take a look at my_widget.c.
+ * 
+ * @code
+ *     #include "my_widget.h"
+ * 
+ *     Ewl_Widget *
+ *     my_widget_new(void)
+ *     {
+ *         Ewl_Widget *w;
+ * 
+ *         w = calloc(1, sizeof(My_Widget)));
+ *         if (!w) return NULL;
+ * 
+ *         if (!my_widget_init(MY_WIDGET(w)))
+ *         {
+ *                 free(w);
+ *                 return NULL;
+ *         }
+ *         return w;
+ *     }
+ * 
+ *     int
+ *     my_widget_init(My_Widget *w)
+ *     {
+ *          if (!ewl_widget_init(EWL_WIDGET(w)))
+ *                 return 0;
+ * 
+ *         ewl_widget_appearance_set(EWL_WIDGET(w), MY_WIDGET_TYPE);
+ *         ewl_widget_inherit(EWL_WIDGET(w), MY_WIDGET_TYPE);
+ * 
+ *         return 1;
+ *     }
+ * @endcode
+ * 
+ * Thats pretty simple. We create a new widget, initialize it and thats about
+ * it. In my_widget_init() we make sure we call ewl_widget_init() as thats the
+ * widget we are inheriting from and we then set our inheritance and appearance
+ * strings (notice the use of our type define from earlier).
+ * 
+ * With that youve got a simple widget. It doesnt do much, but it exists. Build
+ * on as you will.
+ * 
+ */
+
 static int create_test(Ewl_Container *box);
 static void ewl_widget_cb_toggle(Ewl_Widget *w, void *ev, void *data);
 static void ewl_widget_cb_first_click(Ewl_Widget *w, void *ev, void *data);



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys - and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to