gwenhywfar
4.3.3
|
00001 /*************************************************************************** 00002 begin : Wed Jan 20 2010 00003 copyright : (C) 2010 by Martin Preuss 00004 email : martin@libchipcard.de 00005 00006 *************************************************************************** 00007 * * 00008 * This library is free software; you can redistribute it and/or * 00009 * modify it under the terms of the GNU Lesser General Public * 00010 * License as published by the Free Software Foundation; either * 00011 * version 2.1 of the License, or (at your option) any later version. * 00012 * * 00013 * This library is distributed in the hope that it will be useful, * 00014 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * 00016 * Lesser General Public License for more details. * 00017 * * 00018 * You should have received a copy of the GNU Lesser General Public * 00019 * License along with this library; if not, write to the Free Software * 00020 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * 00021 * MA 02111-1307 USA * 00022 * * 00023 ***************************************************************************/ 00024 00025 00026 #ifdef HAVE_CONFIG_H 00027 # include <config.h> 00028 #endif 00029 00030 #define DISABLE_DEBUGLOG 00031 00032 00033 #include "widget_p.h" 00034 00035 #include <gwenhywfar/text.h> 00036 #include <gwenhywfar/debug.h> 00037 #include <gwenhywfar/dialog_be.h> 00038 00039 #include <assert.h> 00040 #include <ctype.h> 00041 00042 00043 00044 GWEN_TREE_FUNCTIONS(GWEN_WIDGET, GWEN_Widget) 00045 GWEN_INHERIT_FUNCTIONS(GWEN_WIDGET) 00046 00047 00048 00049 00050 GWEN_WIDGET *GWEN_Widget_new(GWEN_DIALOG *dlg) { 00051 GWEN_WIDGET *w; 00052 00053 GWEN_NEW_OBJECT(GWEN_WIDGET, w); 00054 w->refCount=1; 00055 GWEN_INHERIT_INIT(GWEN_WIDGET, w); 00056 GWEN_TREE_INIT(GWEN_WIDGET, w); 00057 00058 w->dialog=dlg; 00059 00060 return w; 00061 } 00062 00063 00064 00065 void GWEN_Widget_free(GWEN_WIDGET *w) { 00066 if (w) { 00067 assert(w->refCount); 00068 if (w->refCount>1) { 00069 w->refCount--; 00070 } 00071 else { 00072 int i; 00073 00074 GWEN_TREE_FINI(GWEN_WIDGET, w); 00075 GWEN_INHERIT_FINI(GWEN_WIDGET, w); 00076 free(w->name); 00077 for (i=0; i<GWEN_WIDGET_TEXTCOUNT; i++) 00078 free(w->text[i]); 00079 free(w->iconFile); 00080 free(w->imageFile); 00081 w->refCount=0; 00082 GWEN_FREE_OBJECT(w); 00083 } 00084 } 00085 } 00086 00087 00088 00089 00090 GWEN_DIALOG *GWEN_Widget_GetDialog(const GWEN_WIDGET *w) { 00091 assert(w); 00092 assert(w->refCount); 00093 00094 return w->dialog; 00095 } 00096 00097 00098 00099 GWEN_DIALOG *GWEN_Widget_GetTopDialog(const GWEN_WIDGET *w) { 00100 GWEN_DIALOG *dlg; 00101 GWEN_DIALOG *pdlg; 00102 00103 assert(w); 00104 assert(w->refCount); 00105 00106 dlg=w->dialog; 00107 if (dlg) { 00108 while( (pdlg=GWEN_Dialog_GetParentDialog(dlg)) ) 00109 dlg=pdlg; 00110 00111 return w->dialog; 00112 } 00113 return NULL; 00114 } 00115 00116 00117 00118 void *GWEN_Widget_GetImplData(const GWEN_WIDGET *w, int index) { 00119 assert(w); 00120 assert(w->refCount); 00121 if (index<GWEN_WIDGET_IMPLDATACOUNT) 00122 return w->impl_data[index]; 00123 else { 00124 DBG_ERROR(GWEN_LOGDOMAIN, "Index out of range"); 00125 return NULL; 00126 } 00127 } 00128 00129 00130 00131 void GWEN_Widget_SetImplData(GWEN_WIDGET *w, int index, void *ptr) { 00132 assert(w); 00133 assert(w->refCount); 00134 if (index<GWEN_WIDGET_IMPLDATACOUNT) 00135 w->impl_data[index]=ptr; 00136 else { 00137 DBG_ERROR(GWEN_LOGDOMAIN, "Index out of range"); 00138 } 00139 } 00140 00141 00142 00143 uint32_t GWEN_Widget_GetFlags(const GWEN_WIDGET *w) { 00144 assert(w); 00145 assert(w->refCount); 00146 return w->flags; 00147 } 00148 00149 00150 00151 void GWEN_Widget_SetFlags(GWEN_WIDGET *w, uint32_t fl) { 00152 assert(w); 00153 assert(w->refCount); 00154 w->flags=fl; 00155 } 00156 00157 00158 00159 void GWEN_Widget_AddFlags(GWEN_WIDGET *w, uint32_t fl) { 00160 assert(w); 00161 assert(w->refCount); 00162 w->flags|=fl; 00163 } 00164 00165 00166 00167 void GWEN_Widget_SubFlags(GWEN_WIDGET *w, uint32_t fl) { 00168 assert(w); 00169 assert(w->refCount); 00170 w->flags&=~fl; 00171 } 00172 00173 00174 00175 GWEN_WIDGET_TYPE GWEN_Widget_GetType(const GWEN_WIDGET *w) { 00176 assert(w); 00177 assert(w->refCount); 00178 return w->wtype; 00179 } 00180 00181 00182 00183 void GWEN_Widget_SetType(GWEN_WIDGET *w, GWEN_WIDGET_TYPE t) { 00184 assert(w); 00185 assert(w->refCount); 00186 w->wtype=t; 00187 } 00188 00189 00190 00191 int GWEN_Widget_GetColumns(const GWEN_WIDGET *w) { 00192 assert(w); 00193 assert(w->refCount); 00194 return w->columns; 00195 } 00196 00197 00198 00199 void GWEN_Widget_SetColumns(GWEN_WIDGET *w, int i) { 00200 assert(w); 00201 assert(w->refCount); 00202 w->columns=i; 00203 } 00204 00205 00206 00207 int GWEN_Widget_GetRows(const GWEN_WIDGET *w) { 00208 assert(w); 00209 assert(w->refCount); 00210 return w->rows; 00211 } 00212 00213 00214 00215 void GWEN_Widget_SetRows(GWEN_WIDGET *w, int i) { 00216 assert(w); 00217 assert(w->refCount); 00218 w->rows=i; 00219 } 00220 00221 00222 00223 int GWEN_Widget_GetGroupId(const GWEN_WIDGET *w) { 00224 assert(w); 00225 assert(w->refCount); 00226 return w->groupId; 00227 } 00228 00229 00230 00231 void GWEN_Widget_SetGroupId(GWEN_WIDGET *w, int i) { 00232 assert(w); 00233 assert(w->refCount); 00234 w->groupId=i; 00235 } 00236 00237 00238 00239 int GWEN_Widget_GetWidth(const GWEN_WIDGET *w) { 00240 assert(w); 00241 assert(w->refCount); 00242 return w->width; 00243 } 00244 00245 00246 00247 void GWEN_Widget_SetWidth(GWEN_WIDGET *w, int i) { 00248 assert(w); 00249 assert(w->refCount); 00250 w->width=i; 00251 } 00252 00253 00254 00255 int GWEN_Widget_GetHeight(const GWEN_WIDGET *w) { 00256 assert(w); 00257 assert(w->refCount); 00258 return w->height; 00259 } 00260 00261 00262 00263 void GWEN_Widget_SetHeight(GWEN_WIDGET *w, int i) { 00264 assert(w); 00265 assert(w->refCount); 00266 w->height=i; 00267 } 00268 00269 00270 00271 const char *GWEN_Widget_GetText(const GWEN_WIDGET *w, int idx) { 00272 assert(w); 00273 assert(w->refCount); 00274 if (idx<0 || idx>=GWEN_WIDGET_TEXTCOUNT) 00275 return NULL; 00276 return w->text[idx]; 00277 } 00278 00279 00280 00281 void GWEN_Widget_SetText(GWEN_WIDGET *w, int idx, const char *s) { 00282 assert(w); 00283 assert(w->refCount); 00284 00285 if (idx>=0 && idx<GWEN_WIDGET_TEXTCOUNT) { 00286 free(w->text[idx]); 00287 if (s) w->text[idx]=strdup(s); 00288 else w->text[idx]=NULL; 00289 } 00290 } 00291 00292 00293 00294 const char *GWEN_Widget_GetName(const GWEN_WIDGET *w) { 00295 assert(w); 00296 assert(w->refCount); 00297 return w->name; 00298 } 00299 00300 00301 00302 void GWEN_Widget_SetName(GWEN_WIDGET *w, const char *s) { 00303 assert(w); 00304 assert(w->refCount); 00305 free(w->name); 00306 if (s) w->name=strdup(s); 00307 else w->name=NULL; 00308 } 00309 00310 00311 00312 const char *GWEN_Widget_GetIconFileName(const GWEN_WIDGET *w) { 00313 assert(w); 00314 assert(w->refCount); 00315 return w->iconFile; 00316 } 00317 00318 00319 00320 void GWEN_Widget_SetIconFileName(GWEN_WIDGET *w, const char *s) { 00321 assert(w); 00322 assert(w->refCount); 00323 free(w->iconFile); 00324 if (s) w->iconFile=strdup(s); 00325 else w->iconFile=NULL; 00326 } 00327 00328 00329 00330 const char *GWEN_Widget_GetImageFileName(const GWEN_WIDGET *w) { 00331 assert(w); 00332 assert(w->refCount); 00333 return w->imageFile; 00334 } 00335 00336 00337 00338 void GWEN_Widget_SetImageFileName(GWEN_WIDGET *w, const char *s) { 00339 assert(w); 00340 assert(w->refCount); 00341 free(w->imageFile); 00342 if (s) w->imageFile=strdup(s); 00343 else w->imageFile=NULL; 00344 } 00345 00346 00347 00348 00349 00350 GWEN_WIDGET_TYPE GWEN_Widget_Type_fromString(const char *s) { 00351 if (s && *s) { 00352 if (strcasecmp(s, "unknown")==0) 00353 return GWEN_Widget_TypeUnknown; 00354 else if (strcasecmp(s, "none")==0) 00355 return GWEN_Widget_TypeNone; 00356 else if (strcasecmp(s, "label")==0) 00357 return GWEN_Widget_TypeLabel; 00358 else if (strcasecmp(s, "pushButton")==0) 00359 return GWEN_Widget_TypePushButton; 00360 else if (strcasecmp(s, "lineEdit")==0) 00361 return GWEN_Widget_TypeLineEdit; 00362 else if (strcasecmp(s, "textEdit")==0) 00363 return GWEN_Widget_TypeTextEdit; 00364 else if (strcasecmp(s, "comboBox")==0) 00365 return GWEN_Widget_TypeComboBox; 00366 else if (strcasecmp(s, "radioButton")==0) 00367 return GWEN_Widget_TypeRadioButton; 00368 else if (strcasecmp(s, "progressBar")==0) 00369 return GWEN_Widget_TypeProgressBar; 00370 else if (strcasecmp(s, "groupBox")==0) 00371 return GWEN_Widget_TypeGroupBox; 00372 else if (strcasecmp(s, "hSpacer")==0) 00373 return GWEN_Widget_TypeHSpacer; 00374 else if (strcasecmp(s, "vSpacer")==0) 00375 return GWEN_Widget_TypeVSpacer; 00376 else if (strcasecmp(s, "hLayout")==0) 00377 return GWEN_Widget_TypeHLayout; 00378 else if (strcasecmp(s, "vLayout")==0) 00379 return GWEN_Widget_TypeVLayout; 00380 else if (strcasecmp(s, "gridLayout")==0) 00381 return GWEN_Widget_TypeGridLayout; 00382 else if (strcasecmp(s, "listBox")==0) 00383 return GWEN_Widget_TypeListBox; 00384 else if (strcasecmp(s, "dialog")==0) 00385 return GWEN_Widget_TypeDialog; 00386 else if (strcasecmp(s, "tabBook")==0) 00387 return GWEN_Widget_TypeTabBook; 00388 else if (strcasecmp(s, "tabPage")==0) 00389 return GWEN_Widget_TypeTabPage; 00390 else if (strcasecmp(s, "widgetStack")==0) 00391 return GWEN_Widget_TypeWidgetStack; 00392 else if (strcasecmp(s, "checkBox")==0) 00393 return GWEN_Widget_TypeCheckBox; 00394 else if (strcasecmp(s, "scrollArea")==0) 00395 return GWEN_Widget_TypeScrollArea; 00396 else if (strcasecmp(s, "hLine")==0) 00397 return GWEN_Widget_TypeHLine; 00398 else if (strcasecmp(s, "vLine")==0) 00399 return GWEN_Widget_TypeVLine; 00400 else if (strcasecmp(s, "textBrowser")==0) 00401 return GWEN_Widget_TypeTextBrowser; 00402 else if (strcasecmp(s, "spinBox")==0) 00403 return GWEN_Widget_TypeSpinBox; 00404 else { 00405 DBG_ERROR(GWEN_LOGDOMAIN, "Unknown widget type [%s]", s); 00406 } 00407 } 00408 return GWEN_Widget_TypeUnknown; 00409 } 00410 00411 00412 00413 const char *GWEN_Widget_Type_toString(GWEN_WIDGET_TYPE t) { 00414 switch(t) { 00415 case GWEN_Widget_TypeNone: return "none"; 00416 case GWEN_Widget_TypeLabel: return "label"; 00417 case GWEN_Widget_TypePushButton: return "pushButton"; 00418 case GWEN_Widget_TypeLineEdit: return "lineEdit"; 00419 case GWEN_Widget_TypeTextEdit: return "textEdit"; 00420 case GWEN_Widget_TypeComboBox: return "comboBox"; 00421 case GWEN_Widget_TypeRadioButton: return "radioButton"; 00422 case GWEN_Widget_TypeProgressBar: return "progressBar"; 00423 case GWEN_Widget_TypeGroupBox: return "groupBox"; 00424 case GWEN_Widget_TypeHSpacer: return "hSpacer"; 00425 case GWEN_Widget_TypeVSpacer: return "vSpacer"; 00426 case GWEN_Widget_TypeHLayout: return "hLayout"; 00427 case GWEN_Widget_TypeVLayout: return "vLayout"; 00428 case GWEN_Widget_TypeGridLayout: return "gridLayout"; 00429 case GWEN_Widget_TypeListBox: return "listBox"; 00430 case GWEN_Widget_TypeDialog: return "dialog"; 00431 case GWEN_Widget_TypeTabBook: return "tabBook"; 00432 case GWEN_Widget_TypeTabPage: return "tabPage"; 00433 case GWEN_Widget_TypeWidgetStack: return "widgetStack"; 00434 case GWEN_Widget_TypeCheckBox: return "checkBox"; 00435 case GWEN_Widget_TypeScrollArea: return "scrollArea"; 00436 case GWEN_Widget_TypeHLine: return "hLine"; 00437 case GWEN_Widget_TypeVLine: return "vLine"; 00438 case GWEN_Widget_TypeTextBrowser: return "textBrowser"; 00439 case GWEN_Widget_TypeSpinBox: return "spinBox"; 00440 case GWEN_Widget_TypeUnknown: return "unknown"; 00441 } 00442 00443 return "unknown"; 00444 } 00445 00446 00447 00448 uint32_t GWEN_Widget_Flags_fromString(const char *s){ 00449 uint32_t fl=0; 00450 00451 if (s && *s) { 00452 char *copy; 00453 char *p; 00454 00455 copy=strdup(s); 00456 p=copy; 00457 00458 while(*p) { 00459 char *wstart; 00460 00461 /* skip blanks */ 00462 while(*p && isspace(*p)) 00463 p++; 00464 /* save start of word */ 00465 wstart=p; 00466 00467 /* find end of word */ 00468 while(*p && !(isspace(*p) || *p==',')) 00469 p++; 00470 if (*p) 00471 /* set blank or comma to 0, advance pointer */ 00472 *(p++)=0; 00473 00474 /* parse flags */ 00475 if (strcasecmp(wstart, "fillX")==0) 00476 fl|=GWEN_WIDGET_FLAGS_FILLX; 00477 else if (strcasecmp(wstart, "fillY")==0) 00478 fl|=GWEN_WIDGET_FLAGS_FILLY; 00479 else if (strcasecmp(wstart, "readOnly")==0) 00480 fl|=GWEN_WIDGET_FLAGS_READONLY; 00481 else if (strcasecmp(wstart, "password")==0) 00482 fl|=GWEN_WIDGET_FLAGS_PASSWORD; 00483 else if (strcasecmp(wstart, "default")==0) 00484 fl|=GWEN_WIDGET_FLAGS_DEFAULT_WIDGET; 00485 else if (strcasecmp(wstart, "decorShrinkable")==0) 00486 fl|=GWEN_WIDGET_FLAGS_DECOR_SHRINKABLE; 00487 else if (strcasecmp(wstart, "decorStretchable")==0) 00488 fl|=GWEN_WIDGET_FLAGS_DECOR_STRETCHABLE; 00489 else if (strcasecmp(wstart, "decorMinimize")==0) 00490 fl|=GWEN_WIDGET_FLAGS_DECOR_MINIMIZE; 00491 else if (strcasecmp(wstart, "decorMaximize")==0) 00492 fl|=GWEN_WIDGET_FLAGS_DECOR_MAXIMIZE; 00493 else if (strcasecmp(wstart, "decorClose")==0) 00494 fl|=GWEN_WIDGET_FLAGS_DECOR_CLOSE; 00495 else if (strcasecmp(wstart, "decorMenu")==0) 00496 fl|=GWEN_WIDGET_FLAGS_DECOR_MENU; 00497 else if (strcasecmp(wstart, "fixedWidth")==0) 00498 fl|=GWEN_WIDGET_FLAGS_FIXED_WIDTH; 00499 else if (strcasecmp(wstart, "fixedHeight")==0) 00500 fl|=GWEN_WIDGET_FLAGS_FIXED_HEIGHT; 00501 else if (strcasecmp(wstart, "equalWidth")==0) 00502 fl|=GWEN_WIDGET_FLAGS_EQUAL_WIDTH; 00503 else if (strcasecmp(wstart, "equalHeight")==0) 00504 fl|=GWEN_WIDGET_FLAGS_EQUAL_HEIGHT; 00505 else if (strcasecmp(wstart, "justifyLeft")==0) 00506 fl|=GWEN_WIDGET_FLAGS_JUSTIFY_LEFT; 00507 else if (strcasecmp(wstart, "justifyRight")==0) 00508 fl|=GWEN_WIDGET_FLAGS_JUSTIFY_RIGHT; 00509 else if (strcasecmp(wstart, "justifyTop")==0) 00510 fl|=GWEN_WIDGET_FLAGS_JUSTIFY_TOP; 00511 else if (strcasecmp(wstart, "justifyBottom")==0) 00512 fl|=GWEN_WIDGET_FLAGS_JUSTIFY_BOTTOM; 00513 else if (strcasecmp(wstart, "justifyCenterX")==0) 00514 fl|=GWEN_WIDGET_FLAGS_JUSTIFY_CENTERX; 00515 else if (strcasecmp(wstart, "justifyCenterY")==0) 00516 fl|=GWEN_WIDGET_FLAGS_JUSTIFY_CENTERY; 00517 else if (strcasecmp(wstart, "noWordWrap")==0) 00518 fl|=GWEN_WIDGET_FLAGS_NO_WORDWRAP; 00519 } 00520 } 00521 00522 return fl; 00523 } 00524 00525 00526 00527 int GWEN_Widget_ReadXml(GWEN_WIDGET *w, GWEN_XMLNODE *node) { 00528 const char *s; 00529 00530 s=GWEN_XMLNode_GetProperty(node, "name", NULL); 00531 if (s && *s) 00532 GWEN_Widget_SetName(w, s); 00533 00534 s=GWEN_XMLNode_GetProperty(node, "type", "unknown"); 00535 if (s && *s) { 00536 w->wtype=GWEN_Widget_Type_fromString(s); 00537 if (w->wtype==GWEN_Widget_TypeUnknown) { 00538 DBG_ERROR(GWEN_LOGDOMAIN, "unknown type in node"); 00539 GWEN_XMLNode_Dump(node, 2); 00540 return GWEN_ERROR_BAD_DATA; 00541 } 00542 } 00543 else { 00544 DBG_ERROR(GWEN_LOGDOMAIN, "type property missing in node"); 00545 return GWEN_ERROR_BAD_DATA; 00546 } 00547 00548 s=GWEN_XMLNode_GetProperty(node, "flags", NULL); 00549 if (s && *s) 00550 w->flags=GWEN_Widget_Flags_fromString(s); 00551 00552 s=GWEN_XMLNode_GetProperty(node, "columns", NULL); 00553 if (s && *s) { 00554 if (1!=sscanf(s, "%d", &(w->columns))) { 00555 DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); 00556 return GWEN_ERROR_BAD_DATA; 00557 } 00558 } 00559 00560 s=GWEN_XMLNode_GetProperty(node, "rows", NULL); 00561 if (s && *s) { 00562 if (1!=sscanf(s, "%d", &(w->rows))) { 00563 DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); 00564 return GWEN_ERROR_BAD_DATA; 00565 } 00566 } 00567 00568 s=GWEN_XMLNode_GetProperty(node, "width", NULL); 00569 if (s && *s) { 00570 if (1!=sscanf(s, "%d", &(w->width))) { 00571 DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); 00572 return GWEN_ERROR_BAD_DATA; 00573 } 00574 } 00575 00576 s=GWEN_XMLNode_GetProperty(node, "height", NULL); 00577 if (s && *s) { 00578 if (1!=sscanf(s, "%d", &(w->height))) { 00579 DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); 00580 return GWEN_ERROR_BAD_DATA; 00581 } 00582 } 00583 00584 s=GWEN_XMLNode_GetProperty(node, "text", NULL); 00585 if (s && *s) 00586 GWEN_Widget_SetText(w, 0, GWEN_Dialog_TranslateString(w->dialog, s)); 00587 00588 s=GWEN_XMLNode_GetProperty(node, "icon", NULL); 00589 if (s && *s) 00590 GWEN_Widget_SetIconFileName(w, s); 00591 00592 s=GWEN_XMLNode_GetProperty(node, "image", NULL); 00593 if (s && *s) 00594 GWEN_Widget_SetImageFileName(w, s); 00595 00596 s=GWEN_XMLNode_GetProperty(node, "groupId", NULL); 00597 if (s && *s) { 00598 if (1!=sscanf(s, "%d", &(w->groupId))) { 00599 DBG_ERROR(GWEN_LOGDOMAIN, "Value [%s] is not an integer", s); 00600 return GWEN_ERROR_BAD_DATA; 00601 } 00602 } 00603 00604 return 0; 00605 } 00606 00607 00608 00609 GWEN_WIDGET_SETINTPROPERTY_FN GWEN_Widget_SetSetIntPropertyFn(GWEN_WIDGET *w, 00610 GWEN_WIDGET_SETINTPROPERTY_FN fn) { 00611 GWEN_WIDGET_SETINTPROPERTY_FN of; 00612 00613 assert(w); 00614 assert(w->refCount); 00615 00616 of=w->setIntPropertyFn; 00617 w->setIntPropertyFn=fn; 00618 return of; 00619 } 00620 00621 00622 00623 GWEN_WIDGET_GETINTPROPERTY_FN GWEN_Widget_SetGetIntPropertyFn(GWEN_WIDGET *w, 00624 GWEN_WIDGET_GETINTPROPERTY_FN fn) { 00625 GWEN_WIDGET_GETINTPROPERTY_FN of; 00626 00627 assert(w); 00628 assert(w->refCount); 00629 00630 of=w->getIntPropertyFn; 00631 w->getIntPropertyFn=fn; 00632 return of; 00633 } 00634 00635 00636 00637 GWEN_WIDGET_SETCHARPROPERTY_FN GWEN_Widget_SetSetCharPropertyFn(GWEN_WIDGET *w, 00638 GWEN_WIDGET_SETCHARPROPERTY_FN fn) { 00639 GWEN_WIDGET_SETCHARPROPERTY_FN of; 00640 00641 assert(w); 00642 assert(w->refCount); 00643 00644 of=w->setCharPropertyFn; 00645 w->setCharPropertyFn=fn; 00646 return of; 00647 } 00648 00649 00650 00651 GWEN_WIDGET_GETCHARPROPERTY_FN GWEN_Widget_SetGetCharPropertyFn(GWEN_WIDGET *w, 00652 GWEN_WIDGET_GETCHARPROPERTY_FN fn) { 00653 GWEN_WIDGET_GETCHARPROPERTY_FN of; 00654 00655 assert(w); 00656 assert(w->refCount); 00657 00658 of=w->getCharPropertyFn; 00659 w->getCharPropertyFn=fn; 00660 return of; 00661 } 00662 00663 00664 00665 GWEN_WIDGET_ADDCHILDGUIWIDGET_FN GWEN_Widget_SetAddChildGuiWidgetFn(GWEN_WIDGET *w, 00666 GWEN_WIDGET_ADDCHILDGUIWIDGET_FN fn) { 00667 GWEN_WIDGET_ADDCHILDGUIWIDGET_FN of; 00668 00669 assert(w); 00670 assert(w->refCount); 00671 00672 of=w->addChildGuiWidgetFn; 00673 w->addChildGuiWidgetFn=fn; 00674 return of; 00675 } 00676 00677 00678 00679 int GWEN_Widget_SetIntProperty(GWEN_WIDGET *w, 00680 GWEN_DIALOG_PROPERTY prop, 00681 int index, 00682 int value, 00683 int doSignal) { 00684 assert(w); 00685 assert(w->refCount); 00686 00687 if (w->setIntPropertyFn) 00688 return w->setIntPropertyFn(w, prop, index, value, doSignal); 00689 else 00690 return GWEN_ERROR_NOT_IMPLEMENTED; 00691 } 00692 00693 00694 00695 int GWEN_Widget_GetIntProperty(GWEN_WIDGET *w, 00696 GWEN_DIALOG_PROPERTY prop, 00697 int index, 00698 int defaultValue) { 00699 assert(w); 00700 assert(w->refCount); 00701 00702 if (w->getIntPropertyFn) 00703 return w->getIntPropertyFn(w, prop, index, defaultValue); 00704 else 00705 return defaultValue; 00706 } 00707 00708 00709 00710 int GWEN_Widget_SetCharProperty(GWEN_WIDGET *w, 00711 GWEN_DIALOG_PROPERTY prop, 00712 int index, 00713 const char *value, 00714 int doSignal) { 00715 assert(w); 00716 assert(w->refCount); 00717 00718 if (w->setCharPropertyFn) 00719 return w->setCharPropertyFn(w, prop, index, value, doSignal); 00720 else 00721 return GWEN_ERROR_NOT_IMPLEMENTED; 00722 } 00723 00724 00725 00726 const char* GWEN_Widget_GetCharProperty(GWEN_WIDGET *w, 00727 GWEN_DIALOG_PROPERTY prop, 00728 int index, 00729 const char *defaultValue) { 00730 assert(w); 00731 assert(w->refCount); 00732 00733 if (w->getCharPropertyFn) 00734 return w->getCharPropertyFn(w, prop, index, defaultValue); 00735 else 00736 return defaultValue; 00737 } 00738 00739 00740 00741 int GWEN_Widget_AddChildGuiWidget(GWEN_WIDGET *w, GWEN_WIDGET *wChild) { 00742 assert(w); 00743 assert(w->refCount); 00744 00745 if (w->addChildGuiWidgetFn) 00746 return w->addChildGuiWidgetFn(w, wChild); 00747 else 00748 return GWEN_ERROR_NOT_IMPLEMENTED; 00749 } 00750 00751 00752 00753 00754