예제 #1
0
/* Ф-я предназначена только для вызова из CallBack'а QSP_CALL_SHOWMENU */
AS3_Val QSPSelectMenuItem(void *param, AS3_Val args)
{
	int index;
	QSPVariant arg;
	AS3_ArrayValue(args, "IntType", &index);
	if (index >= 0 && index < qspCurMenuItems)
	{
		if (qspIsDisableCodeExec) return AS3_True();
		arg.IsStr = QSP_FALSE;
		QSP_NUM(arg) = index + 1;
		qspExecLocByNameWithArgs(qspCurMenuLocs[index], &arg, 1);
	}
	return AS3_True();
}
예제 #2
0
파일: menu.c 프로젝트: ktoto1/QtQSP
QSP_BOOL qspStatementShowMenu(QSPVariant *args, int count, QSP_CHAR **jumpTo, int extArg)
{
	QSPVar *var;
	QSPVariant arg;
	int ind, itemsCount, maxItems, len;
	QSP_CHAR *menuLocs[QSP_MAXMENUITEMS], *imgPath, *str, *pos, *pos2;
	if (!(var = qspVarReferenceWithType(QSP_STR(args[0]), QSP_FALSE, 0))) return QSP_FALSE;
	qspCallDeleteMenu();
	if (count == 1)
	{
		ind = 0;
		maxItems = QSP_MAXMENUITEMS;
	}
	else
	{
		ind = QSP_NUM(args[1]);
		if (ind < 0) ind = 0;
		if (count == 2)
			maxItems = QSP_MAXMENUITEMS;
		else
		{
			maxItems = QSP_NUM(args[2]);
			if (maxItems < 0) maxItems = 0;
		}
	}
	itemsCount = 0;
	while (ind < var->ValsCount)
	{
		if (itemsCount == maxItems) break;
		if (!((str = var->Values[ind].Str) && qspIsAnyString(str))) break;
		if (!(pos2 = qspInStrRChars(str, QSP_MENUDELIM, 0)))
		{
			qspSetError(QSP_ERR_COLONNOTFOUND);
			return QSP_FALSE;
		}
		if (itemsCount == QSP_MAXMENUITEMS)
		{
			qspSetError(QSP_ERR_CANTADDMENUITEM);
			return QSP_FALSE;
		}
		if (pos = qspInStrRChars(str, QSP_MENUDELIM, pos2))
		{
			len = (int)(pos2 - pos) - 1;
			imgPath = (qspIsAnyString(++pos2) ? qspGetAbsFromRelPath(pos2) : 0);
		}
		else
		{
			pos = pos2;
			len = -1;
			imgPath = 0;
		}
		menuLocs[itemsCount++] = qspGetNewText(pos + 1, len);
		*pos = 0;
		qspCallAddMenuItem(str, imgPath);
		*pos = QSP_MENUDELIM[0];
		if (imgPath) free(imgPath);
		++ind;
	}
	if (itemsCount)
	{
		ind = qspCallShowMenu();
		if (ind >= 0 && ind < itemsCount)
		{
			arg.IsStr = QSP_FALSE;
			QSP_NUM(arg) = ind + 1;
			qspExecLocByNameWithArgs(menuLocs[ind], &arg, 1, 0);
		}
		while (--itemsCount >= 0)
			free(menuLocs[itemsCount]);
	}
	return QSP_FALSE;
}