[Tizen] Support Autoconf 2.71
[platform/upstream/SDL.git] / test / testmessage.c
1 /*
2   Copyright (C) 1997-2020 Sam Lantinga <slouken@libsdl.org>
3
4   This software is provided 'as-is', without any express or implied
5   warranty.  In no event will the authors be held liable for any damages
6   arising from the use of this software.
7
8   Permission is granted to anyone to use this software for any purpose,
9   including commercial applications, and to alter it and redistribute it
10   freely.
11 */
12
13 /* Simple test of the SDL MessageBox API */
14
15 #include <stdio.h>
16 #include <stdlib.h>
17
18 #include "SDL.h"
19
20 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
21 static void
22 quit(int rc)
23 {
24     SDL_Quit();
25     exit(rc);
26 }
27
28 static int SDLCALL
29 button_messagebox(void *eventNumber)
30 {
31     const SDL_MessageBoxButtonData buttons[] = {
32         {
33             SDL_MESSAGEBOX_BUTTON_RETURNKEY_DEFAULT,
34             0,
35             "OK"
36         },{
37             SDL_MESSAGEBOX_BUTTON_ESCAPEKEY_DEFAULT,
38             1,
39             "Cancel"
40         },
41     };
42
43     SDL_MessageBoxData data = {
44         SDL_MESSAGEBOX_INFORMATION,
45         NULL, /* no parent window */
46         "Custom MessageBox",
47         "This is a custom messagebox",
48         2,
49         NULL,/* buttons */
50         NULL /* Default color scheme */
51     };
52
53     int button = -1;
54     int success = 0;
55     data.buttons = buttons;
56     if (eventNumber) {
57         data.message = "This is a custom messagebox from a background thread.";
58     }
59
60     success = SDL_ShowMessageBox(&data, &button);
61     if (success == -1) {
62         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
63         if (eventNumber) {
64             SDL_UserEvent event;
65             event.type = (intptr_t)eventNumber;
66             SDL_PushEvent((SDL_Event*)&event);
67             return 1;
68         } else {
69             quit(2);
70         }
71     }
72     SDL_Log("Pressed button: %d, %s\n", button, button == -1 ? "[closed]" : button == 1 ? "Cancel" : "OK");
73
74     if (eventNumber) {
75         SDL_UserEvent event;
76         event.type = (intptr_t)eventNumber;
77         SDL_PushEvent((SDL_Event*)&event);
78     }
79
80     return 0;
81 }
82 int
83 main(int argc, char *argv[])
84 {
85     int success;
86
87     /* Enable standard application logging */
88     SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_INFO);
89
90     success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
91                 "Simple MessageBox",
92                 "This is a simple error MessageBox",
93                 NULL);
94     if (success == -1) {
95         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
96         quit(1);
97     }
98
99     success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
100                 "Simple MessageBox",
101                 "This is a simple MessageBox with a newline:\r\nHello world!",
102                 NULL);
103     if (success == -1) {
104         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
105         quit(1);
106     }
107
108     success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
109                 NULL,
110                 "NULL Title",
111                 NULL);
112     if (success == -1) {
113         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
114         quit(1);
115     }
116
117     success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
118                 "NULL Message",
119                 NULL,
120                 NULL);
121     if (success == -1) {
122         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
123         quit(1);
124     }
125
126     /* Google says this is Traditional Chinese for "beef with broccoli" */
127     success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
128                 "UTF-8 Simple MessageBox",
129                 "Unicode text: '牛肉西蘭花' ...",
130                 NULL);
131     if (success == -1) {
132         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
133         quit(1);
134     }
135
136     /* Google says this is Traditional Chinese for "beef with broccoli" */
137     success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
138                 "UTF-8 Simple MessageBox",
139                 "Unicode text and newline:\r\n'牛肉西蘭花'\n'牛肉西蘭花'",
140                 NULL);
141     if (success == -1) {
142         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
143         quit(1);
144     }
145
146     /* Google says this is Traditional Chinese for "beef with broccoli" */
147     success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
148                 "牛肉西蘭花",
149                 "Unicode text in the title.",
150                 NULL);
151     if (success == -1) {
152         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
153         quit(1);
154     }
155
156     button_messagebox(NULL);
157
158     /* Test showing a message box from a background thread.
159
160        On Mac OS X, the video subsystem needs to be initialized for this
161        to work, since the message box events are dispatched by the Cocoa
162        subsystem on the main thread.
163      */
164     if (SDL_Init(SDL_INIT_VIDEO) < 0) {
165         SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Couldn't initialize SDL video subsystem: %s\n", SDL_GetError());
166         return (1);
167     }
168     {
169         int status = 0;
170         SDL_Event event;
171         intptr_t eventNumber = SDL_RegisterEvents(1);
172         SDL_Thread* thread = SDL_CreateThread(&button_messagebox, "MessageBox", (void*)eventNumber);
173
174         while (SDL_WaitEvent(&event))
175         {
176             if (event.type == eventNumber) {
177                 break;
178             }
179         }
180
181         SDL_WaitThread(thread, &status);
182
183         SDL_Log("Message box thread return %i\n", status);
184     }
185
186     /* Test showing a message box with a parent window */
187     {
188         SDL_Event event;
189         SDL_Window *window = SDL_CreateWindow("Test", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 640, 480, 0);
190
191         success = SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR,
192                     "Simple MessageBox",
193                     "This is a simple error MessageBox with a parent window",
194                     window);
195         if (success == -1) {
196             SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "Error Presenting MessageBox: %s\n", SDL_GetError());
197             quit(1);
198         }
199
200         while (SDL_WaitEvent(&event))
201         {
202             if (event.type == SDL_QUIT || event.type == SDL_KEYUP) {
203                 break;
204             }
205         }
206     }
207
208     SDL_Quit();
209     return (0);
210 }