void mapAll(void) { initinput(); W_MapWindow(mapw); W_MapWindow(tstatw); W_MapWindow(warnw); W_MapWindow(messagew); W_MapWindow(w); W_MapWindow(baseWin); /* since we aren't mapping windows that have root as parent in x11window.c (since that messes up the TransientFor feature) we have to map them here. (If already mapped, W_MapWindow returns) */ if (checkMapped("planet")) W_MapWindow(planetw); if (checkMapped("planet2")) W_MapWindow(planetw2); if (checkMapped("rank")) W_MapWindow(rankw); if (checkMapped("help")) W_MapWindow(helpWin); if (checkMapped("Motd")) W_MapWindow(motdWin); if (checkMapped("review_all")) W_MapWindow(messWin[WALL].window); if (checkMapped("review_team")) W_MapWindow(messWin[WTEAM].window); if (checkMapped("review_your")) W_MapWindow(messWin[WINDIV].window); if (checkMapped("review_kill")) W_MapWindow(messWin[WKILL].window); if (checkMapped("review_phaser")) W_MapWindow(messWin[WPHASER].window); if (booleanDefault("player.mapped", 1)) W_MapWindow(playerw); if (booleanDefault("review.mapped", 1)) W_MapWindow(messWin[WREVIEW].window); if (checkMapped("UDP")) udpwindow(); }
/* deal with events sent to the option window */ void optionaction(W_Event * data) { register struct option *op; int i; register char *cp; if (data->y >= CurrentMenu->numopt) { W_Beep(); return; } if (notdone == 0) return; op = &(CurrentMenu->menu[data->y]); /* Update string; don't claim keystrokes for non-string options */ /* deal with options with string input first */ if (op->op_string == 0) { if (data->type == W_EV_KEY) return; } else { if (data->type == W_EV_BUTTON) return; switch (data->key) { case '\b': /* delete character */ case '\177': cp = op->op_string; i = strlen(cp); if (i > 0) { cp += i - 1; *cp = '\0'; } break; case '\027': /* word erase */ cp = op->op_string; i = strlen(cp); /* back up over blanks */ while (--i >= 0 && isspace(cp[i])) ; i++; /* back up over non-blanks */ while (--i >= 0 && !isspace(cp[i])) ; i++; cp[i] = '\0'; break; case '\025': /* kill line */ case '\030': op->op_string[0] = '\0'; break; default: /* add character to the list * */ if (data->key < 32 || data->key > 127) break; cp = op->op_string; i = strlen(cp); if (i < (op->op_size - 1) && !iscntrl(data->key)) { cp += i; cp[1] = '\0'; cp[0] = data->key; } else W_Beep(); break; } } /* Toggle int, if it exists */ if (op->op_array) { if (data->key == W_RBUTTON) { (*op->op_option)++; if (*(op->op_array)[*op->op_option] == '\0') { *op->op_option = 0; } } else if (data->key == W_MBUTTON) { /* set option number to zero on the middle key to ease shutoff */ *op->op_option = 0; } else if (data->key == W_LBUTTON) { /* if left button, decrease option */ (*op->op_option)--; /* if decreased too far, set to top option */ if (*(op->op_option) < 0) { *op->op_option = 0; while (*(op->op_array)[*op->op_option] != '\0') { (*op->op_option)++; } (*op->op_option)--; } } /* Actions to be taken when certain options are selected. (Yes, this is * * * a hack). */ if (op->op_option == &plistStyle) { if (plistCustomLayout == 0 && plistStyle == 0) plistStyle = (data->key == W_LBUTTON) ? PLISTLASTSTYLE : 1; RedrawPlayerList(); } else if (op->op_option == &showgalactic) { redrawall = 1; } #ifdef ROTATERACE else if (rotate != old_rotate) { register i; register struct planet *l; register struct player *j; redrawall = 1; reinitPlanets = 1; for (i = 0, l = planets; i < MAXPLANETS; i++, l++) { if (rotate) { rotate_deg = -old_rotate_deg + rotate * 64; rotate_coord(&l->pl_x, &l->pl_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_deg = rotate * 64; } else { rotate_deg = -old_rotate_deg; rotate_coord(&l->pl_x, &l->pl_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_deg = 0; } } /* we could wait for the server to do this but looks better if we * * * * do it now. */ for (i = 0, j = players; i < MAXPLAYER; i++, j++) { if (j->p_status != PALIVE) continue; if (rotate) { rotate_deg = -old_rotate_deg + rotate * 64; rotate_coord(&j->p_x, &j->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&j->p_dir, rotate_deg); rotate_deg = rotate * 64; } else { rotate_deg = -old_rotate_deg; rotate_coord(&j->p_x, &j->p_y, rotate_deg, GWIDTH / 2, GWIDTH / 2); rotate_dir(&j->p_dir, rotate_deg); rotate_deg = 0; } } /* phasers/torps/etc .. wait for server */ old_rotate = rotate; old_rotate_deg = rotate_deg; } #endif } /* Does the button have a range of values? */ else if (op->op_range) { if (data->key == W_RBUTTON) { (*op->op_option) += op->op_range->increment; } else if (data->key == W_MBUTTON) { (*op->op_option) = op->op_range->min_value; } else if (data->key == W_LBUTTON) { (*op->op_option) -= op->op_range->increment; } /* wrap value around within option range */ if (*(op->op_option) > op->op_range->max_value) *(op->op_option) = op->op_range->min_value; if (*(op->op_option) < op->op_range->min_value) *(op->op_option) = op->op_range->max_value; } /* Is the option a toggle? */ #ifdef HAVE_XPM /* Bitwise Toggle */ else if ((op->op_option) && (op->op_size)) { if (!(pixMissing & op->op_size)) { *op->op_option ^= op->op_size; if (op->op_size & (NO_MAP_PIX | NO_BG_PIX | NO_HALOS)) redrawall = 1; } } #endif else if (op->op_option) { *op->op_option = !*op->op_option; /* Actions to be taken when certain options are selected. * (Yes, this * * is a hack). */ if (op->op_option == &showPlanetOwner) redrawall = 1; else if (op->op_option == &partitionPlist) RedrawPlayerList(); else if (op->op_option == &sortPlayers) RedrawPlayerList(); else if (op->op_option == &sortMyTeamFirst) RedrawPlayerList(); } /* Map/unmap window, if it exists */ if (op->op_targetwin) { if (W_IsMapped(*op->op_targetwin)) W_UnmapWindow(*op->op_targetwin); else { W_MapWindow(*op->op_targetwin); if (*op->op_targetwin == udpWin) udpwindow(); if (*op->op_targetwin == pStats) redrawPStats(); if (*op->op_targetwin == netstatWin) nswindow(); if (*op->op_targetwin == spWin) spwindow(); #ifdef XTREKRC_HELP if (defWin && *op->op_targetwin == defWin) showdef(); #endif #ifdef SOUND if (*op->op_targetwin == soundWin) soundwindow(); #endif #ifdef DOC_WIN if (docwin && *op->op_targetwin == docwin) showdocs(0); if (xtrekrcwin && *op->op_targetwin == xtrekrcwin) showxtrekrc(0); #endif } } /* deal with possible menu change */ if (MenuPage != CurrentMenu->page_num) { SetMenuPage(MenuPage); RefreshOptions(); } else if (notdone) optionrefresh(op); else { optionrefresh(op); optiondone(); } return; }