/* Create a plain form widget */ static W_CLICKFORM* formCreateClickable(const W_FORMINIT* psInit) { /* Allocate the required memory */ W_CLICKFORM* psWidget = (W_CLICKFORM *)malloc(sizeof(W_CLICKFORM)); if (psWidget == NULL) { debug(LOG_FATAL, "formCreateClickable: Out of memory"); abort(); return NULL; } /* Initialise the structure */ memset(psWidget, 0, sizeof(W_CLICKFORM)); psWidget->type = WIDG_FORM; psWidget->id = psInit->id; psWidget->formID = psInit->formID; psWidget->style = psInit->style; psWidget->disableChildren = psInit->disableChildren; psWidget->animCount = 0; psWidget->x = psInit->x; psWidget->y = psInit->y; psWidget->width = psInit->width; psWidget->height = psInit->height; psWidget->callback = psInit->pCallback; psWidget->pUserData = psInit->pUserData; psWidget->UserData = psInit->UserData; psWidget->AudioCallback = WidgGetAudioCallback(); psWidget->HilightAudioID = WidgGetHilightAudioID(); psWidget->ClickedAudioID = WidgGetClickedAudioID(); if (psInit->pDisplay) { psWidget->display = psInit->pDisplay; } else { psWidget->display = formDisplayClickable; } psWidget->psWidgets = NULL; psWidget->psLastHiLite = NULL; psWidget->pTip = psInit->pTip; formSetDefaultColours((W_FORM *)psWidget); formInitialise((W_FORM *)psWidget); return psWidget; }
/* Initialise a form and all it's widgets */ static void widgStartForm(W_FORM *psForm) { WIDGET *psCurr; W_FORMGETALL sGetAll; /* Initialise this form */ formInitialise(psForm); /*Initialise the widgets on the form */ formInitGetAllWidgets(psForm, &sGetAll); psCurr = formGetAllWidgets(&sGetAll); while (psCurr != NULL) { switch (psCurr->type) { case WIDG_FORM: widgStartForm((W_FORM *)psCurr); break; case WIDG_LABEL: break; case WIDG_BUTTON: buttonInitialise((W_BUTTON *)psCurr); break; case WIDG_EDITBOX: editBoxInitialise((W_EDITBOX *)psCurr); break; case WIDG_BARGRAPH: break; case WIDG_SLIDER: sliderInitialise((W_SLIDER *)psCurr); break; default: ASSERT(!"Unknown widget type", "Unknown widget type"); break; } psCurr = psCurr->psNext; if (!psCurr) { /* Got to the end of this list see if there is another */ psCurr = formGetAllWidgets(&sGetAll); } } }
/* Create a tabbed form widget */ static W_TABFORM* formCreateTabbed(const W_FORMINIT* psInit) { W_TABFORM* psWidget; UDWORD major,minor; W_MAJORTAB *psMajor; if (psInit->numMajor == 0) { ASSERT(false, "formCreateTabbed: Must have at least one major tab on a tabbed form"); return NULL; } if (psInit->majorPos != 0 && psInit->majorPos == psInit->minorPos) { ASSERT(false, "formCreateTabbed: Cannot have major and minor tabs on same side"); return NULL; } if (psInit->numMajor >= WFORM_MAXMAJOR) { ASSERT(false, "formCreateTabbed: Too many Major tabs" ); return NULL; } for(major=0; major<psInit->numMajor; major++) { if (psInit->aNumMinors[major] >= WFORM_MAXMINOR) { ASSERT(false, "formCreateTabbed: Too many Minor tabs for Major %u", major); return NULL; } if (psInit->aNumMinors[major] == 0) { ASSERT(false, "formCreateTabbed: Must have at least one Minor tab for each major"); return NULL; } } /* Allocate the required memory */ psWidget = (W_TABFORM *)malloc(sizeof(W_TABFORM)); if (psWidget == NULL) { debug(LOG_FATAL, "formCreateTabbed: Out of memory"); abort(); return NULL; } memset(psWidget, 0, sizeof(W_TABFORM)); /* Allocate the memory for tool tips and copy them in */ psMajor = psWidget->asMajor; for (major = 0; major < psInit->numMajor; ++major) { /* Check for a tip for the major tab */ psMajor->pTip = psInit->apMajorTips[major]; /* Check for tips for the minor tab */ for(minor = 0; minor < psInit->aNumMinors[major]; ++minor) { psMajor->asMinor[minor].pTip = psInit->apMinorTips[major][minor]; } psMajor++; } /* Initialise the structure */ psWidget->type = WIDG_FORM; psWidget->id = psInit->id; psWidget->formID = psInit->formID; psWidget->style = psInit->style; psWidget->disableChildren = psInit->disableChildren; psWidget->animCount = 0; psWidget->x = psInit->x; psWidget->y = psInit->y; psWidget->width = psInit->width; psWidget->height = psInit->height; if (psInit->pDisplay) { psWidget->display = psInit->pDisplay; } else { psWidget->display = formDisplayTabbed; } psWidget->callback = psInit->pCallback; psWidget->pUserData = psInit->pUserData; psWidget->UserData = psInit->UserData; psWidget->psLastHiLite = NULL; psWidget->majorSize = psInit->majorSize; psWidget->minorSize = psInit->minorSize; psWidget->tabMajorThickness = psInit->tabMajorThickness; psWidget->tabMinorThickness = psInit->tabMinorThickness; psWidget->tabMajorGap = psInit->tabMajorGap; psWidget->tabMinorGap = psInit->tabMinorGap; psWidget->tabVertOffset = psInit->tabVertOffset; psWidget->tabHorzOffset = psInit->tabHorzOffset; psWidget->majorOffset = psInit->majorOffset; psWidget->minorOffset = psInit->minorOffset; psWidget->majorPos = psInit->majorPos; psWidget->minorPos = psInit->minorPos; psWidget->pTabDisplay = psInit->pTabDisplay; psWidget->TabMultiplier = psInit->TabMultiplier; psWidget->numButtons = psInit->numButtons; psWidget->numStats = psInit->numStats; psWidget->majorT = 0; psWidget->minorT = 0; formSetDefaultColours((W_FORM *)psWidget); /* Set up the tab data. * All widget pointers have been zeroed by the memset above. */ psWidget->numMajor = psInit->numMajor; for (major=0; major<psInit->numMajor; major++) { psWidget->asMajor[major].numMinor = psInit->aNumMinors[major]; } formInitialise((W_FORM *)psWidget); return psWidget; }