unit newXibDialog; {$mode objfpc}{$H+} interface uses {$ifdef lclcarbon} MacOSAll, {$endif} Types,Classes,SysUtils,FileUtil,LResources,Forms,Controls,Graphics,Dialogs,StdCtrls,LCLProc, Grids //todo: use LCL file loading and drawing, instead of OSX {$ifdef lclcarbon} ,CarbonGDIObjects, CarbonProc {$endif}; type { TnewXibForm } TnewXibForm = class(TForm) Button1:TButton; Button2:TButton; DrawGrid1:TDrawGrid; Edit1:TEdit; Label1:TLabel; Memo1:TMemo; procedure Button2Click(Sender:TObject); procedure DrawGrid1DrawCell(Sender:TObject;aCol,aRow:Integer;aRect:TRect; aState:TGridDrawState); procedure DrawGrid1SelectCell(Sender:TObject;aCol,aRow:Integer;var CanSelect :Boolean); procedure DrawGrid1Selection(Sender:TObject;aCol,aRow:Integer); procedure Edit1KeyPress(Sender:TObject;var Key:char); procedure FormCreate(Sender:TObject); procedure FormDestroy(Sender:TObject); private { private declarations } SelectedXib : String; Items : TList; CustomName : Boolean; public { public declarations } procedure AddTemplate(const AName, SourceXibFile, ADescr, IconFile: AnsiString); function Execute(var FileName, SourceXibFile: AnsiString): Boolean; end; var newXibForm: TnewXibForm; implementation {$R *.lfm} type { TXibItem } TXibItem = class(TObject) image : TBitmap; sourcefile : AnsiString; descr : AnsiString; name : AnsiString; constructor Create(const AName, ASourceFile, ADescr, IconFileName: AnsiString); destructor Destroy; override; end; { TXibItem } constructor TXibItem.Create(const AName,ASourceFile,ADescr, IconFileName:AnsiString); {$ifdef darwin} var url : CFURLRef; data : CGImageSourceRef; cf : CFStringRef; img : CGImageRef; ctx : CGContextRef; space : CGColorSpaceRef; r : CGRect; w : WideString; begin inherited Create; w:=UTF8Decode(AName); if w<>'' then w[1]:=WideUpperCase(w[1])[1]; name:=UTF8Encode(w); sourcefile:=ASourceFile; descr:=ADescr; if IconFileName<>'' then begin CreateCFString(IconFileName, cf); url:=CFURLCreateWithFileSystemPathRelativeToBase(kCFAllocatorDefault , cf, kCFURLPOSIXPathStyle, false, nil); data:=CGImageSourceCreateWithURL(url, nil); img:=CGImageSourceCreateImageAtIndex(data, 0, nil); image:=TBitmap.Create; image.PixelFormat:=pf32bit; image.SetSize( 64, 64); image.BeginUpdate; space:=CGColorSpaceCreateDeviceRGB; ctx:=CGBitmapContextCreate(image.RawImage.Data, image.Width, image.Height, 8, image.Width*4, space, kCGImageAlphaPremultipliedFirst); r.origin.x:=0; r.origin.y:=0; r.size.width:=image.Width; r.size.height:=image.Height; CGColorSpaceRelease(space); CGContextDrawImage(ctx, r, img); CGContextRelease(ctx); image.EndUpdate; CFRelease(img); CFRelease(data); CFRelease(url); end; end; {$else} begin inherited Create; end; {$endif} destructor TXibItem.Destroy; begin image.Free; inherited Destroy; end; { TnewXibForm } procedure TnewXibForm.FormCreate(Sender:TObject); begin Items:=TList.Create; end; procedure TnewXibForm.DrawGrid1DrawCell(Sender:TObject;aCol,aRow:Integer;aRect: TRect;aState:TGridDrawState); var info : TXibItem; sz : TSize; x,y : Integer; idx : integer; begin idx:=DrawGrid1.ColCount*aRow+aCol; if (idx>=0) and (idx=0) and (idx