/*sets psCurrTransporter */ void setCurrentTransporter(UDWORD id) { DROID *psDroid; UDWORD currID; psCurrTransporter = NULL; currID = IDTRANS_START; //loop thru all the droids to find the selected one for (psDroid = transInterfaceDroidList(); psDroid != NULL; psDroid = psDroid->psNext) { if ((psDroid->droidType == DROID_TRANSPORTER || psDroid->droidType == DROID_SUPERTRANSPORTER) && (psDroid->action != DACTION_TRANSPORTOUT && psDroid->action != DACTION_TRANSPORTIN)) { if (currID == id) { break; } currID++; } } if (psDroid) { psCurrTransporter = psDroid; //set the data for the transporter timer widgSetUserData(psWScreen, IDTRANTIMER_DISPLAY, (void *)psCurrTransporter); } }
/* 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; }
/* Add the Transporter Button form */ bool intAddTransButtonForm(void) { UDWORD numButtons, i; SDWORD BufferID; DROID *psDroid; /* Add the button form */ W_FORMINIT sFormInit; sFormInit.formID = IDTRANS_FORM; sFormInit.id = IDTRANS_TABFORM; sFormInit.style = WFORM_TABBED; sFormInit.width = TRANS_TABWIDTH; sFormInit.height = TRANS_TABHEIGHT; sFormInit.x = TRANS_TABX; sFormInit.y = TRANS_TABY; sFormInit.majorPos = WFORM_TABTOP; sFormInit.minorPos = WFORM_TABNONE; sFormInit.majorSize = OBJ_TABWIDTH; sFormInit.majorOffset = OBJ_TABOFFSET; sFormInit.tabVertOffset = (OBJ_TABHEIGHT / 2); sFormInit.tabMajorThickness = OBJ_TABHEIGHT; numButtons = 0; /*work out the number of buttons */ for (psDroid = transInterfaceDroidList(); psDroid; psDroid = psDroid->psNext) { //only interested in Transporter droids if ((psDroid->droidType == DROID_TRANSPORTER || psDroid->droidType == DROID_SUPERTRANSPORTER) && (psDroid->action != DACTION_TRANSPORTOUT && psDroid->action != DACTION_TRANSPORTIN)) { //set the first Transporter to be the current one if not already set if (psCurrTransporter == NULL) { psCurrTransporter = psDroid; } numButtons++; } } //set the number of tabs required sFormInit.numMajor = numForms((OBJ_BUTWIDTH + OBJ_GAP) * numButtons, OBJ_WIDTH - OBJ_GAP); sFormInit.pUserData = &StandardTab; sFormInit.pTabDisplay = intDisplayTab; if (sFormInit.numMajor > MAX_TAB_STD_SHOWN) { // we do NOT use smallTab icons here, so be safe and only display max # of // standard sized tab icons. sFormInit.numMajor = MAX_TAB_STD_SHOWN; } //set minor tabs to 1 for (i = 0; i < sFormInit.numMajor; i++) { sFormInit.aNumMinors[i] = 1; } if (!widgAddForm(psWScreen, &sFormInit)) { return false; } /* Add the transporter and status buttons */ W_FORMINIT sBFormInit; sBFormInit.formID = IDTRANS_TABFORM; sBFormInit.id = IDTRANS_START; sBFormInit.majorID = 0; sBFormInit.minorID = 0; sBFormInit.style = WFORM_CLICKABLE; sBFormInit.x = OBJ_STARTX; sBFormInit.y = OBJ_STARTY; sBFormInit.width = OBJ_BUTWIDTH; sBFormInit.height = OBJ_BUTHEIGHT; W_FORMINIT sBFormInit2 = sBFormInit; sBFormInit2.id = IDTRANS_STATSTART; sBFormInit2.y = OBJ_STATSTARTY; ClearObjectBuffers(); ClearTopicBuffers(); //add each button for (psDroid = transInterfaceDroidList(); psDroid; psDroid = psDroid->psNext) { if ((psDroid->droidType == DROID_TRANSPORTER || psDroid->droidType == DROID_SUPERTRANSPORTER) && (psDroid->action != DACTION_TRANSPORTOUT && psDroid->action != DACTION_TRANSPORTIN)) { /* Set the tip and add the button */ sBFormInit.pTip = droidGetName(psDroid); BufferID = sBFormInit.id - IDTRANS_START; ASSERT(BufferID < NUM_TOPICBUFFERS, "BufferID > NUM_TOPICBUFFERS"); ClearTopicButtonBuffer(BufferID); RENDERBUTTON_INUSE(&TopicBuffers[BufferID]); TopicBuffers[BufferID].Data = (void *)psDroid; sBFormInit.pUserData = &TopicBuffers[BufferID]; sBFormInit.pDisplay = intDisplayObjectButton; if (!widgAddForm(psWScreen, &sBFormInit)) { return false; } /* if the current droid matches psCurrTransporter lock the button */ if (psDroid == psCurrTransporter) { widgSetButtonState(psWScreen, sBFormInit.id, WBUT_LOCK); widgSetTabs(psWScreen, IDTRANS_TABFORM, sBFormInit.majorID, 0); } //now do status button sBFormInit2.pTip = NULL; BufferID = (sBFormInit2.id - IDTRANS_STATSTART) * 2 + 1; ASSERT(BufferID < NUM_OBJECTBUFFERS, "BufferID > NUM_OBJECTBUFFERS"); ClearObjectButtonBuffer(BufferID); RENDERBUTTON_INUSE(&ObjectBuffers[BufferID]); sBFormInit2.pUserData = &ObjectBuffers[BufferID]; sBFormInit2.pDisplay = intDisplayStatusButton; if (!widgAddForm(psWScreen, &sBFormInit2)) { return false; } /* Update the init struct for the next buttons */ sBFormInit.id += 1; ASSERT(sBFormInit.id < IDTRANS_END, "Too many Transporter buttons"); sBFormInit.x += OBJ_BUTWIDTH + OBJ_GAP; if (sBFormInit.x + OBJ_BUTWIDTH + OBJ_GAP > OBJ_WIDTH) { sBFormInit.x = OBJ_STARTX; sBFormInit.majorID += 1; } sBFormInit2.id += 1; ASSERT(sBFormInit2.id < IDTRANS_STATEND, "Too many Transporter status buttons"); sBFormInit2.x += OBJ_BUTWIDTH + OBJ_GAP; if (sBFormInit2.x + OBJ_BUTWIDTH + OBJ_GAP > OBJ_WIDTH) { sBFormInit2.x = OBJ_STARTX; sBFormInit2.majorID += 1; } } } return true; }