File: CarbonOpenDoc.pas

package info (click to toggle)
mricron 0.20140804.1~dfsg.1-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 13,480 kB
  • ctags: 8,011
  • sloc: pascal: 114,853; sh: 49; makefile: 32
file content (87 lines) | stat: -rwxr-xr-x 2,269 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
unit CarbonOpenDoc;


interface
{$H+}
uses
  //FPCMacOSAll,
  MacOSAll, CarbonProc;
  
//type
//  TFormOpenFileMethod = procedure(const FileName : string) of object;
//procedure InitOpenDocHandler(MethodToUse : TFormOpenFileMethod);
procedure InitOpenDocHandler;


implementation
uses
 nifti_img_view;
//var
//  OpenFileMethod : TFormOpenFileMethod;

function OpenDocEventHandler(var theAppleEvent: AppleEvent;
                             var reply: AppleEvent;
                                 handlerRefcon: SInt32): OSErr; stdcall;
var
  DocList: AEDescList;
  FileCount: Integer;
  FileIdx: Integer;
  Keyword: AEKeyword;
  FileDesc: AEDesc;
  FileRef: FSRef;
  FileURL: CFURLRef;
  FileCFStr: CFStringRef;
begin
  if OSError(AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, DocList),
             'OpenDocEventHandler', '', 'AEGetParamDesc') then
    Exit;

  try
    if OSError(AECountItems(DocList, FileCount),
               'OpenDocEventHandler', '', 'AECountItems') then
      Exit;

    for FileIdx := 1 to FileCount do
      begin

      if OSError(AEGetNthDesc(DocList, FileIdx, typeFSRef, @Keyword, FileDesc), 
                 'OpenDocEventHandler', '', 'AEGetNthDesc') then
        Exit;

      if OSError(AEGetDescData(FileDesc, @FileRef, SizeOf(FSRef)), 
                 'OpenDocEventHandler', '', 'AEGetDescData') then 
        Exit;

      if OSError(AEDisposeDesc(FileDesc), 
                 'OpenDocEventHandler', '', 'AEDisposeDesc') then 
        Exit;

      FileURL := CFURLCreateFromFSRef(kCFAllocatorDefault, FileRef);
      FileCFStr := CFURLCopyFileSystemPath(FileURL, kCFURLPOSIXPathStyle);
      ImgForm.FormOpenFileMethod(CFStringToStr(FileCFStr));
      //ImgForm.OpenFileMethod(CFStringToStr(FileCFStr));

      FreeCFString(FileURL);
      FreeCFString(FileCFStr);
      end;
  finally
    AEDisposeDesc(DocList);
  end;

end;  {OpenDocEventHandler}


procedure InitOpenDocHandler {(MethodToUse : TFormOpenFileMethod)};
begin
  //OpenFileMethod := MethodToUse;
  
  AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments,
                        NewAEEventHandlerUPP(
                         AEEventHandlerProcPtr(Pointer(@OpenDocEventHandler))),
                        0, False);

end;  {InitOpenDocHandler}


end.