示例#1
0
void Script_SetMenuFocus(itemDef_t *item, qboolean *bAbort, char **args)
{
	const char *name;

	if (String_Parse(args, &name))
	{
		menuDef_t *focusMenu = Menus_FindByName(name);

		if (focusMenu && !(focusMenu->window.flags & WINDOW_HASFOCUS))
		{
			Menu_ClearFocus(item->parent);
			focusMenu->window.flags |= WINDOW_HASFOCUS;
		}
	}
}
static void JKG_Slice_Dialog_Show(const char *line1, const char *line2, const char *line3, int type, int dlgid) {
	menuDef_t *menu;
	
	sliceData.dlgActive = qtrue;

	if (line1) {
		Q_strncpyz(&sliceData.dlgText1[0], line1, 255);
	} else {
		sliceData.dlgText1[0] = 0;
	}

	if (line2) {
		Q_strncpyz(&sliceData.dlgText2[0], line2, 255);
	} else {
		sliceData.dlgText2[0] = 0;
	}

	if (line3) {
		Q_strncpyz(&sliceData.dlgText3[0], line3, 255);
	} else {
		sliceData.dlgText3[0] = 0;
	}

	sliceData.dlgType = type;
	sliceData.dlgid = dlgid;

	
	menu = Menus_FindByName("jkg_slice");

	if (!menu) {
		return;
	}

	// First, disable all controls on the interface
	Menu_ItemDisable(menu, "grid", 1);
	Menu_ItemDisable(menu, "prog", 1);
	Menu_ItemDisable(menu, "btns", 1);
	
	Menu_ClearFocus(menu);

	Menu_ShowItemByName(menu, "dialog", qtrue);
	if (type == DLGTYPE_OK) {
		Menu_ShowItemByName(menu, "btn_dialogok", qtrue);
	} else if (type == DLGTYPE_YESNO) {
		Menu_ShowItemByName(menu, "btn_dialogyesno", qtrue);
	}
}
static void JKG_Slice_Dialog_Close() {
	menuDef_t *menu;

	sliceData.dlgActive = 0;
	
	menu = Menus_FindByName("jkg_slice");

	if (!menu) {
		return;
	}
	Menu_ShowItemByName(menu, "dialog", qfalse);
	Menu_ShowItemByName(menu, "btn_dialogok", qfalse);
	Menu_ShowItemByName(menu, "btn_dialogyesno", qfalse);
	
	Menu_ItemDisable(menu, "grid", 0);
	Menu_ItemDisable(menu, "prog", 0);
	Menu_ItemDisable(menu, "btns", 0);

	Menu_ClearFocus(menu);
}
示例#4
0
void Script_SetEditFocus(itemDef_t *item, qboolean *bAbort, char **args)
{
	const char *name = NULL;

	if (String_Parse(args, &name))
	{
		itemDef_t *editItem = Menu_FindItemByName(item->parent, name);

		if (editItem && TEXTFIELD(editItem->type))
		{
			editFieldDef_t *editPtr = (editFieldDef_t *)editItem->typeData;

			Menu_ClearFocus(item->parent);
			editItem->window.flags |= WINDOW_HASFOCUS;
			if (editItem->onFocus)
			{
				Item_RunScript(editItem, NULL, editItem->onFocus);
			}

			if (DC->Assets.itemFocusSound)
			{
				DC->startLocalSound(DC->Assets.itemFocusSound, CHAN_LOCAL_SOUND);
			}

			// reset scroll offset so we can see what we're editing
			if (editPtr)
			{
				editPtr->paintOffset = 0;
			}

			DC->setCVar(EDITFIELD_TEMP_CVAR, "");
			editItem->cursorPos = 0;
			g_editingField      = qtrue;
			g_editItem          = editItem;

			// the stupidest idea ever, let's just override the console, every ui element, user choice, etc
			// nuking this
			//DC->setOverstrikeMode(qtrue);
		}
	}
}
示例#5
0
void Menus_CloseByName(const char *p)
{
	menuDef_t *menu = Menus_FindByName(p);

	if (menu != NULL)
	{
		int i;

		// Gordon: make sure no edit fields are left hanging
		for (i = 0; i < menu->itemCount; i++)
		{
			if (g_editItem == menu->items[i])
			{
				g_editingField = qfalse;
				g_editItem     = NULL;
			}
		}

		menu->cursorItem = -1;
		Menu_ClearFocus(menu);
		Menu_RunCloseScript(menu);
		menu->window.flags &= ~(WINDOW_VISIBLE | WINDOW_HASFOCUS | WINDOW_MOUSEOVER);
		if (menu->window.flags & WINDOW_MODAL)
		{
			if (modalMenuCount <= 0)
			{
				Com_Printf(S_COLOR_YELLOW "WARNING: tried closing a modal window with an empty modal stack!\n");
			}
			else
			{
				modalMenuCount--;
				// if modal doesn't have a parent, the stack item may be NULL .. just go back to the main menu then
				if (modalMenuStack[modalMenuCount])
				{
					Menus_ActivateByName(modalMenuStack[modalMenuCount]->window.name, qfalse);   // don't try to push the one we are opening to the stack
				}
			}
		}
	}
}
示例#6
0
static void PartyMngt_Dialog_Close() {
	menuDef_t *menu;

	PDlgData.InUse = 0;
	
	menu = Menus_FindByName("jkg_partymanagement");

	if (!menu) {
		return;
	}
	Menu_ShowItemByName(menu, "dialog", qfalse);
	Menu_ShowItemByName(menu, "btn_dialogok", qfalse);
	Menu_ShowItemByName(menu, "btn_dialogyesno", qfalse);
	Menu_ShowItemByName(menu, "btn_dialogtext", qfalse);
	
	Menu_ItemDisable(menu, "list", 0);
	Menu_ItemDisable(menu, "btn_noparty", 0);
	Menu_ItemDisable(menu, "btn_inparty", 0);
	Menu_ItemDisable(menu, "btn_inpartylead", 0);
	Menu_ItemDisable(menu, "btn_bottom", 0);

	Menu_ClearFocus(menu);
}
示例#7
0
void Script_SetFocus(itemDef_t *item, qboolean *bAbort, char **args)
{
	const char *name = NULL;

	if (String_Parse(args, &name))
	{
		itemDef_t *focusItem = Menu_FindItemByName(item->parent, name);

		if (focusItem && !(focusItem->window.flags & WINDOW_DECORATION) && !(focusItem->window.flags & WINDOW_HASFOCUS))
		{
			Menu_ClearFocus(item->parent);
			focusItem->window.flags |= WINDOW_HASFOCUS;
			if (focusItem->onFocus)
			{
				Item_RunScript(focusItem, NULL, focusItem->onFocus);
			}

			if (DC->Assets.itemFocusSound)
			{
				DC->startLocalSound(DC->Assets.itemFocusSound, CHAN_LOCAL_SOUND);
			}
		}
	}
}
示例#8
0
static void PartyMngt_Dialog_Show(const char *line1, const char *line2, const char *line3, int type, PDlgCallback callback) {
	menuDef_t *menu;
	itemDef_t *item;
	if (!callback) {
		return;
	}
	
	PDlgData.InUse = 1;

	if (line1) {
		Q_strncpyz(&PDlgData.line1[0], line1, 255);
	} else {
		PDlgData.line1[0] = 0;
	}

	if (line2) {
		Q_strncpyz(&PDlgData.line2[0], line2, 255);
	} else {
		PDlgData.line2[0] = 0;
	}

	if (line3) {
		Q_strncpyz(&PDlgData.line3[0], line3, 255);
	} else {
		PDlgData.line3[0] = 0;
	}

	PDlgData.type = type;
	PDlgData.callback = callback;

	
	menu = Menus_FindByName("jkg_partymanagement");

	if (!menu) {
		return;
	}

	// First, disable all controls on the interface
	Menu_ItemDisable(menu, "list", 1);
	Menu_ItemDisable(menu, "btn_noparty", 1);
	Menu_ItemDisable(menu, "btn_inparty", 1);
	Menu_ItemDisable(menu, "btn_inpartylead", 1);
	Menu_ItemDisable(menu, "btn_bottom", 1);
	
	Menu_ClearFocus(menu);

	Menu_ShowItemByName(menu, "dialog", qtrue);
	if (type == PDLG_OK) {
		Menu_ShowItemByName(menu, "btn_dialogok", qtrue);
	} else if (type == PDLG_YESNO) {
		Menu_ShowItemByName(menu, "btn_dialogyesno", qtrue);
	} else if (type == PDLG_TEXT) {
		Menu_ShowItemByName(menu, "btn_dialogtext", qtrue);
		// Clear the text
		item = Menu_FindItemByName(menu, "dlg_textentry");
		if (item) {
			item->typeData.edit->buffer[0] = 0;
			item->cursorPos = 0;
			Menu_SetTextFieldFocus(item);
		}
	} else {
		// Invalid dialog type!
		assert(0);
	}
}
示例#9
0
void Script_ClearFocus(itemDef_t *item, qboolean *bAbort, char **args)
{
	Menu_ClearFocus(item->parent);
}
// Message Processor
void JKG_Slice_ProcessCommand_f(void)
{
	char arg[1024] = {0};
	char data[840];

	int len;

	int i, row, col;

	sfxHandle_t sfx;

	bitstream_t stream;

	trap->Cmd_Argv(1, arg, 1024);

	len = Base128_DecodeLength(strlen(arg));
	Base128_Decode(arg, strlen(arg), data, 840);

	

	BitStream_Init(&stream, (unsigned char *)data, len);
	BitStream_BeginReading(&stream);

	for (;;)
	{
		switch (BitStream_ReadBits(&stream, 4)) // Get the next instruction
		{
		case SLICECMD_EOM:
			// End of message
			return;
		case SLICECMD_START:
			// Reset data
			memset(&sliceData, 0, sizeof(sliceData));
			sliceData.active = qtrue;

			// Bring up UI
			trap->Cvar_Set("ui_hidehud", "1");
			Menus_CloseAll();
			if (Menus_ActivateByName("jkg_slice"))
			{
				trap->Key_SetCatcher( trap->Key_GetCatcher() | KEYCATCH_UI & ~KEYCATCH_CONSOLE );
			}
			Menu_ClearFocus(Menus_FindByName("jkg_slice"));

			// Field is locked until all data is available
			sliceData.fieldLocked = qtrue;
			break;
		case SLICECMD_STOP:
			// End the slicing minigame
			sliceData.active = qfalse;

			Menus_CloseByName("jkg_slice");
			trap->Cvar_Set("ui_hidehud", "0");
			trap->Key_SetCatcher( trap->Key_GetCatcher() & ~KEYCATCH_UI );
			break;
		case SLICECMD_CONFIG:
			// Receive configuration
			sliceData.width = BitStream_ReadBits(&stream, 3) + 1;
			sliceData.height = BitStream_ReadBits(&stream, 3) + 1;
			sliceData.securityLevels = BitStream_ReadBits(&stream, 3);
			sliceData.warningThreshold = BitStream_ReadBits(&stream, 5);
			sliceData.intrusionDetection = BitStream_ReadBool(&stream);
			if (sliceData.intrusionDetection) {
				sliceData.intrusionTime = BitStream_ReadByte(&stream) * 10;
			} else {
				sliceData.intrusionTime = 0;
			}
			sliceData.intrusionStart = 0;
			break;
		case SLICECMD_REVEAL:		
			row = BitStream_ReadBits(&stream, 3);
			col = BitStream_ReadBits(&stream, 3);
			sliceData.grid[row][col].active = 1;
			sliceData.grid[row][col].revealTime = trap->Milliseconds();
			sliceData.grid[row][col].type = BitStream_ReadBits(&stream, 3);
			break;
		case SLICECMD_LOCK:
			if (BitStream_ReadBool(&stream)) {
				sliceData.fieldLocked = qtrue;
			} else {
				sliceData.fieldLocked = qfalse;
			}
			break;
		case SLICECMD_PROGLST:
			JKG_Slice_ProgramListReset();
			sliceData.selectedProgram = -1;
			sliceData.programCount = BitStream_ReadBits(&stream, 4);
			for (i = 0; i < sliceData.programCount; i++) 
			{
				Q_strncpyz(sliceData.programs[i].ID, BitStream_ReadStringBuffered(&stream), sizeof(sliceData.programs[i].ID));
				Q_strncpyz(sliceData.programs[i].name, BitStream_ReadStringBuffered(&stream), sizeof(sliceData.programs[i].name));
				Q_strncpyz(sliceData.programs[i].desc, BitStream_ReadStringBuffered(&stream), sizeof(sliceData.programs[i].desc));
				
				sliceData.programs[i].type = BitStream_ReadBits(&stream, 2);
			}
			break;
		case SLICECMD_SHOWMSG:
			{
				int mode = BitStream_ReadBits(&stream, 2);
				char buffer[3][256];
				BitStream_ReadString(&stream, buffer[0], 256);
				BitStream_ReadString(&stream, buffer[1], 256);
				BitStream_ReadString(&stream, buffer[2], 256);

				JKG_Slice_Dialog_Show(buffer[0], buffer[1], buffer[2], mode, DLGID_SERVER);
			}
			break;
		case SLICECMD_ENDMSG:
			JKG_Slice_Dialog_Close();
			break;
		case SLICECMD_SUMMARY:
			// Process column summaries
			for (i=0; i < sliceData.width; i++) {
				sliceData.summaries[i].value = BitStream_ReadBits(&stream, 6);
				sliceData.summaries[i].alarms = BitStream_ReadBits(&stream, 4);
			}

			// Process row summaries
			for (i=0; i < sliceData.height; i++) {
				sliceData.summaries[8+i].value = BitStream_ReadBits(&stream, 6);
				sliceData.summaries[8+i].alarms = BitStream_ReadBits(&stream, 4);
			}

			sliceData.summariesKnown = qtrue;
			break;
		case SLICECMD_SECUPDATE:
			for (i = 0; i < sliceData.securityLevels; i++) {
				sliceData.securityState[i] = BitStream_ReadBits(&stream, 2);
			}
			break;
		case SLICECMD_INTRUSION:
			// TODO: Play sound effect?
			sliceData.intrusionState = BitStream_ReadBits(&stream, 2);
			if (sliceData.intrusionState == 1) {
				sliceData.intrusionStart = trap->Milliseconds();
			} else {
				sliceData.intrusionStart = 0;
			}
			break;
		case SLICECMD_WARNLEVEL:
			sliceData.warningLevel = BitStream_ReadBits(&stream, 5);
			break;
		case SLICECMD_BLINKNODE:
			row = BitStream_ReadBits(&stream, 3);
			col = BitStream_ReadBits(&stream, 3);
			sliceData.grid[row][col].blinkTime = trap->Milliseconds();
			sliceData.grid[row][col].blinkColor = BitStream_ReadBool(&stream);
			break;
		case SLICECMD_INITFIELD:
			// Ready to play
			sliceData.fieldLocked = qfalse;
			break;
		case SLICECMD_ALARM:
			sfx = trap->S_RegisterSound("sound/effects/mpalarm.wav");
			trap->S_StartLocalSound(sfx, CHAN_AUTO);
			break;
		default:
			Com_Printf("Error processing slice command, unknown command ID\n");
			return;
		}
	}
}