00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef GWEN_UI_WIDGET_H
00029 #define GWEN_UI_WIDGET_H
00030
00031 #include <gwenhywfar/misc.h>
00032 #include <gwenhywfar/inherit.h>
00033
00034 typedef struct GWEN_WIDGET GWEN_WIDGET;
00035
00036 GWEN_LIST_FUNCTION_DEFS(GWEN_WIDGET, GWEN_Widget)
00037 GWEN_INHERIT_FUNCTION_DEFS(GWEN_WIDGET)
00038
00039 typedef enum {
00040 GWEN_WidgetColour_Default=1,
00041 GWEN_WidgetColour_Message,
00042 GWEN_WidgetColour_Unselected,
00043 GWEN_WidgetColour_Selected,
00044 GWEN_WidgetColour_Chosen,
00045 GWEN_WidgetColour_Title,
00046 GWEN_WidgetColour_Button
00047
00048 } GWEN_WIDGET_COLOUR;
00049
00050
00051 #include <gwenhywfar/ui/ui.h>
00052 #include <gwenhywfar/ui/event.h>
00053
00054
00055 #define GWEN_WIDGET_FLAGS_IGN_HELP 0x00000001
00056 #define GWEN_WIDGET_FLAGS_KEYPAD 0x00000002
00057 #define GWEN_WIDGET_FLAGS_SCROLL 0x00000004
00058 #define GWEN_WIDGET_FLAGS_ACTIVE 0x00000008
00059 #define GWEN_WIDGET_FLAGS_FOCUSABLE 0x00000010
00060 #define GWEN_WIDGET_FLAGS_BORDER 0x00000020
00061 #define GWEN_WIDGET_FLAGS_NEEDCURSOR 0x00000040
00062 #define GWEN_WIDGET_FLAGS_HCENTER 0x00000080
00063 #define GWEN_WIDGET_FLAGS_VCENTER 0x00000100
00064 #define GWEN_WIDGET_FLAGS_HIGHLIGHT 0x00000200
00065 #define GWEN_WIDGET_FLAGS_MODAL 0x00000400
00066
00067 #define GWEN_WIDGET_FLAGS_WINDOWFLAGS 0xffff0000
00068
00069 #define GWEN_WIDGET_FLAGS_DEFAULT (\
00070 GWEN_WIDGET_FLAGS_KEYPAD |\
00071 GWEN_WIDGET_FLAGS_ACTIVE |\
00072 GWEN_WIDGET_FLAGS_FOCUSABLE \
00073 )
00074
00075
00076 #define GWEN_WIDGET_STATE_HASFOCUS 0x00000001
00077 #define GWEN_WIDGET_STATE_SELECTED 0x00000002
00078 #define GWEN_WIDGET_STATE_ACTIVE 0x00000004
00079 #define GWEN_WIDGET_STATE_HIGHLIGHT 0x00000008
00080 #define GWEN_WIDGET_STATE_CLOSED 0x00000010
00081
00082
00083 #define GWEN_WIDGET_ATT_ESC_CHAR 0xff
00084 #define GWEN_WIDGET_ATT_NORMAL 0x00
00085 #define GWEN_WIDGET_ATT_STANDOUT 0x10
00086 #define GWEN_WIDGET_ATT_UNDERLINE 0x20
00087 #define GWEN_WIDGET_ATT_REVERSE 0x40
00088 #define GWEN_WIDGET_ATT_CHAR 0x80
00089 #define GWEN_WIDGET_COLOUR_MASK 0x0f
00090
00091 #define GWEN_WIDGET_CHAR_ESC_CHAR 0xfe
00092 #define GWEN_WIDGET_CHAR_VLINE 0x01
00093 #define GWEN_WIDGET_CHAR_HLINE 0x02
00094 #define GWEN_WIDGET_CHAR_ULCORNER 0x03
00095 #define GWEN_WIDGET_CHAR_URCORNER 0x04
00096 #define GWEN_WIDGET_CHAR_LLCORNER 0x05
00097 #define GWEN_WIDGET_CHAR_LRCORNER 0x06
00098 #define GWEN_WIDGET_CHAR_LTEE 0x07
00099 #define GWEN_WIDGET_CHAR_RTEE 0x08
00100 #define GWEN_WIDGET_CHAR_TTEE 0x09
00101 #define GWEN_WIDGET_CHAR_BTEE 0x0a
00102 #define GWEN_WIDGET_CHAR_BLOCK 0x0b
00103
00104
00105 #define GWEN_WIDGET_CMD_CLOSE 0x80000001
00106 #define GWEN_WIDGET_CMD_QUIT 0x80000002
00107 #define GWEN_WIDGET_CMD_FINISHED 0x80000003
00108
00109
00110 typedef GWEN_UI_RESULT (*GWEN_WIDGET_EVENTHANDLER_FN)(GWEN_WIDGET *w,
00111 GWEN_EVENT *e);
00112
00113 typedef int (*GWEN_WIDGET_RUN_FN)(GWEN_WIDGET *w);
00114
00115
00116 GWEN_WIDGET *GWEN_Widget_new(GWEN_WIDGET *parent,
00117 GWEN_TYPE_UINT32 flags,
00118 const char *name,
00119 const char *text,
00120 int x, int y, int width, int height);
00121
00122 void GWEN_Widget_free(GWEN_WIDGET *w);
00123 void GWEN_Widget_Attach(GWEN_WIDGET *w);
00124
00125
00126 GWEN_WIDGET *GWEN_Widget_GetParent(const GWEN_WIDGET *w);
00127 GWEN_WIDGET *GWEN_Widget_GetFirstChild(const GWEN_WIDGET *w);
00128
00129 int GWEN_Widget_GetX(const GWEN_WIDGET *w);
00130 int GWEN_Widget_GetY(const GWEN_WIDGET *w);
00131
00132 int GWEN_Widget_GetWidth(const GWEN_WIDGET *w);
00133 int GWEN_Widget_GetHeight(const GWEN_WIDGET *w);
00134 const char *GWEN_Widget_GetText(const GWEN_WIDGET *w);
00135
00136 int GWEN_Widget_GetCursorX(const GWEN_WIDGET *w);
00137 void GWEN_Widget_SetCursorX(GWEN_WIDGET *w, int x);
00138 int GWEN_Widget_GetCursorY(const GWEN_WIDGET *w);
00139 void GWEN_Widget_SetCursorY(GWEN_WIDGET *w, int y);
00140
00141 GWEN_TYPE_UINT32 GWEN_Widget_GetFlags(const GWEN_WIDGET *w);
00142 GWEN_TYPE_UINT32 GWEN_Widget_GetState(const GWEN_WIDGET *w);
00143
00144 GWEN_WIDGET_EVENTHANDLER_FN GWEN_Widget_GetEventHandler(const GWEN_WIDGET *w);
00145 void GWEN_Widget_SetEventHandler(GWEN_WIDGET *w,
00146 GWEN_WIDGET_EVENTHANDLER_FN f);
00147 void GWEN_Widget_SetRunFn(GWEN_WIDGET *w, GWEN_WIDGET_RUN_FN f);
00148
00149 int GWEN_Widget_SendEvent(GWEN_WIDGET *wRecipient,
00150 GWEN_WIDGET *wSender,
00151 GWEN_EVENT *e);
00152
00153 int GWEN_Widget_Redraw(GWEN_WIDGET *w);
00154 int GWEN_Widget_SetText(GWEN_WIDGET *w, const char *t,
00155 GWEN_EVENT_SETTEXT_MODE m);
00156 int GWEN_Widget_Move(GWEN_WIDGET *w, int x, int y);
00157 int GWEN_Widget_SetColour(GWEN_WIDGET *w, GWEN_WIDGET_COLOUR c);
00158 GWEN_WIDGET_COLOUR GWEN_Widget_GetColour(const GWEN_WIDGET *w);
00159
00160 int GWEN_Widget_SetFocus(GWEN_WIDGET *w);
00161 int GWEN_Widget_Destroy(GWEN_WIDGET *w);
00162 int GWEN_Widget_Update(GWEN_WIDGET *w);
00163 int GWEN_Widget_Refresh(GWEN_WIDGET *w);
00164 int GWEN_Widget_Scroll(GWEN_WIDGET *w, int byX, int byY);
00165 int GWEN_Widget_Scrolled(GWEN_WIDGET *w, int byX, int byY);
00166 int GWEN_Widget_WriteAt(GWEN_WIDGET *w,
00167 int x, int y,
00168 const char *t, int len);
00169 int GWEN_Widget_ChangeAtts(GWEN_WIDGET *w,
00170 GWEN_TYPE_UINT32 atts,
00171 int set);
00172 int GWEN_Widget_Clear(GWEN_WIDGET *w, int x, int y, GWEN_EVENT_CLEAR_MODE m);
00173 int GWEN_Widget_Highlight(GWEN_WIDGET *w, int x, int y, int len,
00174 GWEN_WIDGET_COLOUR hi);
00175 int GWEN_Widget_ContentChange(GWEN_WIDGET *w,
00176 int contentWidth,
00177 int contentHeight);
00178 int GWEN_Widget_Close(GWEN_WIDGET *w);
00179
00180 int GWEN_Widget_Changed(GWEN_WIDGET *w);
00181
00182
00183 const char *GWEN_Widget_GetHelpText(const GWEN_WIDGET *w);
00184 void GWEN_Widget_SetHelpText(GWEN_WIDGET *w, const char *s);
00185
00186 const char *GWEN_Widget_GetDbVarName(const GWEN_WIDGET *w);
00187 void GWEN_Widget_SetDbVarName(GWEN_WIDGET *w, const char *s);
00188
00189
00190 int GWEN_Widget_IsChildOf(GWEN_WIDGET *wchild, GWEN_WIDGET *w);
00191 int GWEN_Widget_IsAncestorOf(GWEN_WIDGET *wc, GWEN_WIDGET *w);
00192
00193
00194 int GWEN_Widget_Run(GWEN_WIDGET *w);
00195
00196
00197 void GWEN_Widget_Subscribe(GWEN_WIDGET *w,
00198 GWEN_EVENT_TYPE t,
00199 GWEN_WIDGET *subscriber);
00200
00201 void GWEN_Widget_Unsubscribe(GWEN_WIDGET *w,
00202 GWEN_EVENT_TYPE t,
00203 GWEN_WIDGET *subscriber);
00204
00205 int GWEN_Widget_GetPhysicalX(const GWEN_WIDGET *w);
00206 int GWEN_Widget_GetPhysicalY(const GWEN_WIDGET *w);
00207
00208 GWEN_WIDGET *GWEN_Widget_FindByName(GWEN_WIDGET *w, const char *name);
00209
00210
00211
00216 const char *GWEN_Widget_GetName(const GWEN_WIDGET *w);
00217 GWEN_TYPE_UINT32 GWEN_Widget_GetId(const GWEN_WIDGET *w);
00218 void GWEN_Widget_SetTypeName(GWEN_WIDGET *w, const char *s);
00219 const char *GWEN_Widget_GetTypeName(const GWEN_WIDGET *w);
00220
00221 void GWEN_Widget_Dump(GWEN_WIDGET *w, int indent);
00225 #endif
00226
00227
00228
00229
00230