Dialog.m 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. //
  2. // Dialog.m
  3. // MG
  4. //
  5. // Created by Tim Debo on 5/27/14.
  6. //
  7. //
  8. #import "Dialog.h"
  9. #import "WindowController.h"
  10. @implementation Dialog
  11. @synthesize context;
  12. - (void) openDialog:(JSValue *)args
  13. {
  14. context = [JSContext currentContext];
  15. NSOpenPanel * openDlg = [NSOpenPanel openPanel];
  16. JSValue* mult = [args valueForProperty:@"multiple"];
  17. JSValue* files = [args valueForProperty:@"files"];
  18. JSValue* dirs = [args valueForProperty:@"directories"];
  19. JSValue* cb = [args valueForProperty: @"callback"];
  20. JSValue* allowedTypes = [args valueForProperty:@"allowedTypes"];
  21. [openDlg setCanChooseFiles: [files toBool]];
  22. [openDlg setCanChooseDirectories: [dirs toBool]];
  23. [openDlg setAllowsMultipleSelection: [mult toBool]];
  24. if(allowedTypes)
  25. [openDlg setAllowedFileTypes: [allowedTypes toArray]];
  26. [openDlg beginWithCompletionHandler:^(NSInteger result){
  27. if (result == NSFileHandlingPanelOKButton) {
  28. if(cb) {
  29. NSArray* files = [[openDlg URLs] valueForKey:@"relativePath"];
  30. [cb callWithArguments: @[files]];
  31. }
  32. }
  33. }];
  34. }
  35. - (void) saveDialog:(JSValue *)args
  36. {
  37. context = [JSContext currentContext];
  38. NSSavePanel * saveDlg = [NSSavePanel savePanel];
  39. JSValue* title = [args valueForProperty:@"title"];
  40. JSValue* prompt = [args valueForProperty:@"prompt"];
  41. JSValue* message = [args valueForProperty:@"message"];
  42. JSValue* filename = [args valueForProperty:@"filename"];
  43. JSValue* directory = [args valueForProperty:@"directory"];
  44. JSValue* createDirs = [args valueForProperty:@"createDirs"];
  45. JSValue* allowedTypes = [args valueForProperty:@"allowedTypes"];
  46. JSValue* cb = [args valueForProperty: @"callback"];
  47. if(title)
  48. [saveDlg setTitle: [title toString]];
  49. if(prompt)
  50. [saveDlg setPrompt: [prompt toString]];
  51. if(message)
  52. [saveDlg setMessage: [message toString]];
  53. if(filename)
  54. [saveDlg setNameFieldStringValue: [filename toString]];
  55. if(directory)
  56. [saveDlg setDirectoryURL: [NSURL URLWithString: [directory toString]]];
  57. if(createDirs)
  58. [saveDlg setCanCreateDirectories: [createDirs toBool]];
  59. if(allowedTypes)
  60. [saveDlg setAllowedFileTypes: [allowedTypes toArray]];
  61. [saveDlg beginSheetModalForWindow: self.windowController.window completionHandler:^(NSInteger result){
  62. if (result == NSFileHandlingPanelOKButton) {
  63. if(cb) {
  64. NSDictionary* results = @{
  65. @"directory" : [[saveDlg directoryURL] valueForKey:@"relativePath"],
  66. @"filePath" : [[saveDlg URL] valueForKey:@"relativePath"],
  67. @"filename" : [saveDlg nameFieldStringValue]
  68. };
  69. [cb callWithArguments: @[results]];
  70. }
  71. }
  72. }];
  73. }
  74. @end