1 /* This is a small demo of the high-performance GUIX graphics framework. */
2
3 #include <stdio.h>
4 #include "gx_api.h"
5 #include "dynamic_menu_resources.h"
6 #include "dynamic_menu_specifications.h"
7
8 /* Define the ThreadX demo thread control block and stack. */
9
10 TX_THREAD demo_thread;
11 UCHAR demo_thread_stack[4096];
12
13 #define BYTE_POOL_SIZE (4 * 1024)
14 UCHAR byte_pool_mem[BYTE_POOL_SIZE];
15 TX_BYTE_POOL byte_pool;
16
17 GX_WINDOW_ROOT *root;
18
19
20 /* Define prototypes. */
21 VOID start_guix(VOID);
22 extern UINT win32_graphics_driver_setup_24xrgb(GX_DISPLAY *display);
23
main(int argc,char ** argv)24 int main(int argc, char ** argv)
25 {
26 tx_kernel_enter();
27 return(0);
28 }
29
30
tx_application_define(void * first_unused_memory)31 VOID tx_application_define(void *first_unused_memory)
32 {
33 /* Create the main demo thread. */
34 start_guix();
35 }
36
demo_allocator(ULONG size)37 void *demo_allocator(ULONG size)
38 {
39 VOID *memptr;
40
41 if (tx_byte_allocate(&byte_pool, &memptr, size, TX_NO_WAIT) == TX_SUCCESS)
42 {
43 return memptr;
44 }
45 return NULL;
46 }
47
demo_free(void * mem)48 void demo_free(void *mem)
49 {
50 tx_byte_release(mem);
51 }
52
report_byte_pool_status(VOID)53 VOID report_byte_pool_status(VOID)
54 {
55 ULONG available_bytes;
56 ULONG fragments;
57 char mem_message[120];
58
59 tx_byte_pool_info_get(&byte_pool, GX_NULL, &available_bytes, &fragments, GX_NULL, GX_NULL, GX_NULL);
60 sprintf(mem_message, "Byte Pool: %d bytes available, %d fragments\n", (int)available_bytes, (int)fragments);
61 #if defined WIN_32
62 OutputDebugString(mem_message);
63 #endif
64 }
65
66
start_guix(VOID)67 VOID start_guix(VOID)
68 {
69 tx_byte_pool_create(&byte_pool, "scratchpad", byte_pool_mem, BYTE_POOL_SIZE);
70
71 /* Initialize GUIX. */
72 gx_system_initialize();
73
74 /* install our memory allocator and de-allocator */
75 gx_system_memory_allocator_set(demo_allocator, demo_free);
76 report_byte_pool_status();
77
78 gx_studio_display_configure(MAIN_DISPLAY, win32_graphics_driver_setup_24xrgb,
79 LANGUAGE_ENGLISH, MAIN_DISPLAY_THEME_1, &root);
80
81 /* create the top menu screen */
82 gx_studio_named_widget_create("top_menu", (GX_WIDGET *) root, GX_NULL);
83
84 /* Show the root window to make it and child screen visible. */
85 gx_widget_show(root);
86
87 /* let GUIX run */
88 gx_system_start();
89 }
90
ToggleScreen(GX_WINDOW * new_win,GX_WINDOW * old_win)91 void ToggleScreen(GX_WINDOW *new_win, GX_WINDOW *old_win)
92 {
93 if (!new_win->gx_widget_parent)
94 {
95 gx_widget_attach(root, (GX_WIDGET *) new_win);
96 }
97 else
98 {
99 gx_widget_show((GX_WIDGET *) new_win);
100 }
101 gx_widget_hide((GX_WIDGET *) old_win);
102 }
103
top_menu_event(GX_WINDOW * top_menu,GX_EVENT * event_ptr)104 UINT top_menu_event(GX_WINDOW *top_menu, GX_EVENT *event_ptr)
105 {
106 GX_WIDGET *new_win;
107
108 switch(event_ptr->gx_event_type)
109 {
110 case GX_SIGNAL(ID_ALBUMS, GX_EVENT_CLICKED):
111 gx_studio_named_widget_create("albums_screen", (GX_WIDGET *) root, GX_NULL);
112 break;
113
114 case GX_SIGNAL(ID_ARTISTS, GX_EVENT_CLICKED):
115 gx_studio_named_widget_create("artists_screen", (GX_WIDGET *) root, GX_NULL);
116 break;
117
118 case GX_SIGNAL(ID_GENRES, GX_EVENT_CLICKED):
119 gx_studio_named_widget_create("genre_screen", (GX_WIDGET *) root, GX_NULL);
120 break;
121
122 case GX_SIGNAL(ID_PLAYLISTS, GX_EVENT_CLICKED):
123 gx_studio_named_widget_create("playlist_screen", (GX_WIDGET *) root, GX_NULL);
124 break;
125
126 case GX_SIGNAL(ID_SONGS, GX_EVENT_CLICKED):
127 gx_studio_named_widget_create("songs_screen", (GX_WIDGET *) root, GX_NULL);
128 break;
129
130 case GX_SIGNAL(ID_SETTINGS, GX_EVENT_CLICKED):
131 gx_studio_named_widget_create("second_level_derived_screen", (GX_WIDGET *) GX_NULL, &new_win);
132 gx_widget_attach(root, new_win);
133 break;
134
135 default:
136 gx_window_event_process(top_menu, event_ptr);
137 }
138 return 0;
139 }
140
141
sub_menu_event(GX_WINDOW * menu,GX_EVENT * event_ptr)142 UINT sub_menu_event(GX_WINDOW *menu, GX_EVENT *event_ptr)
143 {
144 switch(event_ptr->gx_event_type)
145 {
146 case GX_EVENT_SHOW:
147 gx_window_event_process(menu, event_ptr);
148 #if defined WIN_32
149 OutputDebugString("Received Show Event\n");
150 #endif
151 break;
152
153 case GX_SIGNAL(IDB_BACK, GX_EVENT_CLICKED):
154 gx_widget_delete(menu);
155 report_byte_pool_status();
156 break;
157
158 default:
159 gx_window_event_process(menu, event_ptr);
160 }
161 return 0;
162 }
163