Browse Source

Updated to iOS8 alert windows to avoid deprecation warnings

tags/2021-05-28
jules 9 years ago
parent
commit
d0cb3d222a
1 changed files with 75 additions and 25 deletions
  1. +75
    -25
      modules/juce_gui_basics/native/juce_ios_Windowing.mm

+ 75
- 25
modules/juce_gui_basics/native/juce_ios_Windowing.mm View File

@@ -124,20 +124,27 @@ void LookAndFeel::playAlertSound()
//============================================================================== //==============================================================================
class iOSMessageBox; class iOSMessageBox;
} // (juce namespace)
#if defined (__IPHONE_8_0) && __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_8_0
#define JUCE_USE_NEW_IOS_ALERTWINDOW 1
#endif
@interface JuceAlertBoxDelegate : NSObject <UIAlertViewDelegate>
{
@public
iOSMessageBox* owner;
}
#if ! JUCE_USE_NEW_IOS_ALERTWINDOW
} // (juce namespace)
- (void) alertView: (UIAlertView*) alertView clickedButtonAtIndex: (NSInteger) buttonIndex;
@interface JuceAlertBoxDelegate : NSObject <UIAlertViewDelegate>
{
@public
iOSMessageBox* owner;
}
@end
- (void) alertView: (UIAlertView*) alertView clickedButtonAtIndex: (NSInteger) buttonIndex;
@end
namespace juce
{
#endif
namespace juce
{
class iOSMessageBox class iOSMessageBox
{ {
@@ -145,9 +152,30 @@ public:
iOSMessageBox (const String& title, const String& message, iOSMessageBox (const String& title, const String& message,
NSString* button1, NSString* button2, NSString* button3, NSString* button1, NSString* button2, NSString* button3,
ModalComponentManager::Callback* cb, const bool async) ModalComponentManager::Callback* cb, const bool async)
: result (0), resultReceived (false), delegate (nil), alert (nil),
callback (cb), isYesNo (button3 != nil), isAsync (async)
: result (0), resultReceived (false), callback (cb), isAsync (async)
{ {
#if JUCE_USE_NEW_IOS_ALERTWINDOW
if (currentlyFocusedPeer != nullptr)
{
UIAlertController* alert = [UIAlertController alertControllerWithTitle: juceStringToNS (title)
message: juceStringToNS (message)
preferredStyle: UIAlertControllerStyleAlert];
addButton (alert, button1, 0);
addButton (alert, button2, 1);
addButton (alert, button3, 2);
[currentlyFocusedPeer->controller presentViewController: alert
animated: YES
completion: nil];
}
else
{
// Since iOS8, alert windows need to be associated with a window, so you need to
// have at least one window on screen when you use this
jassertfalse;
}
#else
delegate = [[JuceAlertBoxDelegate alloc] init]; delegate = [[JuceAlertBoxDelegate alloc] init];
delegate->owner = this; delegate->owner = this;
@@ -158,12 +186,15 @@ public:
otherButtonTitles: button2, button3, nil]; otherButtonTitles: button2, button3, nil];
[alert retain]; [alert retain];
[alert show]; [alert show];
#endif
} }
~iOSMessageBox() ~iOSMessageBox()
{ {
#if ! JUCE_USE_NEW_IOS_ALERTWINDOW
[alert release]; [alert release];
[delegate release]; [delegate release];
#endif
} }
int getResult() int getResult()
@@ -172,7 +203,11 @@ public:
JUCE_AUTORELEASEPOOL JUCE_AUTORELEASEPOOL
{ {
#if JUCE_USE_NEW_IOS_ALERTWINDOW
while (! resultReceived)
#else
while (! (alert.hidden || resultReceived)) while (! (alert.hidden || resultReceived))
#endif
[[NSRunLoop mainRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]]; [[NSRunLoop mainRunLoop] runUntilDate: [NSDate dateWithTimeIntervalSinceNow: 0.01]];
} }
@@ -194,28 +229,43 @@ public:
private: private:
int result; int result;
bool resultReceived; bool resultReceived;
JuceAlertBoxDelegate* delegate;
UIAlertView* alert;
ScopedPointer<ModalComponentManager::Callback> callback; ScopedPointer<ModalComponentManager::Callback> callback;
const bool isYesNo, isAsync;
const bool isAsync;
#if JUCE_USE_NEW_IOS_ALERTWINDOW
void addButton (UIAlertController* alert, NSString* text, int index)
{
if (text != nil)
[alert addAction: [UIAlertAction actionWithTitle: text
style: UIAlertActionStyleDefault
handler: ^(UIAlertAction* action) { this->buttonClicked (index); }]];
}
#else
UIAlertView* alert;
JuceAlertBoxDelegate* delegate;
#endif
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (iOSMessageBox) JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (iOSMessageBox)
}; };
} // (juce namespace)
@implementation JuceAlertBoxDelegate
#if ! JUCE_USE_NEW_IOS_ALERTWINDOW
} // (juce namespace)
- (void) alertView: (UIAlertView*) alertView clickedButtonAtIndex: (NSInteger) buttonIndex
{
owner->buttonClicked ((int) buttonIndex);
alertView.hidden = true;
}
@implementation JuceAlertBoxDelegate
@end
- (void) alertView: (UIAlertView*) alertView clickedButtonAtIndex: (NSInteger) buttonIndex
{
owner->buttonClicked ((int) buttonIndex);
alertView.hidden = true;
}
@end
namespace juce
{
#endif
namespace juce
{
//============================================================================== //==============================================================================
#if JUCE_MODAL_LOOPS_PERMITTED #if JUCE_MODAL_LOOPS_PERMITTED


Loading…
Cancel
Save