Skip to content

Latest commit

 

History

History
96 lines (68 loc) · 2.76 KB

SDL_uikitmessagebox.m

File metadata and controls

96 lines (68 loc) · 2.76 KB
 
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
/*
Simple DirectMedia Layer
Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
#include "../../SDL_internal.h"
#if SDL_VIDEO_DRIVER_UIKIT
#include "SDL.h"
#include "SDL_uikitvideo.h"
/* Display a UIKit message box */
static SDL_bool s_showingMessageBox = SDL_FALSE;
Jan 15, 2015
Jan 15, 2015
33
@interface SDLAlertViewDelegate : NSObject <UIAlertViewDelegate>
Jan 15, 2015
Jan 15, 2015
35
@property (nonatomic, assign) int clickedIndex;
36
37
38
@end
Jan 15, 2015
Jan 15, 2015
39
@implementation SDLAlertViewDelegate
Jul 23, 2014
Jul 23, 2014
41
- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex
Jan 15, 2015
Jan 15, 2015
43
_clickedIndex = (int)buttonIndex;
44
45
}
Jan 15, 2015
Jan 15, 2015
46
@end
47
48
49
50
51
52
53
54
55
56
57
SDL_bool
UIKit_ShowingMessageBox()
{
return s_showingMessageBox;
}
int
UIKit_ShowMessageBox(const SDL_MessageBoxData *messageboxdata, int *buttonid)
{
Jul 14, 2014
Jul 14, 2014
58
59
int i;
const SDL_MessageBoxButtonData *buttons = messageboxdata->buttons;
Jul 14, 2014
Jul 14, 2014
61
@autoreleasepool {
Jan 15, 2015
Jan 15, 2015
62
63
UIAlertView *alert = [[UIAlertView alloc] init];
SDLAlertViewDelegate *delegate = [[SDLAlertViewDelegate alloc] init];
Jan 15, 2015
Jan 15, 2015
65
alert.delegate = delegate;
Jul 23, 2014
Jul 23, 2014
66
67
alert.title = @(messageboxdata->title);
alert.message = @(messageboxdata->message);
Jul 14, 2014
Jul 14, 2014
69
for (i = 0; i < messageboxdata->numbuttons; ++i) {
Aug 6, 2014
Aug 6, 2014
70
[alert addButtonWithTitle:@(buttons[i].text)];
Jul 14, 2014
Jul 14, 2014
71
}
Jul 14, 2014
Jul 14, 2014
73
/* Set up for showing the alert */
Jan 15, 2015
Jan 15, 2015
74
delegate.clickedIndex = messageboxdata->numbuttons;
Jul 14, 2014
Jul 14, 2014
76
[alert show];
Jul 14, 2014
Jul 14, 2014
78
79
80
/* Run the main event loop until the alert has finished */
/* Note that this needs to be done on the main thread */
s_showingMessageBox = SDL_TRUE;
Jan 15, 2015
Jan 15, 2015
81
while (delegate.clickedIndex == messageboxdata->numbuttons) {
Jul 14, 2014
Jul 14, 2014
82
83
84
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
}
s_showingMessageBox = SDL_FALSE;
Jan 15, 2015
Jan 15, 2015
86
*buttonid = messageboxdata->buttons[delegate.clickedIndex].buttonid;
Aug 6, 2014
Aug 6, 2014
88
alert.delegate = nil;
Jul 14, 2014
Jul 14, 2014
89
}
90
91
92
93
94
95
96
return 0;
}
#endif /* SDL_VIDEO_DRIVER_UIKIT */
/* vi: set ts=4 sw=4 expandtab: */