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 #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
00462 while(*p && isspace(*p))
00463 p++;
00464
00465 wstart=p;
00466
00467
00468 while(*p && !(isspace(*p) || *p==','))
00469 p++;
00470 if (*p)
00471
00472 *(p++)=0;
00473
00474
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