| @@ -51,15 +51,13 @@ JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, launchApp, void, (JNIEnv* en | |||||
| JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, suspendApp, void, (JNIEnv* env, jobject activity)) | JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, suspendApp, void, (JNIEnv* env, jobject activity)) | ||||
| { | { | ||||
| JUCEApplicationBase* const app = JUCEApplicationBase::getInstance(); | |||||
| if (app != nullptr) | |||||
| if (JUCEApplicationBase* const app = JUCEApplicationBase::getInstance()) | |||||
| app->suspended(); | app->suspended(); | ||||
| } | } | ||||
| JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, resumeApp, void, (JNIEnv* env, jobject activity)) | JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, resumeApp, void, (JNIEnv* env, jobject activity)) | ||||
| { | { | ||||
| JUCEApplicationBase* const app = JUCEApplicationBase::getInstance(); | |||||
| if (app != nullptr) | |||||
| if (JUCEApplicationBase* const app = JUCEApplicationBase::getInstance()) | |||||
| app->resumed(); | app->resumed(); | ||||
| } | } | ||||
| @@ -415,9 +413,7 @@ public: | |||||
| buffer = GlobalRef (env->NewIntArray (sizeNeeded)); | buffer = GlobalRef (env->NewIntArray (sizeNeeded)); | ||||
| } | } | ||||
| jint* dest = env->GetIntArrayElements ((jintArray) buffer.get(), 0); | |||||
| if (dest != nullptr) | |||||
| if (jint* dest = env->GetIntArrayElements ((jintArray) buffer.get(), 0)) | |||||
| { | { | ||||
| { | { | ||||
| Image temp (new PreallocatedImage (clip.getWidth(), clip.getHeight(), | Image temp (new PreallocatedImage (clip.getWidth(), clip.getHeight(), | ||||
| @@ -646,9 +642,11 @@ void Process::makeForegroundProcess() | |||||
| //============================================================================== | //============================================================================== | ||||
| void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | ||||
| const String& title, const String& message, | const String& title, const String& message, | ||||
| Component* associatedComponent) | |||||
| Component* associatedComponent, | |||||
| ModalComponentManager::Callback* callback) | |||||
| { | { | ||||
| android.activity.callVoidMethod (JuceAppActivity.showMessageBox, javaString (title).get(), javaString (message).get(), (jlong) 0); | |||||
| android.activity.callVoidMethod (JuceAppActivity.showMessageBox, javaString (title).get(), | |||||
| javaString (message).get(), (jlong) (pointer_sized_int) callback); | |||||
| } | } | ||||
| bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | ||||
| @@ -656,10 +654,10 @@ bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType | |||||
| Component* associatedComponent, | Component* associatedComponent, | ||||
| ModalComponentManager::Callback* callback) | ModalComponentManager::Callback* callback) | ||||
| { | { | ||||
| jassert (callback != 0); // on android, all alerts must be non-modal!! | |||||
| jassert (callback != nullptr); // on android, all alerts must be non-modal!! | |||||
| android.activity.callVoidMethod (JuceAppActivity.showOkCancelBox, javaString (title).get(), javaString (message).get(), | |||||
| (jlong) (pointer_sized_int) callback); | |||||
| android.activity.callVoidMethod (JuceAppActivity.showOkCancelBox, javaString (title).get(), | |||||
| javaString (message).get(), (jlong) (pointer_sized_int) callback); | |||||
| return false; | return false; | ||||
| } | } | ||||
| @@ -668,19 +666,17 @@ int JUCE_CALLTYPE NativeMessageBox::showYesNoCancelBox (AlertWindow::AlertIconTy | |||||
| Component* associatedComponent, | Component* associatedComponent, | ||||
| ModalComponentManager::Callback* callback) | ModalComponentManager::Callback* callback) | ||||
| { | { | ||||
| jassert (callback != 0); // on android, all alerts must be non-modal!! | |||||
| jassert (callback != nullptr); // on android, all alerts must be non-modal!! | |||||
| android.activity.callVoidMethod (JuceAppActivity.showYesNoCancelBox, javaString (title).get(), javaString (message).get(), | |||||
| (jlong) (pointer_sized_int) callback); | |||||
| android.activity.callVoidMethod (JuceAppActivity.showYesNoCancelBox, javaString (title).get(), | |||||
| javaString (message).get(), (jlong) (pointer_sized_int) callback); | |||||
| return 0; | return 0; | ||||
| } | } | ||||
| JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, alertDismissed, void, (JNIEnv* env, jobject activity, | JUCE_JNI_CALLBACK (JUCE_ANDROID_ACTIVITY_CLASSNAME, alertDismissed, void, (JNIEnv* env, jobject activity, | ||||
| jlong callbackAsLong, jint result)) | jlong callbackAsLong, jint result)) | ||||
| { | { | ||||
| ModalComponentManager::Callback* callback = (ModalComponentManager::Callback*) callbackAsLong; | |||||
| if (callback != 0) | |||||
| if (ModalComponentManager::Callback* callback = (ModalComponentManager::Callback*) callbackAsLong) | |||||
| callback->modalStateFinished (result); | callback->modalStateFinished (result); | ||||
| } | } | ||||
| @@ -106,9 +106,9 @@ class iOSMessageBox | |||||
| public: | 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* callback_, const bool isAsync_) | |||||
| ModalComponentManager::Callback* cb, const bool async) | |||||
| : result (0), delegate (nil), alert (nil), | : result (0), delegate (nil), alert (nil), | ||||
| callback (callback_), isYesNo (button3 != nil), isAsync (isAsync_) | |||||
| callback (cb), isYesNo (button3 != nil), isAsync (async) | |||||
| { | { | ||||
| delegate = [[JuceAlertBoxDelegate alloc] init]; | delegate = [[JuceAlertBoxDelegate alloc] init]; | ||||
| delegate->owner = this; | delegate->owner = this; | ||||
| @@ -181,16 +181,16 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBox (AlertWindow::AlertIconType | |||||
| Component* associatedComponent) | Component* associatedComponent) | ||||
| { | { | ||||
| JUCE_AUTORELEASEPOOL | JUCE_AUTORELEASEPOOL | ||||
| iOSMessageBox mb (title, message, @"OK", nil, nil, 0, false); | |||||
| iOSMessageBox mb (title, message, @"OK", nil, nil, nullptr, false); | |||||
| (void) mb.getResult(); | (void) mb.getResult(); | ||||
| } | } | ||||
| void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | ||||
| const String& title, const String& message, | const String& title, const String& message, | ||||
| Component* associatedComponent) | |||||
| Component* associatedComponent, | |||||
| ModalComponentManager::Callback* callback) | |||||
| { | { | ||||
| JUCE_AUTORELEASEPOOL | |||||
| new iOSMessageBox (title, message, @"OK", nil, nil, 0, true); | |||||
| new iOSMessageBox (title, message, @"OK", nil, nil, callback, true); | |||||
| } | } | ||||
| bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | ||||
| @@ -198,7 +198,8 @@ bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType | |||||
| Component* associatedComponent, | Component* associatedComponent, | ||||
| ModalComponentManager::Callback* callback) | ModalComponentManager::Callback* callback) | ||||
| { | { | ||||
| ScopedPointer<iOSMessageBox> mb (new iOSMessageBox (title, message, @"Cancel", @"OK", nil, callback, callback != nullptr)); | |||||
| ScopedPointer<iOSMessageBox> mb (new iOSMessageBox (title, message, @"Cancel", @"OK", | |||||
| nil, callback, callback != nullptr)); | |||||
| if (callback == nullptr) | if (callback == nullptr) | ||||
| return mb->getResult() == 1; | return mb->getResult() == 1; | ||||
| @@ -3386,9 +3386,10 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBox (AlertWindow::AlertIconType | |||||
| void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | ||||
| const String& title, const String& message, | const String& title, const String& message, | ||||
| Component* /* associatedComponent */) | |||||
| Component* associatedComponent, | |||||
| ModalComponentManager::Callback* callback) | |||||
| { | { | ||||
| AlertWindow::showMessageBoxAsync (iconType, title, message); | |||||
| AlertWindow::showMessageBoxAsync (iconType, title, message, String::empty, associatedComponent, callback); | |||||
| } | } | ||||
| bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | ||||
| @@ -32,13 +32,10 @@ void LookAndFeel::playAlertSound() | |||||
| class OSXMessageBox : private AsyncUpdater | class OSXMessageBox : private AsyncUpdater | ||||
| { | { | ||||
| public: | public: | ||||
| OSXMessageBox (AlertWindow::AlertIconType type, | |||||
| const String& title_, const String& message_, | |||||
| OSXMessageBox (AlertWindow::AlertIconType type, const String& t, const String& m, | |||||
| const char* b1, const char* b2, const char* b3, | const char* b1, const char* b2, const char* b3, | ||||
| ModalComponentManager::Callback* callback_, | |||||
| const bool runAsync) | |||||
| : iconType (type), title (title_), | |||||
| message (message_), callback (callback_), | |||||
| ModalComponentManager::Callback* c, const bool runAsync) | |||||
| : iconType (type), title (t), message (m), callback (c), | |||||
| button1 (b1), button2 (b2), button3 (b3) | button1 (b1), button2 (b2), button3 (b3) | ||||
| { | { | ||||
| if (runAsync) | if (runAsync) | ||||
| @@ -47,17 +44,21 @@ public: | |||||
| int getResult() const | int getResult() const | ||||
| { | { | ||||
| JUCE_AUTORELEASEPOOL | |||||
| NSInteger r = getRawResult(); | |||||
| return r == NSAlertDefaultReturn ? 1 : (r == NSAlertOtherReturn ? 2 : 0); | |||||
| switch (getRawResult()) | |||||
| { | |||||
| case NSAlertDefaultReturn: return 1; | |||||
| case NSAlertOtherReturn: return 2; | |||||
| default: return 0; | |||||
| } | |||||
| } | } | ||||
| static int show (AlertWindow::AlertIconType iconType, const String& title, const String& message, | static int show (AlertWindow::AlertIconType iconType, const String& title, const String& message, | ||||
| ModalComponentManager::Callback* callback, const char* b1, const char* b2, const char* b3) | |||||
| ModalComponentManager::Callback* callback, const char* b1, const char* b2, const char* b3, | |||||
| bool runAsync) | |||||
| { | { | ||||
| ScopedPointer<OSXMessageBox> mb (new OSXMessageBox (iconType, title, message, b1, b2, b3, | ScopedPointer<OSXMessageBox> mb (new OSXMessageBox (iconType, title, message, b1, b2, b3, | ||||
| callback, callback != nullptr)); | |||||
| if (callback == nullptr) | |||||
| callback, runAsync)); | |||||
| if (! runAsync) | |||||
| return mb->getResult(); | return mb->getResult(); | ||||
| mb.release(); | mb.release(); | ||||
| @@ -109,15 +110,15 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBox (AlertWindow::AlertIconType | |||||
| const String& title, const String& message, | const String& title, const String& message, | ||||
| Component* /*associatedComponent*/) | Component* /*associatedComponent*/) | ||||
| { | { | ||||
| OSXMessageBox box (iconType, title, message, "OK", nullptr, nullptr, nullptr, false); | |||||
| (void) box.getResult(); | |||||
| OSXMessageBox::show (iconType, title, message, nullptr, "OK", nullptr, nullptr, false); | |||||
| } | } | ||||
| void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | ||||
| const String& title, const String& message, | const String& title, const String& message, | ||||
| Component* /*associatedComponent*/) | |||||
| Component* /*associatedComponent*/, | |||||
| ModalComponentManager::Callback* callback) | |||||
| { | { | ||||
| new OSXMessageBox (iconType, title, message, "OK", nullptr, nullptr, nullptr, true); | |||||
| OSXMessageBox::show (iconType, title, message, callback, "OK", nullptr, nullptr, true); | |||||
| } | } | ||||
| bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | ||||
| @@ -125,7 +126,8 @@ bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType | |||||
| Component* /*associatedComponent*/, | Component* /*associatedComponent*/, | ||||
| ModalComponentManager::Callback* callback) | ModalComponentManager::Callback* callback) | ||||
| { | { | ||||
| return OSXMessageBox::show (iconType, title, message, callback, "OK", "Cancel", nullptr) == 1; | |||||
| return OSXMessageBox::show (iconType, title, message, callback, | |||||
| "OK", "Cancel", nullptr, callback != nullptr) == 1; | |||||
| } | } | ||||
| int JUCE_CALLTYPE NativeMessageBox::showYesNoCancelBox (AlertWindow::AlertIconType iconType, | int JUCE_CALLTYPE NativeMessageBox::showYesNoCancelBox (AlertWindow::AlertIconType iconType, | ||||
| @@ -133,7 +135,8 @@ int JUCE_CALLTYPE NativeMessageBox::showYesNoCancelBox (AlertWindow::AlertIconTy | |||||
| Component* /*associatedComponent*/, | Component* /*associatedComponent*/, | ||||
| ModalComponentManager::Callback* callback) | ModalComponentManager::Callback* callback) | ||||
| { | { | ||||
| return OSXMessageBox::show (iconType, title, message, callback, "Yes", "Cancel", "No"); | |||||
| return OSXMessageBox::show (iconType, title, message, callback, | |||||
| "Yes", "Cancel", "No", callback != nullptr); | |||||
| } | } | ||||
| @@ -2891,9 +2891,10 @@ void JUCE_CALLTYPE NativeMessageBox::showMessageBox (AlertWindow::AlertIconType | |||||
| void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | void JUCE_CALLTYPE NativeMessageBox::showMessageBoxAsync (AlertWindow::AlertIconType iconType, | ||||
| const String& title, const String& message, | const String& title, const String& message, | ||||
| Component* associatedComponent) | |||||
| Component* associatedComponent, | |||||
| ModalComponentManager::Callback* callback) | |||||
| { | { | ||||
| new WindowsMessageBox (iconType, title, message, associatedComponent, MB_OK, 0, true); | |||||
| new WindowsMessageBox (iconType, title, message, associatedComponent, MB_OK, callback, true); | |||||
| } | } | ||||
| bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | bool JUCE_CALLTYPE NativeMessageBox::showOkCancelBox (AlertWindow::AlertIconType iconType, | ||||
| @@ -631,7 +631,7 @@ void AlertWindow::showMessageBox (AlertIconType iconType, | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| AlertWindowInfo info (title, message, associatedComponent, iconType, 1, 0, true); | |||||
| AlertWindowInfo info (title, message, associatedComponent, iconType, 1, nullptr, true); | |||||
| info.button1 = buttonText.isEmpty() ? TRANS("ok") : buttonText; | info.button1 = buttonText.isEmpty() ? TRANS("ok") : buttonText; | ||||
| info.invoke(); | info.invoke(); | ||||
| @@ -648,7 +648,7 @@ void AlertWindow::showMessageBoxAsync (AlertIconType iconType, | |||||
| { | { | ||||
| if (LookAndFeel::getDefaultLookAndFeel().isUsingNativeAlertWindows()) | if (LookAndFeel::getDefaultLookAndFeel().isUsingNativeAlertWindows()) | ||||
| { | { | ||||
| NativeMessageBox::showMessageBoxAsync (iconType, title, message, associatedComponent); | |||||
| NativeMessageBox::showMessageBoxAsync (iconType, title, message, associatedComponent, callback); | |||||
| } | } | ||||
| else | else | ||||
| { | { | ||||
| @@ -248,7 +248,7 @@ public: | |||||
| @param message a longer, more descriptive message to show underneath the | @param message a longer, more descriptive message to show underneath the | ||||
| headline | headline | ||||
| @param buttonText the text to show in the button - if this string is empty, the | @param buttonText the text to show in the button - if this string is empty, the | ||||
| default string "ok" (or a localised version) will be used. | |||||
| default string "OK" (or a localised version) will be used. | |||||
| @param associatedComponent if this is non-null, it specifies the component that the | @param associatedComponent if this is non-null, it specifies the component that the | ||||
| alert window should be associated with. Depending on the look | alert window should be associated with. Depending on the look | ||||
| and feel, this might be used for positioning of the alert window. | and feel, this might be used for positioning of the alert window. | ||||
| @@ -271,13 +271,12 @@ public: | |||||
| @param message a longer, more descriptive message to show underneath the | @param message a longer, more descriptive message to show underneath the | ||||
| headline | headline | ||||
| @param buttonText the text to show in the button - if this string is empty, the | @param buttonText the text to show in the button - if this string is empty, the | ||||
| default string "ok" (or a localised version) will be used. | |||||
| default string "OK" (or a localised version) will be used. | |||||
| @param associatedComponent if this is non-null, it specifies the component that the | @param associatedComponent if this is non-null, it specifies the component that the | ||||
| alert window should be associated with. Depending on the look | alert window should be associated with. Depending on the look | ||||
| and feel, this might be used for positioning of the alert window. | and feel, this might be used for positioning of the alert window. | ||||
| @param callback if this is non-null, the callback will receive a call to its | @param callback if this is non-null, the callback will receive a call to its | ||||
| modalStateFinished() when the box is dismissed, with its parameter | |||||
| being 1 if the ok button was pressed, or 0 for cancel, The callback object | |||||
| modalStateFinished() when the box is dismissed. The callback object | |||||
| will be owned and deleted by the system, so make sure that it works | will be owned and deleted by the system, so make sure that it works | ||||
| safely and doesn't keep any references to objects that might be deleted | safely and doesn't keep any references to objects that might be deleted | ||||
| before it gets called. | before it gets called. | ||||
| @@ -305,7 +304,7 @@ public: | |||||
| @param message a longer, more descriptive message to show underneath the | @param message a longer, more descriptive message to show underneath the | ||||
| headline | headline | ||||
| @param button1Text the text to show in the first button - if this string is | @param button1Text the text to show in the first button - if this string is | ||||
| empty, the default string "ok" (or a localised version of it) | |||||
| empty, the default string "OK" (or a localised version of it) | |||||
| will be used. | will be used. | ||||
| @param button2Text the text to show in the second button - if this string is | @param button2Text the text to show in the second button - if this string is | ||||
| empty, the default string "cancel" (or a localised version of it) | empty, the default string "cancel" (or a localised version of it) | ||||
| @@ -316,7 +315,7 @@ public: | |||||
| @param callback if this is non-null, the menu will be launched asynchronously, | @param callback if this is non-null, the menu will be launched asynchronously, | ||||
| returning immediately, and the callback will receive a call to its | returning immediately, and the callback will receive a call to its | ||||
| modalStateFinished() when the box is dismissed, with its parameter | modalStateFinished() when the box is dismissed, with its parameter | ||||
| being 1 if the ok button was pressed, or 0 for cancel, The callback object | |||||
| being 1 if the ok button was pressed, or 0 for cancel. The callback object | |||||
| will be owned and deleted by the system, so make sure that it works | will be owned and deleted by the system, so make sure that it works | ||||
| safely and doesn't keep any references to objects that might be deleted | safely and doesn't keep any references to objects that might be deleted | ||||
| before it gets called. | before it gets called. | ||||
| @@ -368,7 +367,7 @@ public: | |||||
| returning immediately, and the callback will receive a call to its | returning immediately, and the callback will receive a call to its | ||||
| modalStateFinished() when the box is dismissed, with its parameter | modalStateFinished() when the box is dismissed, with its parameter | ||||
| being 1 if the "yes" button was pressed, 2 for the "no" button, or 0 | being 1 if the "yes" button was pressed, 2 for the "no" button, or 0 | ||||
| if it was cancelled, The callback object will be owned and deleted by the | |||||
| if it was cancelled. The callback object will be owned and deleted by the | |||||
| system, so make sure that it works safely and doesn't keep any references | system, so make sure that it works safely and doesn't keep any references | ||||
| to objects that might be deleted before it gets called. | to objects that might be deleted before it gets called. | ||||
| @@ -62,11 +62,17 @@ public: | |||||
| @param associatedComponent if this is non-null, it specifies the component that the | @param associatedComponent if this is non-null, it specifies the component that the | ||||
| alert window should be associated with. Depending on the look | alert window should be associated with. Depending on the look | ||||
| and feel, this might be used for positioning of the alert window. | and feel, this might be used for positioning of the alert window. | ||||
| @param callback if this is non-null, the callback will receive a call to its | |||||
| modalStateFinished() when the box is dismissed. The callback object | |||||
| will be owned and deleted by the system, so make sure that it works | |||||
| safely and doesn't keep any references to objects that might be deleted | |||||
| before it gets called. | |||||
| */ | */ | ||||
| static void JUCE_CALLTYPE showMessageBoxAsync (AlertWindow::AlertIconType iconType, | static void JUCE_CALLTYPE showMessageBoxAsync (AlertWindow::AlertIconType iconType, | ||||
| const String& title, | |||||
| const String& message, | |||||
| Component* associatedComponent = nullptr); | |||||
| const String& title, | |||||
| const String& message, | |||||
| Component* associatedComponent = nullptr, | |||||
| ModalComponentManager::Callback* callback = nullptr); | |||||
| /** Shows a dialog box with two buttons. | /** Shows a dialog box with two buttons. | ||||