lazarus/components/chmhelp/lhelp/basecontentprovider.pas
andrew 1e48c1f2b4 major changes to lhelp - uses lnet now
git-svn-id: trunk@10021 -
2006-10-01 23:13:07 +00:00

81 lines
2.0 KiB
ObjectPascal

unit BaseContentProvider;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Controls;
type
{ TBaseContentProvider }
TBaseContentProviderClass = Class of TBaseContentProvider;
TBaseContentProvider = class(TObject)
private
fParent: TWinControl;
public
function CanGoBack: Boolean; virtual; abstract;
function CanGoForward: Boolean; virtual; abstract;
function GetHistory: TStrings; virtual; abstract;
function LoadURL(const AURL: String; const AContext: THelpContext=-1): Boolean; virtual; abstract;
procedure GoHome; virtual; abstract;
procedure GoBack; virtual; abstract;
procedure GoForward; virtual; abstract;
class function GetProperContentProvider(const AURL: String): TBaseContentProviderClass; virtual; abstract;
constructor Create(AParent: TWinControl); virtual;
property Parent: TWinControl read fParent;
end;
// returns false if the protocol has already been registered
function RegisterContentProvider(const Protocol: String; ContentProvider: TBaseContentProviderClass): Boolean;
// example: RegisterContentProvider('chm://', TChmContentProvider);
function GetContentProvider(const Protocol: String): TBaseContentProviderClass;
implementation
var
ContentProviders: TStringList;
function RegisterContentProvider(const Protocol: String;
ContentProvider: TBaseContentProviderClass): Boolean;
begin
Result := False;
if ContentProviders.IndexOf(Protocol) > -1 then exit;
ContentProviders.AddObject(Protocol, TObject(ContentProvider));
end;
function GetContentProvider(const Protocol: String): TBaseContentProviderClass;
var
fIndex: Integer;
begin
Result := nil;
fIndex := ContentProviders.IndexOf(Protocol);
if fIndex = -1 then Exit;
Result := TBaseContentProviderClass(ContentProviders.Objects[fIndex]);
end;
{ TBaseContentProvider }
constructor TBaseContentProvider.Create(AParent: TWinControl);
begin
fParent:= AParent;
end;
initialization
ContentProviders := TStringList.Create;
finalization
ContentProviders.Free;
end.