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
00029
00030
00031
00032 #include <stdlib.h>
00033
00034 #include "gadgets/gadget_SysClose.h"
00035
00036 #include "debug.h"
00037 #include "classes.h"
00038 #include "Bases.h"
00039 #include "Module.h"
00040 #include "Window.h"
00041 #include "Common.h"
00042
00043
00044 struct _sys_close
00045 {
00046 Gadget_t gadget;
00047
00048
00049
00050 int state;
00051 };
00052
00053 static bases_Modules_t *api;
00054 VERSION("SysClose.gadget",1,0,"Gergely Gati","g.gati@freemail.hu");
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064 static void sys_close_get_extent(Gadget_t *this, Extent_t *min, Extent_t *max)
00065 {
00066 debug_Begin();
00067
00068 min->width=1;
00069 min->height=1;
00070 max->width=GADGET_MAXIMUM_SIZE;
00071 max->height=GADGET_MAXIMUM_SIZE;
00072
00073 debug_End();
00074 }
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 static void sys_close_layout(Gadget_t *this, Rect_t *rect)
00086 {
00087
00088
00089 debug_Begin();
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109 debug_End();
00110 }
00111
00112
00113 static void sys_close_suggest_extent(Gadget_t *this, Rect_t *rect)
00114 {
00115 debug_Begin();
00116
00117 debug_End();
00118 }
00119
00120
00121 static int sys_close_input_event_handler(Gadget_t *gad, struct glw_Event *event)
00122 {
00123 int ret=0;
00124
00125
00126 debug_Begin();
00127
00128 switch(event->event)
00129 {
00130 case GLWEV_MOUSEMOVE:
00131 {
00132 if(((sys_close *)gad)->state!=0)
00133 {
00134 if(!api->gui_Call(GUI_ISINSIDE,TAG_GUI_RECT,&gad->rect,TAG_GUI_X,event->mousex,TAG_GUI_Y,event->mousey,TAG_DONE))
00135 {
00136 api->gadget_Call(GADGET_SET_STATE,TAG_GADGET_OBJECT,gad,TAG_GADGET_STATE,GADST_NORMAL,TAG_GADGET_VISUAL,1,TAG_DONE);
00137 }
00138 else
00139 {
00140 api->gadget_Call(GADGET_SET_STATE,TAG_GADGET_OBJECT,gad,TAG_GADGET_STATE,GADST_PRESSED,TAG_GADGET_VISUAL,1,TAG_DONE);
00141 }
00142 }
00143 break;
00144 }
00145 case GLWEV_MOUSEBUTTONS:
00146 {
00147 switch(event->data)
00148 {
00149 case GLWEVD_LEFTDOWN:
00150 {
00151 api->gadget_Call(GADGET_SET_STATE,TAG_GADGET_OBJECT,gad,TAG_GADGET_STATE,GADST_PRESSED,TAG_GADGET_VISUAL,1,TAG_DONE);
00152 api->window_Call(WINDOW_SETACTIVE,TAG_WIN_OBJECT,gad->window,TAG_WIN_GADGET,gad,TAG_DONE);
00153 ((sys_close *)gad)->state=1;
00154 break;
00155 }
00156 case GLWEVD_LEFTUP:
00157 {
00158 api->gadget_Call(GADGET_SET_STATE,TAG_GADGET_OBJECT,gad,TAG_GADGET_STATE,GADST_NORMAL,TAG_GADGET_VISUAL,1,TAG_DONE);
00159 api->window_Call(WINDOW_SETACTIVE,TAG_WIN_OBJECT,gad->window,TAG_WIN_GADGET,NULL,TAG_DONE);
00160 ((sys_close *)gad)->state=0;
00161 if(api->gui_Call(GUI_ISINSIDE,TAG_GUI_RECT,&gad->rect,TAG_GUI_X,event->mousex,TAG_GUI_Y,event->mousey,TAG_DONE))
00162 {
00163 ret=api->gadget_Call(GADGET_CALLBACK,TAG_GADGET_OBJECT,gad,TAG_GADGET_EVENT,CBK_WINDOW_CLOSE,TAG_GADGET_EVENT_DATA,0L,TAG_DONE);
00164 }
00165 break;
00166 }
00167 }
00168 break;
00169 }
00170 }
00171
00172 debug_End();
00173
00174 return(ret);
00175 }
00176
00177
00178 int sys_close_init_gadget(Gadget_t *this, tag *taglist)
00179 {
00180 debug_Begin();
00181
00182
00183
00184
00185
00186
00187 ((sys_close *)this)->state=0;
00188
00189 debug_End();
00190
00191 return(0);
00192 }
00193
00194
00195 static int sys_close_gadget_event_handler(Gadget_t *this, int event, tag *taglist)
00196 {
00197 int ret=-1;
00198
00199 debug_Begin();
00200
00201 if(this!=NULL&&event>=0)
00202 {
00203 switch(event)
00204 {
00205 case GADEV_INIT_GADGET:
00206 {
00207 ret=sys_close_init_gadget(this,taglist);
00208 break;
00209 }
00210 case GADEV_DELETE_GADGET:
00211 {
00212 ret=0;
00213 break;
00214 }
00215 case GADEV_GET_EXTENT:
00216 {
00217 Extent_t *min,*max,n,x;
00218 min=(Extent_t *)tag_GetTagData(taglist,TAG_GAD_EXTMIN,(u32)&n);
00219 max=(Extent_t *)tag_GetTagData(taglist,TAG_GAD_EXTMAX,(u32)&x);
00220 sys_close_get_extent(this,min,max);
00221 ret=0;
00222 break;
00223 }
00224 case GADEV_SUGGEST_EXTENT:
00225 {
00226 Rect_t *rect,r;
00227 rect=(Rect_t *)tag_GetTagData(taglist,TAG_GAD_RECT,(u32)&r);
00228 sys_close_suggest_extent(this,rect);
00229 ret=0;
00230 break;
00231 }
00232 case GADEV_LAYOUT:
00233 case GADEV_DAMAGE:
00234 {
00235 Rect_t *rect,r;
00236 rect=(Rect_t *)tag_GetTagData(taglist,TAG_GAD_RECT,(u32)&r);
00237 sys_close_layout(this,rect);
00238 ret=0;
00239 break;
00240 }
00241 }
00242 }
00243
00244 debug_End();
00245
00246 return(ret);
00247 }
00248
00249
00250
00251
00252
00253
00254 static void init_sys_close_class(u32 module)
00255 {
00256 api->gadget_Call(GADGET_REGISTER_CLASS,
00257 TAG_GADGET_CLASS_ID,CLASS_SYS_CLOSE_ID,
00258 TAG_GADGET_NAME,CLASS_SYS_CLOSE_NAME,
00259 TAG_GADGET_BINDING,NULL,
00260 TAG_GADGET_COLOR_NAMES,NULL,
00261 TAG_GADGET_CUSTOM_NAMES,NULL,
00262 TAG_GADGET_STATE_MASK,GADSTF_NORMAL|GADSTF_PRESSED,
00263 TAG_GADGET_MODULE,module,
00264 TAG_GADGET_GADGET_SIZE,sizeof(sys_close),
00265 TAG_GADGET_METHODS,NULL,
00266 TAG_GADGET_INPUT_EVENT_HANDLER,sys_close_input_event_handler,
00267 TAG_GADGET_EVENT_HANDLER,NULL,
00268 TAG_GADGET_GADGET_EVENT_HANDLER,sys_close_gadget_event_handler,
00269 TAG_DONE);
00270 }
00271
00272
00273 EXPORT int module_Init(u32 module, bases_Modules_t *bases)
00274 {
00275 api=bases;
00276 init_sys_close_class(module); return(0);
00277 }