comparison ios/dw.m @ 2415:f33a81fa29e9

iOS: Implment dw_file_browse() and fix issues in dw_color_choose().
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Fri, 02 Apr 2021 02:17:59 +0000
parents 5e5fab842901
children 353581ebf4a5
comparison
equal deleted inserted replaced
2414:5e5fab842901 2415:f33a81fa29e9
913 [[viewController selectedColor] getRed:&red green:&green blue:&blue alpha:NULL]; 913 [[viewController selectedColor] getRed:&red green:&green blue:&blue alpha:NULL];
914 dw_dialog_dismiss(dialog, DW_UINT_TO_POINTER(DW_RGB((int)(red * 255), (int)(green *255), (int)(blue *255)))); 914 dw_dialog_dismiss(dialog, DW_UINT_TO_POINTER(DW_RGB((int)(red * 255), (int)(green *255), (int)(blue *255))));
915 } 915 }
916 else 916 else
917 dw_dialog_dismiss(dialog, NULL); 917 dw_dialog_dismiss(dialog, NULL);
918 [viewController dismissViewControllerAnimated:YES completion:nil];
918 } 919 }
919 -(void)colorPickerViewControllerDidFinish:(UIColorPickerViewController *)viewController API_AVAILABLE(ios(14.0)) 920 -(void)colorPickerViewControllerDidFinish:(UIColorPickerViewController *)viewController API_AVAILABLE(ios(14.0))
921 {
922 dw_dialog_dismiss(dialog, NULL);
923 [viewController dismissViewControllerAnimated:YES completion:nil];
924 }
925 -(void)setDialog:(DWDialog *)newdialog { dialog = newdialog; }
926 @end
927
928 @interface DWDocumentPickerDelegate : UIResponder <UIDocumentPickerDelegate>
929 {
930 DWDialog *dialog;
931 }
932 -(void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls;
933 -(void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller;
934 -(void)setDialog:(DWDialog *)newdialog;
935 @end
936
937 @implementation DWDocumentPickerDelegate
938 -(void)documentPicker:(UIDocumentPickerViewController *)controller didPickDocumentsAtURLs:(NSArray<NSURL *> *)urls
939 {
940 NSURL *url = [urls firstObject];
941 char *file = NULL;
942
943 if(url && [[url absoluteString] length] > 0)
944 file = strdup([[url absoluteString] UTF8String]);
945 dw_dialog_dismiss(dialog, file);
946 }
947 -(void)documentPickerWasCancelled:(UIDocumentPickerViewController *)controller
920 { 948 {
921 dw_dialog_dismiss(dialog, NULL); 949 dw_dialog_dismiss(dialog, NULL);
922 } 950 }
923 -(void)setDialog:(DWDialog *)newdialog { dialog = newdialog; } 951 -(void)setDialog:(DWDialog *)newdialog { dialog = newdialog; }
924 @end 952 @end
958 { 986 {
959 DWDialog *dialog = dw_dialog_new(NULL); 987 DWDialog *dialog = dw_dialog_new(NULL);
960 UIColorPickerViewController *picker = [[UIColorPickerViewController alloc] init]; 988 UIColorPickerViewController *picker = [[UIColorPickerViewController alloc] init];
961 DWColorPickerDelegate *delegate = [[DWColorPickerDelegate alloc] init]; 989 DWColorPickerDelegate *delegate = [[DWColorPickerDelegate alloc] init];
962 990
991 /* Setup our picker */
992 [picker setSupportsAlpha:NO];
963 /* Unhide our hidden window and make it key */ 993 /* Unhide our hidden window and make it key */
964 [hiddenWindow setHidden:NO]; 994 [hiddenWindow setHidden:NO];
965 [hiddenWindow makeKeyAndVisible]; 995 [hiddenWindow makeKeyAndVisible];
966 [delegate setDialog:dialog]; 996 [delegate setDialog:dialog];
967 [picker setDelegate:delegate]; 997 [picker setDelegate:delegate];
975 [delegate release]; 1005 [delegate release];
976 } else { 1006 } else {
977 // Fallback on earlier versions 1007 // Fallback on earlier versions
978 }; 1008 };
979 } 1009 }
980
981 -(void)fontPicker:(NSPointerArray *)params 1010 -(void)fontPicker:(NSPointerArray *)params
982 { 1011 {
983 DWDialog *dialog = dw_dialog_new(NULL); 1012 DWDialog *dialog = dw_dialog_new(NULL);
984 UIFontPickerViewController *picker = [[UIFontPickerViewController alloc] init]; 1013 UIFontPickerViewController *picker = [[UIFontPickerViewController alloc] init];
985 DWFontPickerDelegate *delegate = [[DWFontPickerDelegate alloc] init]; 1014 DWFontPickerDelegate *delegate = [[DWFontPickerDelegate alloc] init];
1003 NSString *output = [NSString stringWithFormat:@"%d.%s", (int)[font pointSize], [fontname UTF8String]]; 1032 NSString *output = [NSString stringWithFormat:@"%d.%s", (int)[font pointSize], [fontname UTF8String]];
1004 [params addPointer:strdup([output UTF8String])]; 1033 [params addPointer:strdup([output UTF8String])];
1005 } 1034 }
1006 else 1035 else
1007 [params addPointer:NULL]; 1036 [params addPointer:NULL];
1037 [picker release];
1038 [delegate release];
1039 }
1040 -(void)filePicker:(NSPointerArray *)params
1041 {
1042 DWDialog *dialog = dw_dialog_new(NULL);
1043 UIDocumentPickerViewController *picker ;
1044 DWDocumentPickerDelegate *delegate = [[DWDocumentPickerDelegate alloc] init];
1045 UIDocumentPickerMode mode = UIDocumentPickerModeOpen;
1046 char *defpath = [params pointerAtIndex:0];
1047 char *ext = [params pointerAtIndex:1];
1048 int flags = DW_POINTER_TO_INT([params pointerAtIndex:2]);
1049 char *file = NULL;
1050 NSArray *UTIs;
1051
1052 /* Setup the picker */
1053 if(flags & DW_FILE_SAVE)
1054 mode = UIDocumentPickerModeExportToService;
1055 /* Try to generate a UTI for our passed extension */
1056 if(ext)
1057 UTIs = [NSArray arrayWithObject:[NSString stringWithFormat:@"public.%s", ext]];
1058 else
1059 UTIs = @[@"public.text"];
1060 picker = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:UTIs inMode:mode];
1061 [picker setAllowsMultipleSelection:NO];
1062 [picker setShouldShowFileExtensions:YES];
1063 if(defpath)
1064 [picker setDirectoryURL:[NSURL URLWithString:[NSString stringWithUTF8String:defpath]]];
1065 /* Unhide our hidden window and make it key */
1066 [hiddenWindow setHidden:NO];
1067 [hiddenWindow makeKeyAndVisible];
1068 [delegate setDialog:dialog];
1069 [picker setDelegate:delegate];
1070 /* Wait for them to pick a color */
1071 [[hiddenWindow rootViewController] presentViewController:picker animated:YES completion:nil];
1072 file = dw_dialog_wait(dialog);
1073 /* Once the dialog is gone we can rehide our window */
1074 [hiddenWindow resignKeyWindow];
1075 [hiddenWindow setHidden:YES];
1076 [params addPointer:file];
1008 [picker release]; 1077 [picker release];
1009 [delegate release]; 1078 [delegate release];
1010 } 1079 }
1011 -(void)messageBox:(NSMutableArray *)params 1080 -(void)messageBox:(NSMutableArray *)params
1012 { 1081 {
2848 * the file path on success. 2917 * the file path on success.
2849 * 2918 *
2850 */ 2919 */
2851 char * API dw_file_browse(const char *title, const char *defpath, const char *ext, int flags) 2920 char * API dw_file_browse(const char *title, const char *defpath, const char *ext, int flags)
2852 { 2921 {
2853 return NULL; 2922 NSPointerArray *params = [[NSPointerArray pointerArrayWithOptions:NSPointerFunctionsOpaqueMemory] retain];
2923 char *file = NULL;
2924
2925 [params addPointer:(void *)defpath];
2926 [params addPointer:(void *)ext];
2927 [params addPointer:DW_INT_TO_POINTER(flags)];
2928 [DWObj safeCall:@selector(filePicker:) withObject:params];
2929 if([params count] > 3)
2930 file = [params pointerAtIndex:3];
2931
2932 return file;
2854 } 2933 }
2855 2934
2856 /* 2935 /*
2857 * Gets the contents of the default clipboard as text. 2936 * Gets the contents of the default clipboard as text.
2858 * Parameters: 2937 * Parameters: