gwenhywfar  4.3.1
widget.c
Go to the documentation of this file.
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