mirror of
https://github.com/salvadordf/CEF4Delphi.git
synced 2025-05-23 21:50:21 +02:00
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
254 lines
8.1 KiB
ObjectPascal
254 lines
8.1 KiB
ObjectPascal
unit uCEFFileDialogInfo;
|
|
|
|
{$IFDEF FPC}
|
|
{$MODE OBJFPC}{$H+}
|
|
{$ENDIF}
|
|
|
|
{$I cef.inc}
|
|
|
|
{$IFNDEF TARGET_64BITS}{$ALIGN ON}{$ENDIF}
|
|
{$MINENUMSIZE 4}
|
|
|
|
interface
|
|
|
|
uses
|
|
{$IFDEF DELPHI16_UP}
|
|
System.Classes, System.SysUtils,
|
|
{$ELSE}
|
|
Classes, SysUtils,
|
|
{$ENDIF}
|
|
uCEFInterfaces, uCEFTypes;
|
|
|
|
type
|
|
TCEFFileDialogInfo = class
|
|
protected
|
|
FMode : Cardinal;
|
|
FTitle : ustring;
|
|
FDefaultFilePath : ustring;
|
|
FAcceptFilters : TStrings;
|
|
FCallback : ICefFileDialogCallback;
|
|
FDefaultAudioFileDesc : ustring;
|
|
FDefaultVideoFileDesc : ustring;
|
|
FDefaultTextFileDesc : ustring;
|
|
FDefaultImageFileDesc : ustring;
|
|
FDefaultAllFileDesc : ustring;
|
|
FDefaultUnknownFileDesc : ustring;
|
|
|
|
function GetDialogFilter : ustring; virtual;
|
|
function GetDialogType : TCEFDialogType;
|
|
|
|
procedure SetAcceptFilters(const aAcceptFilters : TStrings);
|
|
|
|
function CEFAcceptFilterToDialogFilter(const aAcceptFilter : ustring) : ustring; virtual;
|
|
function GetDefaultMimeTypeDescription(const aMimeType : ustring) : ustring; virtual;
|
|
|
|
public
|
|
constructor Create;
|
|
destructor Destroy; override;
|
|
procedure Clear;
|
|
|
|
property Mode : Cardinal read FMode write FMode;
|
|
property Title : ustring read FTitle write FTitle;
|
|
property DefaultFilePath : ustring read FDefaultFilePath write FDefaultFilePath;
|
|
property AcceptFilters : TStrings write SetAcceptFilters;
|
|
property Callback : ICefFileDialogCallback read FCallback write FCallback;
|
|
property DialogFilter : ustring read GetDialogFilter;
|
|
property DialogType : TCEFDialogType read GetDialogType;
|
|
property DefaultAudioFileDesc : ustring read FDefaultAudioFileDesc write FDefaultAudioFileDesc;
|
|
property DefaultVideoFileDesc : ustring read FDefaultVideoFileDesc write FDefaultVideoFileDesc;
|
|
property DefaultTextFileDesc : ustring read FDefaultTextFileDesc write FDefaultTextFileDesc;
|
|
property DefaultImageFileDesc : ustring read FDefaultImageFileDesc write FDefaultImageFileDesc;
|
|
property DefaultAllFileDesc : ustring read FDefaultAllFileDesc write FDefaultAllFileDesc;
|
|
property DefaultUnknownFileDesc : ustring read FDefaultUnknownFileDesc write FDefaultUnknownFileDesc;
|
|
end;
|
|
|
|
implementation
|
|
|
|
uses
|
|
uCEFConstants, uCEFMiscFunctions;
|
|
|
|
constructor TCEFFileDialogInfo.Create;
|
|
begin
|
|
inherited Create;
|
|
|
|
FMode := 0;
|
|
FTitle := '';
|
|
FDefaultFilePath := '';
|
|
FCallback := nil;
|
|
FAcceptFilters := nil;
|
|
FDefaultAudioFileDesc := 'Audio files';
|
|
FDefaultVideoFileDesc := 'Video files';
|
|
FDefaultTextFileDesc := 'Text files';
|
|
FDefaultImageFileDesc := 'Image files';
|
|
FDefaultAllFileDesc := 'All files';
|
|
FDefaultUnknownFileDesc := 'Unknown files';
|
|
end;
|
|
|
|
destructor TCEFFileDialogInfo.Destroy;
|
|
begin
|
|
Clear;
|
|
|
|
if assigned(FAcceptFilters) then
|
|
FreeAndNil(FAcceptFilters);
|
|
|
|
inherited Destroy;
|
|
end;
|
|
|
|
procedure TCEFFileDialogInfo.Clear;
|
|
begin
|
|
FMode := 0;
|
|
FTitle := '';
|
|
FDefaultFilePath := '';
|
|
FCallback := nil;
|
|
|
|
if assigned(FAcceptFilters) then
|
|
FAcceptFilters.Clear;
|
|
end;
|
|
|
|
function TCEFFileDialogInfo.GetDialogType : TCEFDialogType;
|
|
begin
|
|
case FMode of
|
|
FILE_DIALOG_OPEN : Result := dtOpen;
|
|
FILE_DIALOG_OPEN_MULTIPLE : Result := dtOpenMultiple;
|
|
FILE_DIALOG_OPEN_FOLDER : Result := dtOpenFolder;
|
|
FILE_DIALOG_SAVE : Result := dtSave;
|
|
else Result := dtOpen;
|
|
end;
|
|
end;
|
|
|
|
function TCEFFileDialogInfo.GetDefaultMimeTypeDescription(const aMimeType : ustring) : ustring;
|
|
begin
|
|
if (CompareStr(copy(aMimeType, 1, 5), 'audio') = 0) then Result := FDefaultAudioFileDesc
|
|
else if (CompareStr(copy(aMimeType, 1, 5), 'video') = 0) then Result := FDefaultVideoFileDesc
|
|
else if (CompareStr(copy(aMimeType, 1, 4), 'text') = 0) then Result := FDefaultTextFileDesc
|
|
else if (CompareStr(copy(aMimeType, 1, 5), 'image') = 0) then Result := FDefaultImageFileDesc
|
|
else Result := FDefaultUnknownFileDesc;
|
|
end;
|
|
|
|
procedure TCEFFileDialogInfo.SetAcceptFilters(const aAcceptFilters : TStrings);
|
|
begin
|
|
if assigned(aAcceptFilters) then
|
|
begin
|
|
if assigned(FAcceptFilters) then
|
|
FAcceptFilters.Clear
|
|
else
|
|
FAcceptFilters := TStringList.Create;
|
|
|
|
if (aAcceptFilters.Count > 0) then
|
|
FAcceptFilters.AddStrings(aAcceptFilters);
|
|
end;
|
|
end;
|
|
|
|
function TCEFFileDialogInfo.GetDialogFilter : ustring;
|
|
var
|
|
i : integer;
|
|
begin
|
|
Result := '';
|
|
|
|
if assigned(FAcceptFilters) and (FAcceptFilters.Count > 0) then
|
|
for i := 0 to pred(FAcceptFilters.Count) do
|
|
if (i = 0) then
|
|
Result := CEFAcceptFilterToDialogFilter(FAcceptFilters[i])
|
|
else
|
|
Result := Result + '|' + CEFAcceptFilterToDialogFilter(FAcceptFilters[i]);
|
|
|
|
if (length(Result) > 0) then
|
|
Result := Result + '|' + FDefaultAllFileDesc + '|*.*'
|
|
else
|
|
Result := FDefaultAllFileDesc + '|*.*';
|
|
end;
|
|
|
|
function TCEFFileDialogInfo.CEFAcceptFilterToDialogFilter(const aAcceptFilter : ustring) : ustring;
|
|
var
|
|
i : integer;
|
|
TempDesc, TempExt, TempString : ustring;
|
|
TempSL : TStringList;
|
|
begin
|
|
Result := '';
|
|
|
|
if (length(aAcceptFilter) = 0) then exit;
|
|
|
|
TempSL := nil;
|
|
i := pos('|', aAcceptFilter);
|
|
|
|
if (i > 0) then
|
|
begin
|
|
TempDesc := copy(aAcceptFilter, 1, pred(i));
|
|
TempString := copy(aAcceptFilter, succ(i), length(aAcceptFilter));
|
|
|
|
for i := 1 to length(TempString) do
|
|
if (TempString[i] = ';') then TempString[i] := #13;
|
|
|
|
TempSL := TStringList.Create;
|
|
TempSL.Text := TempString;
|
|
TempString := '';
|
|
|
|
i := 0;
|
|
while (i < TempSL.Count) do
|
|
begin
|
|
TempExt := TempSL[i];
|
|
if (length(TempExt) > 1) and (TempExt[1] = '.') then
|
|
TempString := TempString + '*' + TempExt + ';';
|
|
inc(i);
|
|
end;
|
|
|
|
i := length(TempString);
|
|
if (i > 0) then
|
|
begin
|
|
if (TempString[i] = ';') then TempString := copy(TempString, 1, pred(i));
|
|
Result := TempDesc + '|' + TempString;
|
|
end
|
|
else
|
|
Result := aAcceptFilter;
|
|
end
|
|
else
|
|
if (aAcceptFilter[1] = '.') then
|
|
begin
|
|
TempDesc := GetFileTypeDescription(aAcceptFilter);
|
|
|
|
if (length(TempDesc) = 0) then
|
|
TempDesc := GetDefaultMimeTypeDescription(CefGetMimeType(aAcceptFilter));
|
|
|
|
Result := TempDesc + ' (*' + aAcceptFilter + ')|*' + aAcceptFilter;
|
|
end
|
|
else
|
|
begin
|
|
TempSL := TStringList.Create;
|
|
CefGetExtensionsForMimeType(aAcceptFilter, TempSL);
|
|
|
|
if (TempSL.Count = 0) then
|
|
Result := GetDefaultMimeTypeDescription(aAcceptFilter) + '|*.*'
|
|
else
|
|
begin
|
|
for i := 0 to pred(TempSL.Count) do
|
|
begin
|
|
TempExt := TempSL[i];
|
|
|
|
if (length(TempExt) > 0) and (TempExt[1] = '.') then
|
|
TempString := TempString + '*' + TempExt + ';'
|
|
else
|
|
TempString := TempString + '*.' + TempExt + ';';
|
|
end;
|
|
|
|
TempString := copy(TempString, 1, pred(length(TempString)));
|
|
TempDesc := '';
|
|
i := 0;
|
|
|
|
while (length(TempDesc) = 0) and (i < TempSL.Count) do
|
|
begin
|
|
TempDesc := GetFileTypeDescription(TempSL[i]);
|
|
inc(i);
|
|
end;
|
|
|
|
if (length(TempDesc) = 0) then
|
|
TempDesc := GetDefaultMimeTypeDescription(CefGetMimeType(aAcceptFilter));
|
|
|
|
Result := TempDesc + ' (' + TempString + ')|' + TempString;
|
|
end;
|
|
end;
|
|
|
|
if assigned(TempSL) then FreeAndNil(TempSL);
|
|
end;
|
|
|
|
end.
|