rtgui_application.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * File : rtgui_application.h
  3. * This file is part of RTGUI in RT-Thread RTOS
  4. * COPYRIGHT (C) 2006 - 2009, RT-Thread Development Team
  5. *
  6. * The license and distribution terms for this file may be
  7. * found in the file LICENSE in this distribution or at
  8. * http://www.rt-thread.org/license/LICENSE
  9. *
  10. * Change Logs:
  11. * Date Author Notes
  12. * 2012-01-13 Grissiom first version
  13. */
  14. #ifndef __RTGUI_APPLICATION_H__
  15. #define __RTGUI_APPLICATION_H__
  16. #include <rtthread.h>
  17. #include <rtgui/rtgui.h>
  18. #include <rtgui/event.h>
  19. #include <rtgui/rtgui_system.h>
  20. DECLARE_CLASS_TYPE(application);
  21. /** Gets the type of a application */
  22. #define RTGUI_APPLICATION_TYPE (RTGUI_TYPE(application))
  23. /** Casts the object to an rtgui_workbench */
  24. #define RTGUI_APPLICATION(obj) (RTGUI_OBJECT_CAST((obj), RTGUI_APPLICATION_TYPE, struct rtgui_application))
  25. /** Checks if the object is an rtgui_workbench */
  26. #define RTGUI_IS_APPLICATION(obj) (RTGUI_OBJECT_CHECK_TYPE((obj), RTGUI_APPLICATION_TYPE))
  27. enum rtgui_application_flag
  28. {
  29. RTGUI_APPLICATION_FLAG_EXITED = 0x04,
  30. RTGUI_APPLICATION_FLAG_SHOWN = 0x08
  31. };
  32. typedef void (*rtgui_idle_func)(struct rtgui_object* obj, struct rtgui_event *event);
  33. struct rtgui_application
  34. {
  35. struct rtgui_object parent;
  36. /* application name */
  37. unsigned char *name;
  38. enum rtgui_application_flag state_flag;
  39. rt_uint16_t ref_count;
  40. rt_uint16_t exit_code;
  41. /* the thread id */
  42. rt_thread_t tid;
  43. rt_thread_t server;
  44. /* the message queue of thread */
  45. rt_mq_t mq;
  46. /* event buffer */
  47. rt_uint8_t event_buffer[sizeof(union rtgui_event_generic)];
  48. /* if not RT_NULL, the application is modaled by modal_object. If is
  49. * RT_NULL, nothing modals. */
  50. struct rtgui_object *modal_object;
  51. /* on idle event handler */
  52. rtgui_idle_func on_idle;
  53. };
  54. /**
  55. * create an application named @myname on thread @param tid
  56. */
  57. struct rtgui_application* rtgui_application_create(
  58. rt_thread_t tid,
  59. const char *myname);
  60. void rtgui_application_destroy(struct rtgui_application *app);
  61. rt_err_t rtgui_application_show(struct rtgui_application *app);
  62. rt_err_t rtgui_application_hide(struct rtgui_application *app);
  63. rt_base_t rtgui_application_run(struct rtgui_application *app);
  64. void rtgui_application_exit(struct rtgui_application *app, rt_uint16_t code);
  65. void rtgui_application_set_onidle(rtgui_idle_func onidle);
  66. rtgui_idle_func rtgui_application_get_onidle(void);
  67. struct rtgui_application* rtgui_application_self(void);
  68. rt_thread_t rtgui_application_get_server(void);
  69. void rtgui_application_set_root_object(struct rtgui_object* object);
  70. struct rtgui_object* rtgui_application_get_root_object(void);
  71. struct rtgui_event;
  72. rt_err_t rtgui_application_send(rt_thread_t tid, struct rtgui_event* event, rt_size_t event_size);
  73. rt_err_t rtgui_application_send_urgent(rt_thread_t tid, struct rtgui_event* event, rt_size_t event_size);
  74. rt_err_t rtgui_application_send_sync(rt_thread_t tid, struct rtgui_event* event, rt_size_t event_size);
  75. rt_err_t rtgui_application_ack(struct rtgui_event* event, rt_int32_t status);
  76. rt_err_t rtgui_application_recv(struct rtgui_event* event, rt_size_t event_size);
  77. rt_err_t rtgui_application_recv_nosuspend(struct rtgui_event* event, rt_size_t event_size);
  78. rt_err_t rtgui_application_recv_filter(rt_uint32_t type, struct rtgui_event* event, rt_size_t event_size);
  79. #endif /* end of include guard: RTGUI_APPLICATION_H */