mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2024-11-24 08:02:15 +02:00
ca8bc9dff4
Added the PDS file to extract the HTML Help files using PasDoc Added more XML documentation Fixed some XML errors. Removed the license copy from the pas units. Updated the LICENSE.md file
157 lines
5.1 KiB
ObjectPascal
157 lines
5.1 KiB
ObjectPascal
unit uCEFDialogHandler;
|
|
|
|
{$IFDEF FPC}
|
|
{$MODE OBJFPC}{$H+}
|
|
{$ENDIF}
|
|
|
|
{$I cef.inc}
|
|
|
|
{$IFNDEF TARGET_64BITS}{$ALIGN ON}{$ENDIF}
|
|
{$MINENUMSIZE 4}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF DELPHI16_UP}
|
|
System.Classes,
|
|
{$ELSE}
|
|
Classes,
|
|
{$ENDIF}
|
|
uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes;
|
|
|
|
type
|
|
TCefDialogHandlerOwn = class(TCefBaseRefCountedOwn, ICefDialogHandler)
|
|
protected
|
|
function OnFileDialog(const browser: ICefBrowser; mode: TCefFileDialogMode; const title, defaultFilePath: ustring; const acceptFilters: TStrings; const callback: ICefFileDialogCallback): Boolean; virtual;
|
|
|
|
procedure RemoveReferences; virtual;
|
|
|
|
public
|
|
constructor Create; virtual;
|
|
end;
|
|
|
|
TCustomDialogHandler = class(TCefDialogHandlerOwn)
|
|
protected
|
|
FEvents : Pointer;
|
|
|
|
function OnFileDialog(const browser: ICefBrowser; mode: TCefFileDialogMode; const title: ustring; const defaultFilePath: ustring; const acceptFilters: TStrings; const callback: ICefFileDialogCallback): Boolean; override;
|
|
|
|
procedure RemoveReferences; override;
|
|
|
|
public
|
|
constructor Create(const events : IChromiumEvents); reintroduce; virtual;
|
|
destructor Destroy; override;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
{$IFDEF DELPHI16_UP}
|
|
System.SysUtils,
|
|
{$ELSE}
|
|
SysUtils,
|
|
{$ENDIF}
|
|
uCEFMiscFunctions, uCEFLibFunctions, uCEFBrowser, uCEFFileDialogCallback, uCEFStringList;
|
|
|
|
function cef_dialog_handler_on_file_dialog(self : PCefDialogHandler;
|
|
browser : PCefBrowser;
|
|
mode : TCefFileDialogMode;
|
|
const title : PCefString;
|
|
const default_file_path : PCefString;
|
|
accept_filters : TCefStringList;
|
|
callback : PCefFileDialogCallback): Integer; stdcall;
|
|
var
|
|
TempSL : TStringList;
|
|
TempCefSL : ICefStringList;
|
|
TempObject : TObject;
|
|
begin
|
|
TempSL := nil;
|
|
Result := Ord(False);
|
|
|
|
try
|
|
try
|
|
TempObject := CefGetObject(self);
|
|
|
|
if (TempObject <> nil) and (TempObject is TCefDialogHandlerOwn) then
|
|
begin
|
|
TempSL := TStringList.Create;
|
|
TempCefSL := TCefStringListRef.Create(accept_filters);
|
|
TempCefSL.CopyToStrings(TempSL);
|
|
|
|
Result := Ord(TCefDialogHandlerOwn(TempObject).OnFileDialog(TCefBrowserRef.UnWrap(browser),
|
|
mode,
|
|
CefString(title),
|
|
CefString(default_file_path),
|
|
TempSL,
|
|
TCefFileDialogCallbackRef.UnWrap(callback)));
|
|
end;
|
|
except
|
|
on e : exception do
|
|
if CustomExceptionHandler('cef_dialog_handler_on_file_dialog', e) then raise;
|
|
end;
|
|
finally
|
|
if (TempSL <> nil) then FreeAndNil(TempSL);
|
|
end;
|
|
end;
|
|
|
|
constructor TCefDialogHandlerOwn.Create;
|
|
begin
|
|
inherited CreateData(SizeOf(TCefDialogHandler));
|
|
|
|
PCefDialogHandler(FData)^.on_file_dialog := {$IFDEF FPC}@{$ENDIF}cef_dialog_handler_on_file_dialog;
|
|
end;
|
|
|
|
function TCefDialogHandlerOwn.OnFileDialog(const browser : ICefBrowser;
|
|
mode : TCefFileDialogMode;
|
|
const title : ustring;
|
|
const defaultFilePath : ustring;
|
|
const acceptFilters : TStrings;
|
|
const callback : ICefFileDialogCallback): Boolean;
|
|
begin
|
|
Result := False;
|
|
end;
|
|
|
|
procedure TCefDialogHandlerOwn.RemoveReferences;
|
|
begin
|
|
//
|
|
end;
|
|
|
|
// TCustomDialogHandler
|
|
|
|
constructor TCustomDialogHandler.Create(const events : IChromiumEvents);
|
|
begin
|
|
inherited Create;
|
|
|
|
FEvents := Pointer(events);
|
|
end;
|
|
|
|
destructor TCustomDialogHandler.Destroy;
|
|
begin
|
|
RemoveReferences;
|
|
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TCustomDialogHandler.RemoveReferences;
|
|
begin
|
|
FEvents := nil;
|
|
end;
|
|
|
|
function TCustomDialogHandler.OnFileDialog(const browser : ICefBrowser;
|
|
mode : TCefFileDialogMode;
|
|
const title : ustring;
|
|
const defaultFilePath : ustring;
|
|
const acceptFilters : TStrings;
|
|
const callback : ICefFileDialogCallback): Boolean;
|
|
begin
|
|
if (FEvents <> nil) then
|
|
Result := IChromiumEvents(FEvents).doOnFileDialog(browser, mode, title, defaultFilePath,
|
|
acceptFilters, callback)
|
|
else
|
|
Result := inherited OnFileDialog(browser, mode, title, defaultFilePath,
|
|
acceptFilters, callback);
|
|
end;
|
|
|
|
end.
|
|
|