Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals  

Gadget.h

Go to the documentation of this file.
00001 /*
00002  *    gui - [gega user interface] the flexible solution for user interface problems
00003  *    Copyright (C) 2002  Gergely Gati
00004  *
00005  *    This program is free software; you can redistribute it and/or modify
00006  *    it under the terms of the GNU General Public License as published by
00007  *    the Free Software Foundation; version 2 of the License.
00008  *
00009  *    This program is distributed in the hope that it will be useful,
00010  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *    GNU General Public License for more details.
00013  *
00014  *    You should have received a copy of the GNU General Public License
00015  *    along with this program; if not, write to the Free Software
00016  *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00017  *
00018  *    Gergely Gati
00019  *      email:           g.gati@freemail.hu
00020  *      AIM screenname:  GatiGergely
00021  *      ICQ number:      93131690
00022  *
00023  */
00024 /*
00025  *  gadget.h
00026  */
00027 
00028 #ifndef __GADGET_H
00029 #define __GADGET_H
00030 
00031 #include "types.h"
00032 #include "Bases.h"
00033 #include "Skin.h"
00034 
00035 
00036 /*
00037  *  Defines
00038  */
00039 
00040 #define GADST_COUNT           5
00041 
00042 #define GADST_NORMAL          (0)
00043 #define GADST_PRESSED         (1)
00044 #define GADST_DISABLED        (2)
00045 #define GADST_FOCUSED         (3)
00046 #define GADST_DEFAULT         (4)
00047 #define GADST_NONE            GADST_COUNT
00048 
00049 #define GADSTF_NORMAL         (1L<<GADST_NORMAL)
00050 #define GADSTF_PRESSED        (1L<<GADST_PRESSED)
00051 #define GADSTF_DISABLED       (1L<<GADST_DISABLED)
00052 #define GADSTF_FOCUSED        (1L<<GADST_FOCUSED)
00053 #define GADSTF_DEFAULT        (1L<<GADST_DEFAULT)
00054 
00055 #define GADGET_MAXIMUM_SIZE 0x1000
00056 #define GADGET_TAGBASE      0x1000
00057 
00058 #define GADGET_ILLEGAL_ID     0
00059 #define GADGET_SYSBASE        0x6000
00060 #define GADGET_SUBGADGET_BASE 0x7000
00061 #define GADGET_NOID           0x8000
00062 
00063 #define GADGET_DEFAULT_FONTNAME       "Arial"
00064 #define GADGET_DEFAULT_FONTSIZE       (16)
00065 #define GADGET_DEFAULT_FONTSTYLE      (0L)
00066 #define GADGET_DEFAULT_FONTWEIGHT     (0L)
00067 #define GADGET_DEFAULT_FONTDECORATION (0L)
00068 
00069 #define GADGET_FONTSTYLE_ITALIC            (1)
00070 #define GADGET_FONTWEIGHT_BOLD             (1)
00071 #define GADGET_FONTDECORATION_UNDERLINED   (1)
00072 
00073 #define GADGET_DESCRIPTOR_DONE   {-1,NULL,0,0,NULL}
00074 
00075 // flags for gadget_RenderCustom()
00076 #define GADGET_CUS_BACKGROUND    (1L<<0)
00077 #define GADGET_CUS_LAYOUT        (1L<<1)
00078 #define GADGET_CUS_REFRESH       (1L<<2)
00079 
00080 #define GADGET_METHOD_DONE {NULL,NULL,0L}
00081 #define GADGET_METHOD_MAX_COUNT 512
00082 #define GADGET_METHOD_BASE 16
00083 
00084 #define GADGET_METHOD_VOID  (1L<<0)
00085 
00086 // values for TAG_GAD_LAYOUT
00087 #define GADGET_LAYOUT_FREE   0
00088 #define GADGET_LAYOUT_FIXED  1
00089 #define GADGET_LAYOUT_SQUARE 2
00090 
00091 #define TAG_GAD_HINT            ((TAG_USER+1)|TAGT_STRING)
00092 #define TAG_GAD_FONTNAME        ((TAG_USER+2)|TAGT_STRING)
00093 #define TAG_GAD_FONTSIZE        (TAG_USER+3)
00094 #define TAG_GAD_FONTWEIGHT      (TAG_USER+4)
00095 #define TAG_GAD_FONTSTYLE       (TAG_USER+5)
00096 #define TAG_GAD_FONTDECORATION  (TAG_USER+6)
00097 #define TAG_GAD_SKIN            ((TAG_USER+7)|TAGT_STRING)
00098 #define TAG_GAD_WIDTH           (TAG_USER+8)
00099 #define TAG_GAD_HEIGHT          (TAG_USER+9)
00100 #define TAG_GAD_LAYOUT          (TAG_USER+10)
00101 #define TAG_GAD_EXTMIN          (TAG_USER+11)
00102 #define TAG_GAD_EXTMAX          (TAG_USER+12)
00103 #define TAG_GAD_RECT            (TAG_USER+13)
00104 
00105 //newly defined tags BEGIN
00106 #define TAG_GADGET_STATE_NAME           ((TAG_USER+100)|TAGT_STRING)
00107 #define TAG_GADGET_CLASS_ID             (TAG_USER+101)
00108 #define TAG_GADGET_NAME                 ((TAG_USER+102)|TAGT_STRING)
00109 #define TAG_GADGET_CLASS_DATA           (TAG_USER+103)
00110 #define TAG_GADGET_GADGET_SIZE          (TAG_USER+104)
00111 #define TAG_GADGET_METHODS              (TAG_USER+105)
00112 #define TAG_GADGET_BINDING              (TAG_USER+106)
00113 #define TAG_GADGET_COLOR_NAMES          (TAG_USER+107)
00114 #define TAG_GADGET_CUSTOM_NAMES         (TAG_USER+108)
00115 #define TAG_GADGET_STATE_MASK           (TAG_USER+109)
00116 #define TAG_GADGET_CLASS_NAME           ((TAG_USER+110)|TAGT_STRING)
00117 #define TAG_GADGET_OBJECT               (TAG_USER+111)
00118 #define TAG_GADGET_INDEX                (TAG_USER+112)
00119 #define TAG_GADGET_ROOT                 (TAG_USER+113)
00120 #define TAG_GADGET_NEW_PARENT           (TAG_USER+114)
00121 #define TAG_GADGET_NEW_CHILD            (TAG_USER+115)
00122 #define TAG_GADGET_STATE                (TAG_USER+116)
00123 #define TAG_GADGET_VISUAL               (TAG_USER+117)
00124 #define TAG_GADGET_EVENT                (TAG_USER+118)
00125 #define TAG_GADGET_SIZE                 (TAG_USER+119)
00126 #define TAG_GADGET_COLOR                (TAG_USER+120)
00127 #define TAG_GADGET_DESCRIPTOR           (TAG_USER+121)
00128 #define TAG_GADGET_WINDOW               (TAG_USER+122)
00129 #define TAG_GADGET_PARENT               (TAG_USER+123)
00130 #define TAG_GADGET_GADGET_ID            (TAG_USER+124)
00131 #define TAG_GADGET_RECT                 (TAG_USER+125)
00132 #define TAG_GADGET_CUSTOM               (TAG_USER+126)
00133 #define TAG_GADGET_FLAGS                (TAG_USER+127)
00134 #define TAG_GADGET_HIDDEN               (TAG_USER+128)
00135 #define TAG_GADGET_MIN                  (TAG_USER+129)
00136 #define TAG_GADGET_MAX                  (TAG_USER+130)
00137 #define TAG_GADGET_TAGLIST              (TAG_USER+131)
00138 #define TAG_GADGET_EVENT_DATA           (TAG_USER+132)
00139 #define TAG_GADGET_METHOD               (TAG_USER+133)
00140 #define TAG_GADGET_MODULE               (TAG_USER+134)
00141 #define TAG_GADGET_INPUT_EVENT_HANDLER  (TAG_USER+135)
00142 #define TAG_GADGET_EVENT_HANDLER        (TAG_USER+136)
00143 #define TAG_GADGET_GADGET_EVENT_HANDLER (TAG_USER+137)
00144 #define TAG_GADGET_MEM                  (TAG_USER+138)
00145 #define TAG_GADGET_LOCALE               (TAG_USER+139)
00146 #define TAG_GADGET_VALUE                ((TAG_USER+140)|TAGT_STRING)
00147 #define TAG_GADGET_TAGNAME              (TAG_USER+141)
00148 #define TAG_GADGET_TAGVALUE             (TAG_USER+142)
00149 //newly defined tags END
00150 
00151 
00152 #define MET_GAD_SET_FONT    (0)
00153 #define MET_GAD_SET_HINT    (1)
00154 #define GADGET_METHOD_COUNT (2)
00155 
00156 /*
00157  *  Flags for gadget_ClassData_t.
00158  */
00159 
00160 #define GAD_INVISIBLE (1L<<0)
00161 
00162 #define GADGET_ILLEGAL_CLASS 0L
00163 
00164 /*
00165  *  Flags for gadget.
00166  */
00167 
00168 #define GAD_HIDDEN   (1L<<0)
00169 #define GAD_LOCALIZE (1L<<1)
00170 #define GAD_ONSCREEN (1L<<2)
00171 
00172 
00173 //Enum for calling BEGIN
00174 enum gadget_functions
00175 {
00176   GADGET_GET_STATE_NAME=GADGET_FUNCBASE,
00177   GADGET_REGISTER_CLASS,
00178   GADGET_FIND_CLASS,
00179   GADGET_FIND_CLASS_BY_NAME,
00180   GADGET_FATHER,
00181   GADGET_FIRST_CHILD,
00182   GADGET_LAST_CHILD,
00183   GADGET_NTH_CHILD,
00184   GADGET_LEFT_BROTHER,
00185   GADGET_RIGHT_BROTHER,
00186   GADGET_FIRST_BROTHER,
00187   GADGET_LAST_BROTHER,
00188   GADGET_LEFT_BROTHER_CIRCULAR,
00189   GADGET_RIGHT_BROTHER_CIRCULAR,
00190   GADGET_FIRST_NODE,
00191   GADGET_NEXT_NODE,
00192   GADGET_ATTACH_FIRST,
00193   GADGET_ATTACH,
00194   GADGET_DETACH,
00195   GADGET_SET_STATE,
00196   GADGET_POST_MESSAGE,
00197   GADGET_GET_FONT,
00198   GADGET_GET_COLOR,
00199   GADGET_GET_STATE,
00200   GADGET_NEW,
00201   GADGET_DELETE_SUBTREE,
00202   GADGET_SEARCH,
00203   GADGET_SEARCH_IN_WINDOW,
00204   GADGET_RENDER_CUSTOM,
00205   GADGET_REFRESH,
00206   GADGET_FIND_PARENT,
00207   GADGET_HIDE_ALL,
00208   GADGET_FIND_RIGHT_MOST,
00209   GADGET_GET_HINT,
00210   GADGET_GET_EXTENT,
00211   GADGET_GET_RECT,
00212   GADGET_SUGGEST_EXTENT,
00213   GADGET_DELETE_GADGET,
00214   GADGET_INIT_GADGET,
00215   GADGET_INPUT_EVENT_HANDLER,
00216   GADGET_LAYOUT,
00217   GADGET_DAMAGE,
00218   GADGET_CALLBACK,
00219   GADGET_GET_UNIQUE_ID,
00220   GADGET_METHODCALL,
00221   GADGET_SAVE,
00222   GADGET_RESTORE,
00223   GADGET_BIND,
00224   GADGET_FUNC_DONE
00225 };
00226 //Enum for calling END
00227 
00228 
00229 /*
00230  *  Gadget callback message types.
00231  */
00232 
00233 #define CBK_GADGET_DOWN               (1L<<0)
00234 #define CBK_GADGET_UP                 (1L<<1)
00235 #define CBK_GADGET_MOVE               (1L<<2)
00236 #define CBK_GADGET_HINT               (1L<<3)
00237 #define CBK_GADGET_CLICKED            (1L<<4)
00238 #define CBK_WINDOW_OPENED             (1L<<5)
00239 #define CBK_WINDOW_CLOSE              (1L<<6)
00240 #define CBK_WINDOW_SIZE               (1L<<7)
00241 #define CBK_WINDOW_OUTPUT             (1L<<8)
00242 #define CBK_CHILD_WINDOW_OPENED       (1L<<9)
00243 #define CBK_CHILD_WINDOW_CLOSED       (1L<<10)
00244 #define CBK_WINDOW_CLOSED             (1L<<11)
00245 #define CBK_WINDOW_ACTIVATED          (1L<<12)
00246 #define CBK_WINDOW_INACTIVATED        (1L<<13)
00247 
00248 enum gadget_events
00249 {
00250   GADEV_INIT_GADGET,
00251   GADEV_DELETE_GADGET,
00252   GADEV_GET_EXTENT,
00253   GADEV_SUGGEST_EXTENT,
00254   GADEV_LAYOUT,
00255   GADEV_DAMAGE,
00256   GADEV_SAVE,
00257   GADEV_RESTORE,
00258   GADEV_COUNT
00259 };
00260 
00261 #define GADGET_BINDING_DONE {NULL,0L,0,NULL}
00262 
00263 #define GADGET_INVALID  0
00264 #define GADGET_INT      1
00265 #define GADGET_STRING   2
00266 #define GADGET_SELECT   3
00267 #define GADGET_BOOL     4
00268 
00269 // gxml_Check flags
00270 #define GADGET_REQUIRED  (1<<1)
00271 
00272 #define GADGET_CHECK_DONE { GADGET_ILLEGAL_ID, GADGET_ILLEGAL_CLASS, 0L }
00273 
00274 
00275 /*
00276  *  Typedefs
00277  */
00278 
00279 
00280 typedef struct
00281 {
00282   char *name;
00283   u32 tagname;
00284   int datatype;       // GDT_INT, GDT_STRING, GDT_SELECT, GDT_BOOL
00285   char *value_mask;   // szabvanyos kifejezes stringnel
00286 } gadget_Binding_t;
00287 
00288 typedef struct
00289 {
00290   u32 gadget_id;
00291   char *class_name;
00292   int flags;
00293 } gadget_Check_t;
00294 
00295 
00296 struct gadget_Descriptor_s
00297 {
00298   int level;
00299   char *class_name;
00300   u32 gadget_id;
00301   int weight;
00302   tag *taglist;
00303 };
00304 
00305 
00306 typedef struct
00307 {
00308   char *name;
00309   u32 (*function)(Gadget_t *this, tag *taglist);
00310   int flags;
00311 } gadget_Method_t;
00312 
00313 
00314 typedef struct
00315 {
00316   u32 class_id;
00317   u32 module;
00318   char *class_name;
00319   int gadget_counter;
00320   int gadget_size;
00321   int (*input_event_handler)(Gadget_t *this, struct glw_Event *event);
00322   int (*event_handler)(Gadget_t *this, Gadget_t *sender, int event, u32 event_data);
00323   int (*gadget_event_handler)(Gadget_t *this, int event, tag *taglist);
00324   int flags;
00325   int method_count;
00326   gadget_Method_t *methods;
00327   gadget_Binding_t *xmlbinding;
00328   u32 state_mask;
00329   int color_count;
00330   char **color_names;
00331   int custom_count;
00332   char **custom_names;
00333 } gadget_ClassData_t;
00334 
00335 
00336 
00337 struct Gadget_s
00338 {
00339   Window_t *window;
00340   Gadget_t *parent;
00341   Gadget_t *next;
00342   Gadget_t *prev;
00343   Gadget_t *firstchild;
00344   Gadget_t *lastchild;
00345   u32 gadget_id;
00346   gadget_ClassData_t *class_data;
00347   Rect_t rect;
00348   int weight;
00349   char *hint;
00350   u32 font;
00351   int layout;                 // GADGET_LAYOUT_FREE|GADGET_LAYOUT_FIXED|GADGET_LAYOUT_SQUARE
00352   int layout_width;
00353   int layout_height;
00354   int flags;
00355   int state;
00356   u32 callback_discard_mask;
00357   u32 *color_table[GADST_COUNT];
00358   void *skin;
00359   u32 skincrc;
00360 };
00361 
00362 
00363 /*
00364  *  Prototypes
00365  */
00366 
00367 //system only
00368 int gadget_Init(void);
00369 void gadget_CleanUp(void);
00370 gadget_Binding_t *gadget_GetCommonBind(void);
00371 void gadget_SetDiscardMask(Gadget_t *this, u32 add_event, u32 remove_event);
00372 int gadget_LoadClass(gui_App_t *app, char *class, Skin_t *skin);
00373 int gadget_ChangeSkin(Gadget_t *this, Skin_t *skin);
00374 
00375 //TAGLIST->
00376 
00377 u32 gadget_Call(int function, u32 firsttag, ...);
00378 u32 gadget_CallTL(int function, tag *taglist);
00379 
00380 //Prototypes BEGIN
00381 u32 gadget_GetStateName(u32 firsttag, ...);
00382 u32 gadget_GetStateNameTL(tag *taglist);
00383 u32 gadget_RegisterClass(u32 firsttag, ...);
00384 u32 gadget_RegisterClassTL(tag *taglist);
00385 u32 gadget_FindClass(u32 firsttag, ...);
00386 u32 gadget_FindClassTL(tag *taglist);
00387 u32 gadget_FindClassByName(u32 firsttag, ...);
00388 u32 gadget_FindClassByNameTL(tag *taglist);
00389 u32 gadget_Father(u32 firsttag, ...);
00390 u32 gadget_FatherTL(tag *taglist);
00391 u32 gadget_FirstChild(u32 firsttag, ...);
00392 u32 gadget_FirstChildTL(tag *taglist);
00393 u32 gadget_LastChild(u32 firsttag, ...);
00394 u32 gadget_LastChildTL(tag *taglist);
00395 u32 gadget_NthChild(u32 firsttag, ...);
00396 u32 gadget_NthChildTL(tag *taglist);
00397 u32 gadget_LeftBrother(u32 firsttag, ...);
00398 u32 gadget_LeftBrotherTL(tag *taglist);
00399 u32 gadget_RightBrother(u32 firsttag, ...);
00400 u32 gadget_RightBrotherTL(tag *taglist);
00401 u32 gadget_FirstBrother(u32 firsttag, ...);
00402 u32 gadget_FirstBrotherTL(tag *taglist);
00403 u32 gadget_LastBrother(u32 firsttag, ...);
00404 u32 gadget_LastBrotherTL(tag *taglist);
00405 u32 gadget_LeftBrotherCircular(u32 firsttag, ...);
00406 u32 gadget_LeftBrotherCircularTL(tag *taglist);
00407 u32 gadget_RightBrotherCircular(u32 firsttag, ...);
00408 u32 gadget_RightBrotherCircularTL(tag *taglist);
00409 u32 gadget_FirstNode(u32 firsttag, ...);
00410 u32 gadget_FirstNodeTL(tag *taglist);
00411 u32 gadget_NextNode(u32 firsttag, ...);
00412 u32 gadget_NextNodeTL(tag *taglist);
00413 u32 gadget_AttachFirst(u32 firsttag, ...);
00414 u32 gadget_AttachFirstTL(tag *taglist);
00415 u32 gadget_Attach(u32 firsttag, ...);
00416 u32 gadget_AttachTL(tag *taglist);
00417 u32 gadget_Detach(u32 firsttag, ...);
00418 u32 gadget_DetachTL(tag *taglist);
00419 u32 gadget_SetState(u32 firsttag, ...);
00420 u32 gadget_SetStateTL(tag *taglist);
00421 u32 gadget_PostMessage(u32 firsttag, ...);
00422 u32 gadget_PostMessageTL(tag *taglist);
00423 u32 gadget_GetFont(u32 firsttag, ...);
00424 u32 gadget_GetFontTL(tag *taglist);
00425 u32 gadget_GetColor(u32 firsttag, ...);
00426 u32 gadget_GetColorTL(tag *taglist);
00427 u32 gadget_GetState(u32 firsttag, ...);
00428 u32 gadget_GetStateTL(tag *taglist);
00429 u32 gadget_New(u32 firsttag, ...);
00430 u32 gadget_NewTL(tag *taglist);
00431 u32 gadget_DeleteSubtree(u32 firsttag, ...);
00432 u32 gadget_DeleteSubtreeTL(tag *taglist);
00433 u32 gadget_Search(u32 firsttag, ...);
00434 u32 gadget_SearchTL(tag *taglist);
00435 u32 gadget_SearchInWindow(u32 firsttag, ...);
00436 u32 gadget_SearchInWindowTL(tag *taglist);
00437 u32 gadget_RenderCustom(u32 firsttag, ...);
00438 u32 gadget_RenderCustomTL(tag *taglist);
00439 u32 gadget_Refresh(u32 firsttag, ...);
00440 u32 gadget_RefreshTL(tag *taglist);
00441 u32 gadget_FindParent(u32 firsttag, ...);
00442 u32 gadget_FindParentTL(tag *taglist);
00443 u32 gadget_HideAll(u32 firsttag, ...);
00444 u32 gadget_HideAllTL(tag *taglist);
00445 u32 gadget_FindRightMost(u32 firsttag, ...);
00446 u32 gadget_FindRightMostTL(tag *taglist);
00447 u32 gadget_GetHint(u32 firsttag, ...);
00448 u32 gadget_GetHintTL(tag *taglist);
00449 u32 gadget_GetExtent(u32 firsttag, ...);
00450 u32 gadget_GetExtentTL(tag *taglist);
00451 u32 gadget_GetRect(u32 firsttag, ...);
00452 u32 gadget_GetRectTL(tag *taglist);
00453 u32 gadget_SuggestExtent(u32 firsttag, ...);
00454 u32 gadget_SuggestExtentTL(tag *taglist);
00455 u32 gadget_DeleteGadget(u32 firsttag, ...);
00456 u32 gadget_DeleteGadgetTL(tag *taglist);
00457 u32 gadget_InitGadget(u32 firsttag, ...);
00458 u32 gadget_InitGadgetTL(tag *taglist);
00459 u32 gadget_InputEventHandler(u32 firsttag, ...);
00460 u32 gadget_InputEventHandlerTL(tag *taglist);
00461 u32 gadget_Layout(u32 firsttag, ...);
00462 u32 gadget_LayoutTL(tag *taglist);
00463 u32 gadget_Damage(u32 firsttag, ...);
00464 u32 gadget_DamageTL(tag *taglist);
00465 u32 gadget_CallBack(u32 firsttag, ...);
00466 u32 gadget_CallBackTL(tag *taglist);
00467 u32 gadget_GetUniqueId(void);
00468 u32 gadget_GetUniqueIdTL(tag *taglist);
00469 u32 gadget_Save(u32 firsttag, ...);
00470 u32 gadget_SaveTL(tag *taglist);
00471 u32 gadget_Restore(u32 firsttag, ...);
00472 u32 gadget_RestoreTL(tag *taglist);
00473 u32 gadget_MethodCall(u32 firsttag, ...);
00474 u32 gadget_MethodCallTL(tag *taglist);
00475 u32 gadget_Bind(u32 firsttag, ...);
00476 u32 gadget_BindTL(tag *taglist);
00477 //Prototypes END
00478 
00479 #endif

Generated on Tue Jan 7 12:11:19 2003 for THEGUI by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002