⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 flmodule.c

📁 python s60 1.4.5版本的源代码
💻 C
📖 第 1 页 / 共 4 页
字号:
static PyObject *
newformobject(FL_FORM *form)
{
	formobject *f;
	f = PyObject_New(formobject, &Formtype);
	if (f == NULL)
		return NULL;
	f->ob_form = form;
	return (PyObject *)f;
}


/* The "fl" module */

static PyObject *
forms_make_form(PyObject *dummy, PyObject *args)
{
	int type;
	float w, h;
	FL_FORM *form;
	if (!PyArg_Parse(args, "(iff)", &type, &w, &h))
		return NULL;
	form = fl_bgn_form(type, w, h);
	if (form == NULL) {
		/* XXX Actually, cannot happen! */
		PyErr_NoMemory();
		return NULL;
	}
	fl_end_form();
	return newformobject(form);
}

static PyObject *
forms_activate_all_forms(PyObject *f, PyObject *args)
{
	fl_activate_all_forms();
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_deactivate_all_forms(PyObject *f, PyObject *args)
{
	fl_deactivate_all_forms();
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *my_event_callback = NULL;

static PyObject *
forms_set_event_call_back(PyObject *dummy, PyObject *args)
{
	if (args == Py_None)
		args = NULL;
	my_event_callback = args;
	Py_XINCREF(args);
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_do_or_check_forms(PyObject *dummy, PyObject *args, FL_OBJECT *(*func)(void))
{
	FL_OBJECT *generic;
	genericobject *g;
	PyObject *arg, *res;
	
	if (!PyArg_NoArgs(args))
		return NULL;

	for (;;) {
		Py_BEGIN_ALLOW_THREADS
		generic = (*func)();
		Py_END_ALLOW_THREADS
		if (generic == NULL) {
			Py_INCREF(Py_None);
			return Py_None;
		}
		if (generic == FL_EVENT) {
			int dev;
			short val;
			if (my_event_callback == NULL)
				return PyInt_FromLong(-1L);
			dev = fl_qread(&val);
			arg = Py_BuildValue("(ih)", dev, val);
			if (arg == NULL)
				return NULL;
			res = PyEval_CallObject(my_event_callback, arg);
			Py_XDECREF(res);
			Py_DECREF(arg);
			if (res == NULL)
				return NULL; /* Callback raised exception */
			continue;
		}
		g = findgeneric(generic);
		if (g == NULL) {
			/* Object not known to us (some dialogs cause this) */
			continue; /* Ignore it */
		}
		if (g->ob_callback == NULL) {
			Py_INCREF(g);
			return ((PyObject *) g);
		}
		arg = Py_BuildValue("(OO)", (PyObject *)g, g->ob_callback_arg);
		if (arg == NULL)
			return NULL;
		res = PyEval_CallObject(g->ob_callback, arg);
		Py_XDECREF(res);
		Py_DECREF(arg);
		if (res == NULL)
			return NULL; /* Callback raised exception */
	}
}

static PyObject *
forms_do_forms(PyObject *dummy, PyObject *args)
{
	return forms_do_or_check_forms(dummy, args, fl_do_forms);
}

static PyObject *
forms_check_forms(PyObject *dummy, PyObject *args)
{
	return forms_do_or_check_forms(dummy, args, fl_check_forms);
}

static PyObject *
forms_do_only_forms(PyObject *dummy, PyObject *args)
{
	return forms_do_or_check_forms(dummy, args, fl_do_only_forms);
}

static PyObject *
forms_check_only_forms(PyObject *dummy, PyObject *args)
{
	return forms_do_or_check_forms(dummy, args, fl_check_only_forms);
}

#ifdef UNUSED
static PyObject *
fl_call(void (*func)(void), PyObject *args)
{
	if (!PyArg_NoArgs(args))
		return NULL;
	(*func)();
	Py_INCREF(Py_None);
	return Py_None;
}
#endif

static PyObject *
forms_set_graphics_mode(PyObject *dummy, PyObject *args)
{
	int rgbmode, doublebuf;

	if (!PyArg_Parse(args, "(ii)", &rgbmode, &doublebuf))
		return NULL;
	fl_set_graphics_mode(rgbmode,doublebuf);
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_get_rgbmode(PyObject *dummy, PyObject *args)
{
	extern int fl_rgbmode;

	if (args != NULL) {
		PyErr_BadArgument();
		return NULL;
	}
	return PyInt_FromLong((long)fl_rgbmode);
}

static PyObject *
forms_show_errors(PyObject *dummy, PyObject *args)
{
	int show;
	if (!PyArg_Parse(args, "i", &show))
		return NULL;
	fl_show_errors(show);
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_set_font_name(PyObject *dummy, PyObject *args)
{
	int numb;
	char *name;
	if (!PyArg_Parse(args, "(is)", &numb, &name))
		return NULL;
	fl_set_font_name(numb, name);
	Py_INCREF(Py_None);
	return Py_None;
}


static PyObject *
forms_qdevice(PyObject *self, PyObject *args)
{
	short arg1;
	if (!PyArg_Parse(args, "h", &arg1))
		return NULL;
	fl_qdevice(arg1);
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_unqdevice(PyObject *self, PyObject *args)
{
	short arg1;
	if (!PyArg_Parse(args, "h", &arg1))
		return NULL;
	fl_unqdevice(arg1);
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_isqueued(PyObject *self, PyObject *args)
{
	long retval;
	short arg1;
	if (!PyArg_Parse(args, "h", &arg1))
		return NULL;
	retval = fl_isqueued(arg1);

	return PyInt_FromLong(retval);
}

static PyObject *
forms_qtest(PyObject *self, PyObject *args)
{
	long retval;
	retval = fl_qtest();
	return PyInt_FromLong(retval);
}


static PyObject *
forms_qread(PyObject *self, PyObject *args)
{
	int dev;
	short val;
	Py_BEGIN_ALLOW_THREADS
	dev = fl_qread(&val);
	Py_END_ALLOW_THREADS
	return Py_BuildValue("(ih)", dev, val);
}

static PyObject *
forms_qreset(PyObject *self, PyObject *args)
{
	if (!PyArg_NoArgs(args)) return NULL;

	fl_qreset();
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_qenter(PyObject *self, PyObject *args)
{
	short arg1, arg2;
	if (!PyArg_Parse(args, "(hh)", &arg1, &arg2))
		return NULL;
	fl_qenter(arg1, arg2);
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_color(PyObject *self, PyObject *args)
{
	int arg;

	if (!PyArg_Parse(args, "i", &arg)) return NULL;

	fl_color((short) arg);

	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_mapcolor(PyObject *self, PyObject *args)
{
	int arg0, arg1, arg2, arg3;

	if (!PyArg_Parse(args, "(iiii)", &arg0, &arg1, &arg2, &arg3))
		return NULL;

	fl_mapcolor(arg0, (short) arg1, (short) arg2, (short) arg3);

	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_getmcolor(PyObject *self, PyObject *args)
{
	int arg;
	short r, g, b;

	if (!PyArg_Parse(args, "i", &arg)) return NULL;

	fl_getmcolor(arg, &r, &g, &b);

	return Py_BuildValue("(hhh)", r, g, b);
}

static PyObject *
forms_get_mouse(PyObject *self, PyObject *args)
{
	float x, y;

	if (!PyArg_NoArgs(args)) return NULL;
	
	fl_get_mouse(&x, &y);

	return Py_BuildValue("(ff)", x, y);
}

static PyObject *
forms_tie(PyObject *self, PyObject *args)
{
	short arg1, arg2, arg3;
	if (!PyArg_Parse(args, "(hhh)", &arg1, &arg2, &arg3))
		return NULL;
	fl_tie(arg1, arg2, arg3);
	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_show_message(PyObject *f, PyObject *args)
{
	char *a, *b, *c;

	if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;

	Py_BEGIN_ALLOW_THREADS
	fl_show_message(a, b, c);
	Py_END_ALLOW_THREADS

	Py_INCREF(Py_None);
	return Py_None;
}

static PyObject *
forms_show_choice(PyObject *f, PyObject *args)
{
	char *m1, *m2, *m3, *b1, *b2, *b3;
	int nb;
	char *format;
	long rv;

	if (args == NULL || !PyTuple_Check(args)) {
		PyErr_BadArgument();
		return NULL;
	}
	nb = PyTuple_Size(args) - 3;
	if (nb <= 0) {
		PyErr_SetString(PyExc_TypeError,
				"need at least one button label");
		return NULL;
	}
	if (PyInt_Check(PyTuple_GetItem(args, 3))) {
		PyErr_SetString(PyExc_TypeError,
			   "'number-of-buttons' argument not needed");
		return NULL;
	}
	switch (nb) {
	case 1: format = "(ssss)"; break;
	case 2: format = "(sssss)"; break;
	case 3: format = "(ssssss)"; break;
	default:
		PyErr_SetString(PyExc_TypeError, "too many button labels");
		return NULL;
	}

	if (!PyArg_Parse(args, format, &m1, &m2, &m3, &b1, &b2, &b3))
		return NULL;

	Py_BEGIN_ALLOW_THREADS
	rv = fl_show_choice(m1, m2, m3, nb, b1, b2, b3);
	Py_END_ALLOW_THREADS
	return PyInt_FromLong(rv);
}

static PyObject *
forms_show_question(PyObject *f, PyObject *args)
{
	int ret;
	char *a, *b, *c;

	if (!PyArg_Parse(args, "(sss)", &a, &b, &c)) return NULL;

	Py_BEGIN_ALLOW_THREADS
	ret = fl_show_question(a, b, c);
	Py_END_ALLOW_THREADS

	return PyInt_FromLong((long) ret);
}

static PyObject *
forms_show_input(PyObject *f, PyObject *args)
{
	char *str;
	char *a, *b;

	if (!PyArg_Parse(args, "(ss)", &a, &b)) return NULL;

	Py_BEGIN_ALLOW_THREADS
	str = fl_show_input(a, b);
	Py_END_ALLOW_THREADS

	if (str == NULL) {
		Py_INCREF(Py_None);
		return Py_None;
	}
	return PyString_FromString(str);
}

static PyObject *
forms_file_selector(PyObject *f, PyObject *args)
{
	char *str;
	char *a, *b, *c, *d;

	if (!PyArg_Parse(args, "(ssss)", &a, &b, &c, &d)) return NULL;

	Py_BEGIN_ALLOW_THREADS
	str = fl_show_file_selector(a, b, c, d);
	Py_END_ALLOW_THREADS

	if (str == NULL) {
		Py_INCREF(Py_None);
		return Py_None;
	}
	return PyString_FromString(str);
}


static PyObject *
forms_file_selector_func(PyObject *args, char *(*func)(void))
{
	char *str;

	str = (*func) ();

	if (str == NULL) {
		Py_INCREF(Py_None);
		return Py_None;
	}
	return PyString_FromString(str);
}

static PyObject *
forms_get_directory(PyObject *f, PyObject *args)
{
	return forms_file_selector_func(args, fl_get_directory);
}

static PyObject *
forms_get_pattern(PyObject *f, PyObject *args)
{
	return forms_file_selector_func(args, fl_get_pattern);
}

static PyObject *
forms_get_filename(PyObject *f, PyObject *args)
{
	return forms_file_selector_func(args, fl_get_filename);
}

static PyMethodDef forms_methods[] = {
/* adm */
	{"make_form",		forms_make_form},
	{"activate_all_forms",	forms_activate_all_forms},
	{"deactivate_all_forms",forms_deactivate_all_forms},
/* gl support wrappers */
	{"qdevice",		forms_qdevice},
	{"unqdevice",		forms_unqdevice},
	{"isqueued",		forms_isqueued},
	{"qtest",		forms_qtest},
	{"qread",		forms_qread},
/*	{"blkqread",		forms_blkqread}, */
	{"qreset",		forms_qreset},
	{"qenter",		forms_qenter},
	{"get_mouse",		forms_get_mouse},
	{"tie",			forms_tie},
/*	{"new_events",		forms_new_events}, */
	{"color",		forms_color},
	{"mapcolor",		forms_mapcolor},
	{"getmcolor",		forms_getmcolor},
/* interaction */
	{"do_forms",		forms_do_forms},
	{"do_only_forms",	forms_do_only_forms},
	{"check_forms",		forms_check_forms},
	{"check_only_forms",	forms_check_only_forms},
	{"set_event_call_back",	forms_set_event_call_back},
/* goodies */
	{"show_message",	forms_show_message},
	{"show_question",	forms_show_question},
	{"show_choice",		forms_show_choice},
	{"show_input",		forms_show_input},
	{"show_file_selector",	forms_file_selector},
	{"file_selector",	forms_file_selector}, /* BW compat */
	{"get_directory",	forms_get_directory},
	{"get_pattern",		forms_get_pattern},
	{"get_filename",	forms_get_filename},
	{"set_graphics_mode",	forms_set_graphics_mode},
	{"get_rgbmode",		forms_get_rgbmode},
	{"show_errors",		forms_show_errors},
	{"set_font_name",	forms_set_font_name},
	{NULL,			NULL}		/* sentinel */
};

DL_EXPORT(void)
initfl(void)
{
	Py_InitModule("fl", forms_methods);
	foreground();
	fl_init();
}



⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -