Mercurial > dwindows
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: |