| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  | // ************************************************************************
 | 
					
						
							|  |  |  | // ***************************** CEF4Delphi *******************************
 | 
					
						
							|  |  |  | // ************************************************************************
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // CEF4Delphi is based on DCEF3 which uses CEF3 to embed a chromium-based
 | 
					
						
							|  |  |  | // browser in Delphi applications.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // The original license of DCEF3 still applies to CEF4Delphi.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // For more information about CEF4Delphi visit :
 | 
					
						
							|  |  |  | //         https://www.briskbard.com/index.php?lang=en&pageid=cef
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2018-01-06 15:25:32 +01:00
										 |  |  | //        Copyright � 2018 Salvador D�az Fau. All rights reserved.
 | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  | //
 | 
					
						
							|  |  |  | // ************************************************************************
 | 
					
						
							|  |  |  | // ************ vvvv Original license and comments below vvvv *************
 | 
					
						
							|  |  |  | // ************************************************************************
 | 
					
						
							|  |  |  | (* | 
					
						
							|  |  |  |  *                       Delphi Chromium Embedded 3 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Usage allowed under the restrictions of the Lesser GNU General Public License | 
					
						
							|  |  |  |  * or alternatively the restrictions of the Mozilla Public License 1.1 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Software distributed under the License is distributed on an "AS IS" basis, | 
					
						
							|  |  |  |  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for | 
					
						
							|  |  |  |  * the specific language governing rights and limitations under the License. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Unit owner : Henri Gourvest <hgourvest@gmail.com> | 
					
						
							|  |  |  |  * Web site   : http://www.progdigy.com
 | 
					
						
							|  |  |  |  * Repository : http://code.google.com/p/delphichromiumembedded/
 | 
					
						
							|  |  |  |  * Group      : http://groups.google.com/group/delphichromiumembedded
 | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Embarcadero Technologies, Inc is not permitted to use or redistribute | 
					
						
							|  |  |  |  * this source code without explicit permission. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  *) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | unit uCEFFileDialogCallback; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | {$IFNDEF CPUX64} | 
					
						
							|  |  |  |   {$ALIGN ON} | 
					
						
							|  |  |  |   {$MINENUMSIZE 4} | 
					
						
							|  |  |  | {$ENDIF} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-05 20:56:46 +01:00
										 |  |  | {$I cef.inc} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  | interface | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uses | 
					
						
							| 
									
										
										
										
											2017-02-05 20:56:46 +01:00
										 |  |  |   {$IFDEF DELPHI16_UP} | 
					
						
							| 
									
										
										
										
											2018-02-27 10:23:45 +01:00
										 |  |  |   System.Classes, System.SysUtils, | 
					
						
							| 
									
										
										
										
											2017-02-05 20:56:46 +01:00
										 |  |  |   {$ELSE} | 
					
						
							| 
									
										
										
										
											2018-02-27 10:23:45 +01:00
										 |  |  |   Classes, SysUtils, | 
					
						
							| 
									
										
										
										
											2017-02-05 20:56:46 +01:00
										 |  |  |   {$ENDIF} | 
					
						
							| 
									
										
										
										
											2017-03-16 19:09:42 +01:00
										 |  |  |   uCEFBaseRefCounted, uCEFInterfaces, uCEFTypes; | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | type | 
					
						
							| 
									
										
										
										
											2017-03-16 19:09:42 +01:00
										 |  |  |   TCefFileDialogCallbackRef = class(TCefBaseRefCountedRef, ICefFileDialogCallback) | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  |   protected | 
					
						
							| 
									
										
										
										
											2018-02-26 18:40:51 +01:00
										 |  |  |     procedure Cont(selectedAcceptFilter: Integer; const filePaths: TStrings); | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  |     procedure Cancel; | 
					
						
							|  |  |  |   public | 
					
						
							|  |  |  |     class function UnWrap(data: Pointer): ICefFileDialogCallback; | 
					
						
							|  |  |  |   end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | implementation | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | uses | 
					
						
							|  |  |  |   uCEFMiscFunctions, uCEFLibFunctions; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | procedure TCefFileDialogCallbackRef.Cancel; | 
					
						
							|  |  |  | begin | 
					
						
							|  |  |  |   PCefFileDialogCallback(FData).cancel(FData); | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-26 18:40:51 +01:00
										 |  |  | procedure TCefFileDialogCallbackRef.Cont(selectedAcceptFilter: Integer; const filePaths: TStrings); | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  | var | 
					
						
							| 
									
										
										
										
											2018-02-27 10:23:45 +01:00
										 |  |  |   TempSL : TCefStringList; | 
					
						
							|  |  |  |   i : Integer; | 
					
						
							|  |  |  |   TempString : TCefString; | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  | begin | 
					
						
							| 
									
										
										
										
											2018-02-27 10:23:45 +01:00
										 |  |  |   TempSL := nil; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  |   try | 
					
						
							| 
									
										
										
										
											2018-02-27 10:23:45 +01:00
										 |  |  |     try | 
					
						
							|  |  |  |       TempSL := cef_string_list_alloc; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       if (filePaths <> nil) and (filePaths.Count > 0) then | 
					
						
							|  |  |  |         for i := 0 to filePaths.Count - 1 do | 
					
						
							|  |  |  |           begin | 
					
						
							|  |  |  |             TempString := CefString(filePaths[i]); | 
					
						
							|  |  |  |             cef_string_list_append(TempSL, @TempString); | 
					
						
							|  |  |  |           end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       PCefFileDialogCallback(FData).cont(PCefFileDialogCallback(FData), selectedAcceptFilter, TempSL); | 
					
						
							|  |  |  |     except | 
					
						
							|  |  |  |       on e : exception do | 
					
						
							|  |  |  |         if CustomExceptionHandler('TCefFileDialogCallbackRef.Cont', e) then raise; | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  |     end; | 
					
						
							|  |  |  |   finally | 
					
						
							| 
									
										
										
										
											2018-02-27 10:23:45 +01:00
										 |  |  |     if (TempSL <> nil) then cef_string_list_free(TempSL); | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  |   end; | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-26 18:40:51 +01:00
										 |  |  | class function TCefFileDialogCallbackRef.UnWrap(data: Pointer): ICefFileDialogCallback; | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  | begin | 
					
						
							| 
									
										
										
										
											2018-02-26 18:40:51 +01:00
										 |  |  |   if (data <> nil) then | 
					
						
							|  |  |  |     Result := Create(data) as ICefFileDialogCallback | 
					
						
							|  |  |  |    else | 
					
						
							| 
									
										
										
										
											2017-01-27 16:37:51 +01:00
										 |  |  |     Result := nil; | 
					
						
							|  |  |  | end; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | end. |