/* Add the Droids back at home form */ bool intAddDroidsAvailForm(void) { // Is the form already up? bool Animate = true; if (widgGetFromID(psWScreen, IDTRANS_DROIDS) != NULL) { intRemoveTransDroidsAvailNoAnim(); Animate = false; } if (intIsRefreshing()) { Animate = false; } WIDGET *parent = psWScreen->psForm; /* Add the droids available form */ IntFormAnimated *transDroids = new IntFormAnimated(parent, Animate); // Do not animate the opening, if the window was already open. transDroids->id = IDTRANS_DROIDS; transDroids->setGeometry(TRANSDROID_X, TRANSDROID_Y, TRANSDROID_WIDTH, TRANSDROID_HEIGHT); /* Add the close button */ W_BUTINIT sButInit; sButInit.formID = IDTRANS_DROIDS; sButInit.id = IDTRANS_DROIDCLOSE; sButInit.x = TRANSDROID_WIDTH - CLOSE_WIDTH; sButInit.y = 0; sButInit.width = CLOSE_WIDTH; sButInit.height = CLOSE_HEIGHT; sButInit.pTip = _("Close"); sButInit.pDisplay = intDisplayImageHilight; sButInit.UserData = PACKDWORD_TRI(0, IMAGE_CLOSEHILIGHT , IMAGE_CLOSE); if (!widgAddButton(psWScreen, &sButInit)) { return false; } //now add the tabbed droids available form IntListTabWidget *droidList = new IntListTabWidget(transDroids); droidList->id = IDTRANS_DROIDTAB; droidList->setChildSize(OBJ_BUTWIDTH, OBJ_BUTHEIGHT); droidList->setChildSpacing(OBJ_GAP, OBJ_GAP); int droidListWidth = OBJ_BUTWIDTH*2 + OBJ_GAP; droidList->setGeometry((TRANSDROID_WIDTH - droidListWidth)/2, AVAIL_STARTY + 15, droidListWidth, TRANSDROID_HEIGHT - (AVAIL_STARTY + 15)); /* Add the droids available buttons */ int nextButtonId = IDTRANS_DROIDSTART; /* Add the state of repair bar for each droid*/ W_BARINIT sBarInit; sBarInit.id = IDTRANS_REPAIRBARSTART; sBarInit.x = STAT_TIMEBARX; sBarInit.y = STAT_TIMEBARY; sBarInit.width = STAT_PROGBARWIDTH; sBarInit.height = STAT_PROGBARHEIGHT; sBarInit.size = 50; sBarInit.sCol = WZCOL_ACTION_PROGRESS_BAR_MAJOR; sBarInit.sMinorCol = WZCOL_ACTION_PROGRESS_BAR_MINOR; //add droids built before the mission for (DROID *psDroid = mission.apsDroidLists[selectedPlayer]; psDroid != nullptr; psDroid = psDroid->psNext) { //stop adding the buttons once IDTRANS_DROIDEND has been reached if (nextButtonId == IDTRANS_DROIDEND) { break; } //don't add Transporter Droids! if ((psDroid->droidType != DROID_TRANSPORTER && psDroid->droidType != DROID_SUPERTRANSPORTER)) { /* Set the tip and add the button */ IntTransportButton *button = new IntTransportButton(droidList); button->id = nextButtonId; button->setTip(droidGetName(psDroid)); button->setObject(psDroid); droidList->addWidgetToLayout(button); //add bar to indicate stare of repair sBarInit.size = (UWORD) PERCENT(psDroid->body, psDroid->originalBody); if (sBarInit.size > 100) { sBarInit.size = 100; } sBarInit.formID = nextButtonId; //sBarInit.iRange = TBAR_MAX_REPAIR; if (!widgAddBarGraph(psWScreen, &sBarInit)) { return false; } /* Update the init struct for the next button */ ++nextButtonId; ASSERT(nextButtonId < IDTRANS_DROIDEND, "Too many Droids Built buttons"); //and bar sBarInit.id += 1; } } //reset which tab we were on droidList->setCurrentPage(objMajor); return true; }
/* Add the Transporter Button form */ bool intAddTransButtonForm(void) { WIDGET *transForm = widgGetFromID(psWScreen, IDTRANS_FORM); /* Add the button form */ IntListTabWidget *transList = new IntListTabWidget(transForm); transList->setChildSize(OBJ_BUTWIDTH, OBJ_BUTHEIGHT*2); transList->setChildSpacing(OBJ_GAP, OBJ_GAP); int objListWidth = OBJ_BUTWIDTH*5 + OBJ_GAP*4; transList->setGeometry((OBJ_BACKWIDTH - objListWidth)/2, TRANS_TABY, objListWidth, transForm->height() - TRANS_TABY); /* Add the transporter and status buttons */ int nextObjButtonId = IDTRANS_START; int nextStatButtonId = IDTRANS_STATSTART; //add each button for (DROID *psDroid = transInterfaceDroidList(); psDroid; psDroid = psDroid->psNext) { if ((psDroid->droidType != DROID_TRANSPORTER && psDroid->droidType != DROID_SUPERTRANSPORTER) || psDroid->action == DACTION_TRANSPORTOUT || psDroid->action == DACTION_TRANSPORTIN) { continue; } WIDGET *buttonHolder = new WIDGET(transList); transList->addWidgetToLayout(buttonHolder); IntStatusButton *statButton = new IntStatusButton(buttonHolder); statButton->id = nextStatButtonId; statButton->setGeometry(0, 0, OBJ_BUTWIDTH, OBJ_BUTHEIGHT); IntObjectButton *objButton = new IntObjectButton(buttonHolder); objButton->id = nextObjButtonId; objButton->setGeometry(0, OBJ_STARTY, OBJ_BUTWIDTH, OBJ_BUTHEIGHT); /* Set the tip and add the button */ objButton->setTip(droidGetName(psDroid)); objButton->setObject(psDroid); //set the first Transporter to be the current one if not already set if (psCurrTransporter == nullptr) { psCurrTransporter = psDroid; } /* if the current droid matches psCurrTransporter lock the button */ if (psDroid == psCurrTransporter) { objButton->setState(WBUT_LOCK); transList->setCurrentPage(transList->pages() - 1); } //now do status button statButton->setObject(nullptr); /* Update the init struct for the next buttons */ ++nextObjButtonId; ASSERT(nextObjButtonId < IDTRANS_END, "Too many Transporter buttons"); ++nextStatButtonId; ASSERT(nextStatButtonId < IDTRANS_STATEND, "Too many Transporter status buttons"); } return true; }