demo_workbench.c 3.5 KB
Newer Older
B
bernard.xiong 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
#include <rtgui/rtgui.h>
#include <rtgui/rtgui_system.h>

#include <rtgui/widgets/view.h>
#include <rtgui/widgets/workbench.h>

static rt_bool_t demo_workbench_event_handler(struct rtgui_widget* widget, struct rtgui_event* event)
{
	/* 我们目前只对按键事件感兴趣。如果当前workbench处于模式显示状态,忽略它  */
	if ((event->type == RTGUI_EVENT_KBD) && !RTGUI_WORKBENCH_IS_MODAL_MODE(RTGUI_WORKBENCH(widget)))
	{
		struct rtgui_event_kbd* ekbd = (struct rtgui_event_kbd*)event;

		if (ekbd->type == RTGUI_KEYDOWN)
		{
			if (ekbd->key == RTGUIK_RIGHT)
			{
				demo_view_next(RT_NULL, RT_NULL);
				return RT_TRUE;
			}
			else if (ekbd->key == RTGUIK_LEFT)
			{
				demo_view_prev(RT_NULL, RT_NULL);
				return RT_TRUE;
			}
		}
	}

	/* 如果不是绘制事件,使用view原来的事件处理函数处理 */
	return rtgui_workbench_event_handler(widget, event);
}

static void workbench_entry(void* parameter)
{
	rt_mq_t mq;
	struct rtgui_workbench* workbench;

	/* 创建GUI应用需要的消息队列 */
#ifdef RTGUI_USING_SMALL_SIZE
B
bernard.xiong 已提交
40
	mq = rt_mq_create("workbench", 32, 32, RT_IPC_FLAG_FIFO);
B
bernard.xiong 已提交
41
#else
B
bernard.xiong 已提交
42
	mq = rt_mq_create("workbench", 256, 32, RT_IPC_FLAG_FIFO);
B
bernard.xiong 已提交
43 44 45 46 47 48 49 50 51 52 53
#endif
	/* 注册当前线程为GUI线程 */
	rtgui_thread_register(rt_thread_self(), mq);

	/* 创建一个工作台 */
	workbench = rtgui_workbench_create("main", "workbench");
	if (workbench == RT_NULL) return;

	rtgui_widget_set_event_handler(RTGUI_WIDGET(workbench), demo_workbench_event_handler);

	/* 初始化各个例子的视图 */
54
#if RT_VERSION == 4
B
bernard.xiong@gmail.com 已提交
55
	demo_view_benchmark(workbench);
56 57
#endif

B
bernard.xiong 已提交
58
	demo_view_dc(workbench);
59
#if RT_VERSION == 4
B
bernard.xiong 已提交
60 61 62
#ifdef RTGUI_USING_TTF
	demo_view_ttf(workbench);
#endif
63 64
#endif

65
#ifndef RTGUI_USING_SMALL_SIZE
66
	demo_view_dc_buffer(workbench);
67
#endif
B
bernard.xiong 已提交
68
	demo_view_animation(workbench);
69
#ifndef RTGUI_USING_SMALL_SIZE
B
bernard.xiong 已提交
70
	demo_view_buffer_animation(workbench);
B
bernard.xiong@gmail.com 已提交
71
	// demo_view_instrument_panel(workbench);
72
#endif
B
bernard.xiong 已提交
73 74 75 76 77
	demo_view_window(workbench);
	demo_view_label(workbench);
	demo_view_button(workbench);
	demo_view_checkbox(workbench);
	demo_view_progressbar(workbench);
B
bernard.xiong 已提交
78
	demo_view_scrollbar(workbench);
B
bernard.xiong 已提交
79 80
	demo_view_radiobox(workbench);
	demo_view_textbox(workbench);
B
bernard.xiong 已提交
81
	demo_view_listbox(workbench);
B
bernard.xiong@gmail.com 已提交
82 83 84
	demo_view_menu(workbench);
	demo_view_listctrl(workbench);
	demo_view_combobox(workbench);
B
bernard.xiong 已提交
85
	demo_view_slider(workbench);
86
	demo_view_notebook(workbench);
B
bernard.xiong 已提交
87
	demo_view_mywidget(workbench);
88
#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW)
B
bernard.xiong 已提交
89
	demo_view_image(workbench);
90
#endif
qiuyiuestc's avatar
qiuyiuestc 已提交
91
#ifdef RT_USING_MODULE	
92
#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW)
qiuyiuestc's avatar
qiuyiuestc 已提交
93
	demo_view_module(workbench);
94
#endif
qiuyiuestc's avatar
qiuyiuestc 已提交
95
#endif
B
bernard.xiong 已提交
96
	demo_listview_view(workbench);
B
bernard.xiong 已提交
97
	demo_listview_icon_view(workbench);
98
#if defined(RTGUI_USING_DFS_FILERW) || defined(RTGUI_USING_STDIO_FILERW)
B
bernard.xiong 已提交
99
	demo_fn_view(workbench);
100
#endif
B
bernard.xiong 已提交
101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122

	/* 显示视图 */
	demo_view_show();

	/* 执行工作台事件循环 */
	rtgui_workbench_event_loop(workbench);

	/* 去注册GUI线程 */
	rtgui_thread_deregister(rt_thread_self());
	rt_mq_delete(mq);
}

void workbench_init()
{
	static rt_bool_t inited = RT_FALSE;

	if (inited == RT_FALSE) /* 避免重复初始化而做的保护 */
	{
		rt_thread_t tid;

		tid = rt_thread_create("wb",
			workbench_entry, RT_NULL,
123
			2048 * 2, 25, 10);
B
bernard.xiong 已提交
124 125 126 127 128 129 130

		if (tid != RT_NULL) rt_thread_startup(tid);

		inited = RT_TRUE;
	}
}

131
#ifdef RT_USING_FINSH
B
bernard.xiong 已提交
132 133 134 135 136 137 138 139
#include <finsh.h>
void workbench()
{
	workbench_init();
}
/* finsh的命令输出,可以直接执行workbench()函数以执行上面的函数 */
FINSH_FUNCTION_EXPORT(workbench, workbench demo)
#endif