eGUI alias D4D  Release 3.0
Reference Manual
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
d4d_radio_button.c
Go to the documentation of this file.
1 /**************************************************************************
2 *
3 * Copyright 2014 by Petr Gargulak. eGUI Community.
4 * Copyright 2009-2013 by Petr Gargulak. Freescale Semiconductor, Inc.
5 *
6 ***************************************************************************
7 * This program is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU Lesser General Public License Version 3
9 * or later (the "LGPL").
10 *
11 * As a special exception, the copyright holders of the eGUI project give you
12 * permission to link the eGUI sources with independent modules to produce an
13 * executable, regardless of the license terms of these independent modules,
14 * and to copy and distribute the resulting executable under terms of your
15 * choice, provided that you also meet, for each linked independent module,
16 * the terms and conditions of the license of that module.
17 * An independent module is a module which is not derived from or based
18 * on this library.
19 * If you modify the eGUI sources, you may extend this exception
20 * to your version of the eGUI sources, but you are not obligated
21 * to do so. If you do not wish to do so, delete this
22 * exception statement from your version.
23 *
24 * This program is distributed in the hope that it will be useful,
25 * but WITHOUT ANY WARRANTY; without even the implied warranty of
26 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
27 *
28 * You should have received a copy of the GNU General Public License
29 * and the GNU Lesser General Public License along with this program.
30 * If not, see <http://www.gnu.org/licenses/>.
31 *
32 ***************************************************************************/
46 #include "d4d.h"
48 
49 //Internal API
52 
53 static void D4D_RadioButtonChangeValue(D4D_OBJECT_PTR pThis, D4D_BOOL value);
54 
56 {
57  D4D_DEFSTR("Radio Button"),
59  NULL,
61 };
62 
63 typedef struct
64 {
65  D4D_POINT position;
66  D4D_GEOMETRY contentGeom;
67  D4D_GEOMETRY BmpGeom;
68  D4D_GEOMETRY TxtGeom;
69  D4D_POINT iconCentre;
70  D4D_COOR iconRadius;
71 } D4D_RADIOBUTTON_TMP_VAL;
72 
73 #define _calc (*((D4D_RADIOBUTTON_TMP_VAL*)d4d_scratchPad))
74 
75 
77 {
78  D4D_RADIOBUTTON* pRdBtn = D4D_GET_RADIOBUTTON(pThis);
79  D4D_SIZE sizeBmpEnabled;
80  D4D_COOR tmp_BorderOffset;
81 
82  _calc.position = D4D_GetClientToScreenPoint(pThis, &pThis->position);
83  D4D_ComputeGeometry(&(_calc.contentGeom), pThis);
84 
85  sizeBmpEnabled = D4D_GetBmpSize(pRdBtn->pBmpChecked);
86 
87  _calc.BmpGeom = _calc.contentGeom;
88 
89  if(!sizeBmpEnabled.cx || !sizeBmpEnabled.cy)
90  {
91  _calc.BmpGeom.sz.cy = (D4D_COOR)(_calc.BmpGeom.sz.cy / 2);
92  _calc.BmpGeom.sz.cx = _calc.BmpGeom.sz.cy;
93  }else
94  _calc.BmpGeom.sz = sizeBmpEnabled;
95 
96  tmp_BorderOffset = (D4D_COOR)((_calc.contentGeom.sz.cy - _calc.BmpGeom.sz.cy) / 2);
97  _calc.BmpGeom.pnt.x += tmp_BorderOffset;
98  _calc.BmpGeom.pnt.y += tmp_BorderOffset;
99 
100  if(pRdBtn->textBuff.pText)
101  {
102  _calc.TxtGeom = _calc.contentGeom;
103 
104  _calc.TxtGeom.pnt.x = (D4D_COOR) (_calc.BmpGeom.pnt.x + _calc.BmpGeom.sz.cx + D4D_CHECKBOX_TEXT_OFFSET);
105  _calc.TxtGeom.sz.cx -= (D4D_COOR) (_calc.TxtGeom.pnt.x - _calc.contentGeom.pnt.x);
106  #if D4D_ROUND_CORNER_ENABLE != D4D_FALSE
107  _calc.TxtGeom.sz.cx -= (D4D_COOR) (pThis->radius / 2);
108  #endif
109  }
110 
111  if(D4D_RADIOBUTTON_MIN_SIZE > (_calc.BmpGeom.sz.cx / 2))
112  _calc.iconRadius = (D4D_COOR)(_calc.BmpGeom.sz.cx / 2);
113  else
114  _calc.iconRadius = D4D_RADIOBUTTON_MIN_SIZE;
115 
116  _calc.iconCentre.x = (D4D_COOR)(_calc.BmpGeom.pnt.x + _calc.BmpGeom.sz.cx / 2);
117  _calc.iconCentre.y = (D4D_COOR)(_calc.BmpGeom.pnt.y + _calc.BmpGeom.sz.cy / 2);
118 
119 
120 
121 }
122 
123 
124 /*******************************************************
125 *
126 * RADIO BUTTON Drawing routine
127 *
128 *******************************************************/
129 
131 {
132  D4D_OBJECT* pThis = pMsg->pObject;
133  D4D_RADIOBUTTON* pRadioBtn = D4D_GET_RADIOBUTTON(pThis);
135  D4D_OBJECT_DRAWFLAGS draw = pMsg->prm.draw;
136  D4D_COLOR clrT, clrB;
137  D4D_CLR_SCHEME* pScheme = D4D_ObjectGetScheme(pThis);
138  D4D_BMP_PROPERTIES bmpProp;
139 
141 
143 
144  clrT = D4D_ObjectGetForeColor(pThis, draw);
145  clrB = D4D_ObjectGetBckgFillColor(pThis);
146 
148  D4D_FillRRect(&_calc.position, &pThis->size, clrB, pThis->radius);
149 
150  // Draw the frame
151  if(draw & (D4D_OBJECT_DRAWFLAGS_COMPLETE | D4D_OBJECT_DRAWFLAGS_STATE))
152  D4D_DrawFrame(pThis, clrT, clrB);
153 
154  // normal bitmap (also may be NULL if simple rect button is needed
156  {
157  if(pRadioBtn->pBmpChecked != NULL)
158  D4D_DrawRBmpRect(&_calc.BmpGeom.pnt, &_calc.BmpGeom.sz, pRadioBtn->pBmpChecked, bmpProp, pScheme->objectDepend.checkBox.iconBckg, (D4D_BOOL)!D4D_IsEnabled(pThis), pThis->radius); // draw the bitmap
159  else if(_calc.iconRadius > D4D_RADIOBUTTON_ICON_RING)
160  D4D_FillCircle(&_calc.iconCentre, (D4D_COOR)(_calc.iconRadius - D4D_RADIOBUTTON_ICON_RING), clrT);
161 
162  }
163  // no bitmap
164  else
165  {
166  if(pRadioBtn->pBmpUnChecked)
167  {
168  // draw the bitmap
169  D4D_DrawRBmpRect(&_calc.BmpGeom.pnt, &_calc.BmpGeom.sz, pRadioBtn->pBmpUnChecked, bmpProp, clrB, (D4D_BOOL)!D4D_IsEnabled(pThis), pThis->radius);
170  }else
171  {
172  // draw just a color rectangle instead of bitmap
173  D4D_FillCircle(&_calc.iconCentre, _calc.iconRadius, clrB);
174  }
175  }
176 
178  D4D_Circle(&_calc.iconCentre, _calc.iconRadius, D4D_LINE_THIN, clrT);
179 
180 
181 
182  // draw the text
183  if(pRadioBtn->textBuff.pText)
184  D4D_DrawTextRect(&_calc.TxtGeom.pnt, &_calc.TxtGeom.sz, &pRadioBtn->textBuff, clrT, D4D_ObjectGetBckgColor(pThis, draw));
185 
186 }
187 
188 /*******************************************************
189 *
190 * RADIO BUTTON key handling routine
191 *
192 *******************************************************/
193 
195 {
197 
198  // invoke "Click" event when enter key is pressed
199  if(pMsg->prm.key == D4D_KEY_SCANCODE_ENTER)
200  {
203  }
204 }
205 
206 /*******************************************************
207 *
208 * RADIO BUTTON key handling routine
209 *
210 *******************************************************/
211 
213 {
214  D4D_OBJECT* pThis = pMsg->pObject;
216 
217  // invoke "Click" event when enter key is pressed
218  if(pMsg->prm.key == D4D_KEY_SCANCODE_ENTER)
219  {
221  {
222  *pStatus &= ~D4D_RADIOBUTTON_STATUS_PRESSED_MASK;
223 
225  return;
226 
227  if(*pStatus & D4D_RADIOBUTTON_STATUS_CHECKED_MASK)
228  *pStatus &= ~D4D_RADIOBUTTON_STATUS_CHECKED_MASK;
229  else
231 
232  D4D_RadioButtonChangeValue(pThis,(D4D_BOOL)(*pStatus & D4D_RADIOBUTTON_STATUS_CHECKED_MASK));
233  }
235  }
236 }
237 
238 /*******************************************************
239 *
240 * RADIO BUTTON focus handling routine
241 *
242 *******************************************************/
243 
245 {
247 
249 }
250 
251 /*******************************************************
252 *
253 * RADIO BUTTON Touched Button handling routine
254 *
255 *******************************************************/
256 #if defined(D4D_LLD_TCH) || defined(D4D_LLD_MOUSE)
257  static void D4D_RadioButtonTouched(D4D_MESSAGE* pMsg)
258  {
260  {
261  if((D4D_GetFocusedObject(pMsg->pScreen) == pMsg->pObject) || (pMsg->pObject->pData->flags & D4D_OBJECT_F_FASTTOUCH))
262  {
264 
266  return;
267 
268  if(*pStatus & D4D_RADIOBUTTON_STATUS_CHECKED_MASK)
269  *pStatus &= ~D4D_RADIOBUTTON_STATUS_CHECKED_MASK;
270  else
272 
273  D4D_RadioButtonChangeValue(pMsg->pObject, (D4D_BOOL)(*pStatus & D4D_RADIOBUTTON_STATUS_CHECKED_MASK));
274 
276  }
277  D4D_FocusSet(pMsg->pScreen, pMsg->pObject);
278  }
279  }
280 #endif
281 
282 /******************************************************************************
283 * Begin of D4D_RADIO_BUTTON public functions
284 */
288 /**************************************************************************/
296 {
298 
299  if(((*pStatus & D4D_RADIOBUTTON_STATUS_CHECKED_MASK) && value) || (!(*pStatus & D4D_RADIOBUTTON_STATUS_CHECKED_MASK) && !value))
300  return ;
301 
302 
303  // remember new value
304  if(value)
306  else
307  *pStatus &= ~D4D_RADIOBUTTON_STATUS_CHECKED_MASK;
308 
310 
311  // notify user that the value has changed
312  D4D_RadioButtonChangeValue(pThis, (D4D_BOOL)(*pStatus & D4D_RADIOBUTTON_STATUS_CHECKED_MASK));
313 }
314 
315 
316 /**************************************************************************/
323 {
325 
326  return (D4D_BOOL)(*pStatus & D4D_RADIOBUTTON_STATUS_CHECKED_MASK);
327 }
328 
329 /******************************************************************************
330 * End of public functions */
332 /******************************************************************************/
333 
335 {
336  D4D_RADIOBUTTON* pRadioBtn = D4D_GET_RADIOBUTTON(pThis);
337 
338  if(value)
339  {
340  D4D_OBJECT** pObjects = (D4D_OBJECT**)(pThis->pData->pScreen->pObjects);
341  D4D_INDEX ix = 0;
342 
343  // uncheck rest radio buttons on screen!
344  if(pThis->pRelations)
345  {
346  D4D_OBJECT* pParent = D4D_GetParentObject((D4D_OBJECT*)pThis);
347  if(pParent)
348  pObjects = (D4D_OBJECT**)&pParent->pRelations[D4D_OBJECT_USR_DATA_CHILD_IX];
349  }
350 
351  while(pObjects[ix])
352  {
353  if(pObjects[ix]->pObjFunc->strName == d4d_radioButtonSysFunc.strName)
354  if(pObjects[ix] != pThis)
355  if(D4D_RadioButtonGetValue(pObjects[ix]))
356  D4D_RadioButtonSetValue(pObjects[ix], D4D_FALSE);
357 
358  ix++;
359  }
360  }
361 
362 
363  // notify user that the value has changed
364  if(pRadioBtn->OnChange)
365  pRadioBtn->OnChange((D4D_OBJECT*)pThis);
366 }
367 
368 
369 /**************************************************************/
379 /*******************************************************
380 *
381 * The main RADIO BUTTON message handler
382 *
383 *******************************************************/
384 
386 {
387  switch(pMsg->nMsgId)
388  {
389  case D4D_MSG_DRAW:
390  D4D_RadioButtonOnDraw(pMsg);
391  break;
392 
393  case D4D_MSG_KEYDOWN:
395  break;
396 
397  case D4D_MSG_KEYUP:
399  break;
400 
401  case D4D_MSG_KILLFOCUS:
403  break;
404 
405 #if defined(D4D_LLD_TCH) || defined(D4D_LLD_MOUSE)
407  if(D4D_GetMouseHoverObject() != pMsg->pObject)
408  break;
409  case D4D_MSG_TOUCHED:
410  D4D_RadioButtonTouched(pMsg);
411  break;
412 #endif
413 
414  default:
415  // call the default behavior
416  D4D_ObjOnMessage(pMsg);
417  }
418 }
419 
420 /**************************************************************/
426 {
427  return &(D4D_GET_RADIOBUTTON(pThis)->textBuff);
428 }
D4D_COLOR D4D_ObjectGetBckgColor(D4D_OBJECT *pObj, D4D_OBJECT_DRAWFLAGS draw)
Function return object current background color.
Definition: d4d_scheme.c:185
D4D_OBJECT * D4D_GetParentObject(D4D_OBJECT *pObject)
Definition: d4d_object.c:498
D4D_COLOR D4D_ObjectGetBckgFillColor(D4D_OBJECT *pObj)
Function return object current fill background color.
Definition: d4d_scheme.c:225
D4D_COLOR D4D_ObjectGetForeColor(D4D_OBJECT *pObj, D4D_OBJECT_DRAWFLAGS draw)
Function return object current fore color.
Definition: d4d_scheme.c:161
#define D4D_ALIGN_V_CENTER_MASK
The vertical center aligment option mask (for texts and also bitmaps).
Definition: d4d_base.h:234
const D4D_OBJECT_SYS_FUNCTION d4d_radioButtonSysFunc
struct D4D_SCREEN_S * pScreen
pointer to object screen owner - it is placed in RAM bacause one object could be used in multiply scr...
Definition: d4d_object.h:146
D4D_CLR_SCHEME_OBJ objectDepend
Sub structure of object non standard colors.
Definition: d4d_scheme.h:589
Type definition of eGUI point structure.
Definition: d4d_types.h:223
const D4D_OBJECT *const * pObjects
NULL-terminated array of objects (may lay in ROM)
Definition: d4d_screen.h:165
D4D object messages structure.
Definition: d4d_base.h:400
#define D4D_GetMouseHoverObject()
Definition: d4d_mouse.h:225
D4D_OBJECT_DATA_PTR pData
Pointer on runtime object data.
Definition: d4d_object.h:180
#define D4D_FALSE
This is definition of boolean operation value in eGUI - FALSE.
Definition: d4d_types.h:104
#define D4D_RADIOBUTTON_ICON_RING
This is pixel count of radio button annulus. If not defined, it sets to 2 pixel as a default...
The string type. This structure contains all properties about string in eGUI.
Definition: d4d_string.h:100
void D4D_RadioButtonSetValue(D4D_OBJECT_PTR pThis, D4D_BOOL value)
Function Sets the the radio button value.
D4D_OBJECT_INITFLAGS initFlags
The initializations object flags.
Definition: d4d_object.h:178
#define D4D_OBJECT_F_TABSTOP
Object can be focused.
Definition: d4d_object.h:74
#define D4D_DrawTextRect(ppt, psz, buffText, colorText, colorBkgd)
Function that draw text into defined rectangle on the screen.
#define D4D_CHECKBOX_TEXT_OFFSET
This is pixel count of check box text border offset. If not defined, it sets to 4 pixel as a default...
Definition: d4d_check_box.h:66
static void D4D_RadioButtonOnDraw(D4D_MESSAGE *pMsg)
Byte D4D_BMP_PROPERTIES
D4D_BMP_PROPERTIES type of image properties.
Definition: d4d_bmp.h:117
static void D4D_RadioButtonKillFocus(D4D_MESSAGE *pMsg)
D4D_CLR_SCHEME_CHECKB checkBox
The non standard colors of check box object.
Definition: d4d_scheme.h:569
#define D4D_TRUE
This is definition of boolean operation value in eGUI - TRUE.
Definition: d4d_types.h:106
void D4D_DrawFrame(D4D_OBJECT *pObject, D4D_COLOR clrT, D4D_COLOR clrB)
Function draw standard object frame based on the object settings and current state.
struct D4D_OBJECT_S * pObject
Pointer to object who is receiver of this message. If the receiver is just screen this field must be ...
Definition: d4d_base.h:402
Key Up message - is send when the object get new Key Up event.
Definition: d4d_base.h:377
D4D Driver main header file.
#define D4D_KEY_SCANCODE_ENTER
This macro is used to specify Key Scan Code ENTER. If not defined, it sets to 0x1C as a default...
Definition: d4d_base.h:300
D4D_OBJECT_FLAGS flags
runtime object flags
Definition: d4d_object.h:145
D4D_COLOR iconBckg
The checkbox background of icon.
Definition: d4d_scheme.h:543
#define D4D_RADIOBUTTON_STATUS_CHECKED_MASK
#define D4D_OBJECT_DRAWFLAGS_COMPLETE
Draw complete flag.
Definition: d4d_base.h:361
static void D4D_RadioButtonValue2Coor(D4D_OBJECT *pThis)
static void D4D_RadioButtonOnKeyDown(D4D_MESSAGE *pMsg)
Mouse Left Button Release message - is send in case that mouse left release is detected on this objec...
Definition: d4d_base.h:384
D4D Driver private header file.
#define D4D_DEFSTR(str)
Macro that helps declare the strings in eGUI.
Definition: d4d_string.h:246
This is the main structure of the color scheme in the D4D. It contains all the necessary colors to ru...
Definition: d4d_scheme.h:578
D4D_COOR cx
Size in axis X (width)
Definition: d4d_types.h:232
const D4D_BMP * pBmpChecked
Byte D4D_COOR
Type definition of eGUI coordination variables.
Definition: d4d_types.h:219
D4D_POINT position
Position on the screen/object.
Definition: d4d_object.h:169
D4D_BOOL D4D_RadioButtonGetValue(D4D_OBJECT_PTR pThis)
Function Gets the the radio button value.
#define D4D_OBJECT_USR_DATA_CHILD_IX
The relations object index to relation array for first child object.
Definition: d4d_object.h:103
#define D4D_OBJECT_DRAWFLAGS_STATE
Draw just change of state flag.
Definition: d4d_base.h:364
D4D_COOR radius
Object corners radius.
Definition: d4d_object.h:171
#define D4D_DrawRBmpRect(ppt,psz, pBmp, bmpProp, colorBkgd, greyScale, radius)
Definition: d4d.h:188
#define _calc
void D4D_Circle(D4D_POINT *pCenter, D4D_COOR r, D4D_LINETYPE ltype, D4D_COLOR color)
Function draw circle on the screen.
void D4D_ObjOnMessage(D4D_MESSAGE *pMsg)
Definition: d4d_object.c:443
void D4D_FillCircle(D4D_POINT *pCenter, D4D_COOR r, D4D_COLOR color)
Function draw filled circle on the screen.
void D4D_FocusSet(const D4D_SCREEN *pScreen, D4D_OBJECT_PTR pObject)
The function set the obejct focus to new object.
Definition: d4d_screen.c:430
#define NULL
Type definition of null pointer.
Definition: d4d_types.h:184
void D4D_RadioButtonOnMessage(D4D_MESSAGE *pMsg)
D4D_CLR_SCHEME * D4D_ObjectGetScheme(D4D_OBJECT *pObj)
Function return the pointer to current use object scheme of object.
Definition: d4d_scheme.c:109
#define D4D_RADIOBUTTON_F_ICON_RING
///&lt; Enable the radio button icon ring
D4D_TCHAR * pText
pointer to text array
Definition: d4d_string.h:102
Byte D4D_RADIOBUTTON_STATUS
D4D_OBJECT_PTR D4D_GetFocusedObject(const D4D_SCREEN *pScreen)
The function returns pointer to object that is focused in given screen.
Definition: d4d_screen.c:266
D4D_MSGID nMsgId
Type of message.
Definition: d4d_base.h:404
D4D_RDBTN_ON_CHANGE OnChange
D4D_SIZE size
Size of the object.
Definition: d4d_object.h:170
const D4D_BMP * pBmpUnChecked
D4D_KEY_SCANCODE key
There will be stored only code of key without release / press information - is valid with D4D_MSG_KEY...
Definition: d4d_base.h:409
#define D4D_RADIOBUTTON_STATUS_PRESSED_MASK
D4D_POINT D4D_GetClientToScreenPoint(D4D_OBJECT *pObject, D4D_POINT *nClientPoint)
The function convert client point on the screen to the global screen point.
Definition: d4d_screen.c:536
LWord D4D_INDEX
Type definition of eGUI general index variables.
Definition: d4d_types.h:206
The object main structure type definition.
Definition: d4d_object.h:167
Draw message - is send when the object should be redrawed.
Definition: d4d_base.h:371
D4D_STRING * D4D_RadioButtonGetTextBuffer(D4D_OBJECT *pThis)
#define D4D_RADIOBUTTON_MIN_SIZE
This is pixel count of radio button ring minimal size. If not defined, it sets to 8 pixel as a defaul...
#define D4D_ALIGN_H_CENTER_MASK
The horizontal center aligment option mask (for texts and also bitmaps).
Definition: d4d_base.h:225
void D4D_ComputeGeometry(D4D_GEOMETRY *pGeometry, D4D_OBJECT *pObject)
Definition: d4d_base.c:1047
D4D_COOR cy
Size in axis Y (height)
Definition: d4d_types.h:233
The object system function needed for each object - this is part of D4D_OBJECT main structure...
Definition: d4d_object.h:134
static void D4D_RadioButtonChangeValue(D4D_OBJECT_PTR pThis, D4D_BOOL value)
D4D_OBJECT_RELATIONS pRelations
Relationship between the objects.
Definition: d4d_object.h:177
static void D4D_RadioButtonOnKeyUp(D4D_MESSAGE *pMsg)
#define D4D_OBJECT_F_FASTTOUCH
Object has enabled fast touch screen capability. This option supports only a some objects (button...
Definition: d4d_object.h:76
Touched message - is send when the object is touched by touch screen driver.
Definition: d4d_base.h:379
LWord D4D_BOOL
Type definition of eGUI boolean.
Definition: d4d_types.h:204
Type definition of eGUI size structure.
Definition: d4d_types.h:230
#define D4D_GET_RADIOBUTTON(pObj)
D4D_OBJECT_DRAWFLAGS draw
Contains draw flags - is valid with D4D_MSG_DRAW and D4D_MSG_DRAWDONE message.
Definition: d4d_base.h:408
void D4D_FillRRect(D4D_POINT *ppt, D4D_SIZE *psz, D4D_COLOR color, D4D_COOR radius)
Function draw filled rectangle on the screen with round corners.
D4D_SIZE D4D_GetBmpSize(const D4D_BMP *pBmp)
Function gets information about bitmap size.
Definition: d4d_bmp.c:418
Type definition of eGUI geometry structure.
Definition: d4d_types.h:237
Line type thin.
Definition: d4d_types.h:293
D4D_TCHAR * strName
Object type (widget) name, it also could be used as a identifier of object type.
Definition: d4d_object.h:136
void D4D_InvalidateObject(D4D_OBJECT_PTR pObject, D4D_BOOL bComplete)
Function invalidate object to redraw on screen.
Definition: d4d_object.c:71
Key Down message - is send when the object get new Key Down event.
Definition: d4d_base.h:378
Byte D4D_OBJECT_DRAWFLAGS
Drawing object flags type, handled to object in D4D_MSG_DRAW events.
Definition: d4d_base.h:359
LWord D4D_COLOR
Type definition of eGUI color variables.
Definition: d4d_types.h:262
struct D4D_SCREEN_S * pScreen
Pointer to screen who is receiver of this message.
Definition: d4d_base.h:403
Kill Focus message - is send when the object is losing focus.
Definition: d4d_base.h:374
union D4D_MESSAGE_S::@0 prm
Additional data for some type of messages.
#define D4D_GET_RADIOBUTTON_STATUS(pObj)
D4D_BOOL D4D_IsEnabled(D4D_OBJECT *pObject)
Function find out if the object is enabled or not.
Definition: d4d_object.c:303