mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-10 22:17:13 -06:00
Native Libraries: moved code to JNIUtils.cpp and *MessageDialog.cpp
This commit is contained in:
@@ -366,61 +366,3 @@ static jobjectArray urlsToStringArray( JNIEnv* env, NSArray* urls ) {
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jint JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_showMessageDialog
|
||||
( JNIEnv* env, jclass cls, jlong hwndParent, jint alertStyle, jstring messageText, jstring informativeText,
|
||||
jint defaultButton, jobjectArray buttons )
|
||||
{
|
||||
JNI_COCOA_ENTER()
|
||||
|
||||
// convert Java strings to NSString (on Java thread)
|
||||
NSString* nsMessageText = JavaToNSString( env, messageText );
|
||||
NSString* nsInformativeText = JavaToNSString( env, informativeText );
|
||||
|
||||
jint buttonCount = env->GetArrayLength( buttons );
|
||||
NSMutableArray* nsButtons = [NSMutableArray array];
|
||||
for( int i = 0; i < buttonCount; i++ ) {
|
||||
NSString* nsButton = JavaToNSString( env, (jstring) env->GetObjectArrayElement( buttons, i ) );
|
||||
[nsButtons addObject:nsButton];
|
||||
}
|
||||
|
||||
jint result = -1;
|
||||
jint* presult = &result;
|
||||
|
||||
// show alert on macOS thread
|
||||
[FlatJNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
|
||||
NSAlert* alert = [[NSAlert alloc] init];
|
||||
|
||||
// use empty string because if alert.messageText is not set it displays "Alert"
|
||||
alert.messageText = (nsMessageText != NULL) ? nsMessageText : @"";
|
||||
if( nsInformativeText != NULL )
|
||||
alert.informativeText = nsInformativeText;
|
||||
|
||||
// alert style
|
||||
switch( alertStyle ) {
|
||||
case /* JOptionPane.ERROR_MESSAGE */ 0: alert.alertStyle = NSAlertStyleCritical; break;
|
||||
default:
|
||||
case /* JOptionPane.INFORMATION_MESSAGE */ 1: alert.alertStyle = NSAlertStyleInformational; break;
|
||||
case /* JOptionPane.WARNING_MESSAGE */ 2: alert.alertStyle = NSAlertStyleWarning; break;
|
||||
}
|
||||
|
||||
// add buttons
|
||||
for( int i = 0; i < nsButtons.count; i++ ) {
|
||||
NSButton* b = [alert addButtonWithTitle:nsButtons[i]];
|
||||
if( i == defaultButton )
|
||||
alert.window.defaultButtonCell = b.cell;
|
||||
}
|
||||
|
||||
// show alert
|
||||
NSInteger response = [alert runModal];
|
||||
|
||||
// if no buttons added, which shows a single OK button, the response is 0 when clicking OK
|
||||
// if buttons added, response is 1000+buttonIndex
|
||||
*presult = MAX( response - NSAlertFirstButtonReturn, 0 );
|
||||
}];
|
||||
|
||||
return result;
|
||||
|
||||
JNI_COCOA_EXIT()
|
||||
}
|
||||
|
||||
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2024 FormDev Software GmbH
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <objc/runtime.h>
|
||||
#import <jni.h>
|
||||
#import "JNIUtils.h"
|
||||
#import "JNFRunLoop.h"
|
||||
#import "com_formdev_flatlaf_ui_FlatNativeMacLibrary.h"
|
||||
|
||||
/**
|
||||
* @author Karl Tauber
|
||||
* @since 3.6
|
||||
*/
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT jint JNICALL Java_com_formdev_flatlaf_ui_FlatNativeMacLibrary_showMessageDialog
|
||||
( JNIEnv* env, jclass cls, jlong hwndParent, jint alertStyle, jstring messageText, jstring informativeText,
|
||||
jint defaultButton, jobjectArray buttons )
|
||||
{
|
||||
JNI_COCOA_ENTER()
|
||||
|
||||
// convert Java strings to NSString (on Java thread)
|
||||
NSString* nsMessageText = JavaToNSString( env, messageText );
|
||||
NSString* nsInformativeText = JavaToNSString( env, informativeText );
|
||||
|
||||
jint buttonCount = env->GetArrayLength( buttons );
|
||||
NSMutableArray* nsButtons = [NSMutableArray array];
|
||||
for( int i = 0; i < buttonCount; i++ ) {
|
||||
NSString* nsButton = JavaToNSString( env, (jstring) env->GetObjectArrayElement( buttons, i ) );
|
||||
[nsButtons addObject:nsButton];
|
||||
}
|
||||
|
||||
jint result = -1;
|
||||
jint* presult = &result;
|
||||
|
||||
// show alert on macOS thread
|
||||
[FlatJNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
|
||||
NSAlert* alert = [[NSAlert alloc] init];
|
||||
|
||||
// use empty string because if alert.messageText is not set it displays "Alert"
|
||||
alert.messageText = (nsMessageText != NULL) ? nsMessageText : @"";
|
||||
if( nsInformativeText != NULL )
|
||||
alert.informativeText = nsInformativeText;
|
||||
|
||||
// alert style
|
||||
switch( alertStyle ) {
|
||||
case /* JOptionPane.ERROR_MESSAGE */ 0: alert.alertStyle = NSAlertStyleCritical; break;
|
||||
default:
|
||||
case /* JOptionPane.INFORMATION_MESSAGE */ 1: alert.alertStyle = NSAlertStyleInformational; break;
|
||||
case /* JOptionPane.WARNING_MESSAGE */ 2: alert.alertStyle = NSAlertStyleWarning; break;
|
||||
}
|
||||
|
||||
// add buttons
|
||||
for( int i = 0; i < nsButtons.count; i++ ) {
|
||||
NSButton* b = [alert addButtonWithTitle:nsButtons[i]];
|
||||
if( i == defaultButton )
|
||||
alert.window.defaultButtonCell = b.cell;
|
||||
}
|
||||
|
||||
// show alert
|
||||
NSInteger response = [alert runModal];
|
||||
|
||||
// if no buttons added, which shows a single OK button, the response is 0 when clicking OK
|
||||
// if buttons added, response is 1000+buttonIndex
|
||||
*presult = MAX( response - NSAlertFirstButtonReturn, 0 );
|
||||
}];
|
||||
|
||||
return result;
|
||||
|
||||
JNI_COCOA_EXIT()
|
||||
}
|
||||
Reference in New Issue
Block a user