Ejemplo n.º 1
0
BOOL
Get_FuncData(LCUI_Func *p, void (*func) (), void *arg1, void *arg2)
/* 
 * 功能:将函数指针以及两个参数,转换成LCUI_Func类型的指针
 * 说明:此函数会申请内存空间,并返回指向该空间的指针
 *  */
{
	LCUI_App *app;
	app = Get_Self_AppPointer();
	
	if( !app ) {
		printf("Get_FuncData(): "APP_ERROR_UNRECORDED_APP);
		return FALSE;
	}
	
	p->id = app->id;
	p->func = func;
	/* 
	 * 只是保存了指向参数的指针,如果该参数是局部变量,在声明它的函数退出后,该变量
	 * 的空间可能会无法访问。
	 *  */
	p->arg[0] = arg1;	
	p->arg[1] = arg2;
	p->destroy_arg[0] = FALSE;
	p->destroy_arg[1] = FALSE;
	return TRUE;
}
Ejemplo n.º 2
0
static int Get_EncodingType()
{
	LCUI_App *app;
	app = Get_Self_AppPointer();
	if(app == NULL) {
		return -1;
	}
	return app->encoding_type;
}
Ejemplo n.º 3
0
static int Set_EncodingType(int type)
{
	LCUI_App *app;
	app = Get_Self_AppPointer();
	if( !app ) {
		return -1;
	}
	app->encoding_type = type;
	return 0;
}
Ejemplo n.º 4
0
int Get_EncodingType()
/* 获取字符编码类型 */
{
	LCUI_App *app;
	app = Get_Self_AppPointer();
	if( !app ) {
		return -1;
	}
	return app->encoding_type;
}
Ejemplo n.º 5
0
int 
AppTask_Custom_Add(int mode, LCUI_Func *func_data)
/*
 * 功能:使用自定义方式添加程序任务
 * 用法示例:
 * 在函数的各参数与队列中的函数及各参数不重复时,添加它
 * AppTask_Custom_Add(ADD_MODE_NOT_REPEAT | AND_ARG_F | AND_ARG_S, func_data);
 * 只要函数和参数1不重复则添加
 * AppTask_Custom_Add(ADD_MODE_NOT_REPEAT | AND_ARG_F, func_data);
 * 要函数不重复则添加
 * AppTask_Custom_Add(ADD_MODE_NOT_REPEAT, func_data);
 * 添加新的,不管是否有重复的
 * AppTask_Custom_Add(ADD_MODE_ADD_NEW, func_data);
 * 有相同函数则覆盖,没有则新增
 * AppTask_Custom_Add(ADD_MODE_REPLACE, func_data);
 * */
{
	int total, i;
	/* 先获取程序数据结构体指针 */
	LCUI_App *app;
	LCUI_FuncQueue *queue;
	LCUI_Func *temp = NULL;
	
	if( func_data->id == (LCUI_ID)0 ) {
		app = Get_Self_AppPointer();
	} else {
		app = Find_App( func_data->id );
	}
	if( !app ) {
		return -1;
	}
	queue = &app->task_queue;
	total = Queue_Get_Total(queue);
	/* 如果模式是“添加新的”模式 */
	if( mode == ADD_MODE_ADD_NEW ) {
		Queue_Add(queue, func_data); 
		return 0;
	}
	
	//printf("mode: %d\n", mode);
	for (i = 0; i < total; ++i) {
		//printf("1\n");
		temp = Queue_Get(queue, i);
		/* 如果指针无效,或者函数指针已有记录 */
		if( !temp || temp->func != func_data->func ) {
			continue;
		}
		/* 如果要求的是不重复模式 */ 
		if(Check_Option(mode, ADD_MODE_NOT_REPEAT)) {
			/* 如果要求是第1个参数不能重复 */
			if(Check_Option(mode, AND_ARG_F)) {
				//printf("ADD_MODE_NOT_REPEAT, AND_ARG_F\n");
				//printf("old:%p, new:%p\n", queue->queue[i].arg_f, arg_f);
				/* 如果要求是第2个参数也不能重复 */
				if(Check_Option(mode, AND_ARG_S)) {
					/* 如果函数以及参数1和2都一样 */ 
					if(temp->arg[0] == func_data->arg[0] 
					&& temp->arg[1] == func_data->arg[1]) {
						__destroy_apptask( func_data );
						return -1; 
					}
				} else {/* 否则,只是要求函数以及第1个参数不能全部重复 */
					if(temp->arg[0] == func_data->arg[0]) { 
						__destroy_apptask( func_data );
						return -1; 
					}
				}
			}/* 否则,如果只是要求是第2个参数不能重复 */
			else if(Check_Option(mode, AND_ARG_S)) {
				if(temp->arg[1] == func_data->arg[1] ) {
					__destroy_apptask( func_data );
					return -1; 
				}
			} else {/* 否则,只是要求函数不同 */ 
				__destroy_apptask( func_data );
				return -1; 
			}
		}/* 如果要求的是替换模式 */
		else if(Check_Option(mode, ADD_MODE_REPLACE)) {
			//printf("ADD_MODE_REPLACE\n");
			/* 如果要求是第1个参数相同 */
			if( Check_Option(mode, AND_ARG_F) ) {
				/* 如果要求是第2个参数也相同 */
				if( Check_Option(mode, AND_ARG_S) ) {
					if(temp->arg[0] == func_data->arg[0] 
					&& temp->arg[1] == func_data->arg[1]
					) {
						break; 
					}
				} else {/* 否则,只是要求函数以及第1个参数全部相同 */
					if(temp->arg[0] == func_data->arg[0]) {
				//		printf("ARG_F\n");
						break; 
					}
				}
			}/* 否则,如果只是要求第2个参数不能相同 */
			else if(Check_Option(mode, AND_ARG_S)) {
				if(temp->arg[1] == func_data->arg[1]) {
					break; 
				}
			} else { 
				break; 
			}
		}
	}
	
	if(i == total) {
		Queue_Add(queue, func_data); 
	} else {
		Queue_Replace( queue, i, func_data ); 
	}
	return 0;
}