(* ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * 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. * * The Original Code is TurboPower Abbrevia * * The Initial Developer of the Original Code is * TurboPower Software * * Portions created by the Initial Developer are Copyright (C) 1997-2002 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** *) {*********************************************************} {* ABBREVIA: AbCBrows.pas *} {*********************************************************} {* ABBREVIA: Cabinet file browser component *} {*********************************************************} unit AbCBrows; {$I AbDefine.inc} interface uses Classes, AbBrowse, AbCabTyp; type TAbCustomCabBrowser = class(TAbBaseBrowser) protected {private} FSetID : Word; function GetCabArchive : TAbCabArchive; function GetCabSize : Longint; function GetCurrentCab : Word; function GetFolderCount : Word; function GetItem(Index : Integer) : TAbCabItem; virtual; function GetHasNext : Boolean; function GetHasPrev : Boolean; function GetSetID : Word; procedure InitArchive; override; procedure SetFileName(const aFileName : string); override; procedure SetSetID(Value : Word); protected {properties} property CabSize : Longint read GetCabSize; property CurrentCab : Word read GetCurrentCab; property FolderCount : Word read GetFolderCount; property HasNext : Boolean read GetHasNext; property HasPrev : Boolean read GetHasPrev; property SetID : Word read GetSetID write SetSetID; public {methods} constructor Create(AOwner : TComponent); override; destructor Destroy; override; public {properties} property CabArchive : TAbCabArchive read GetCabArchive; property Items[Index : Integer] : TAbCabItem read GetItem; default; end; type {$IFDEF HasPlatformsAttribute} [ComponentPlatformsAttribute(pidWin32 or pidWin64)] {$ENDIF} TAbCabBrowser = class(TAbCustomCabBrowser) published property ArchiveProgressMeter; property BaseDirectory; property CabSize; property CurrentCab; property FolderCount; property HasNext; property HasPrev; property ItemProgressMeter; property LogFile; property Logging; property OnArchiveProgress; property OnArchiveItemProgress; property OnChange; property OnLoad; property SetID; property TempDirectory; property Version; property FileName; {must be after OnLoad} end; {.Z+} implementation uses SysUtils, AbArcTyp, AbUtils; { TAbCustomCabBrowser ====================================================== } constructor TAbCustomCabBrowser.Create(AOwner : TComponent); begin inherited Create(AOwner); FArchiveType := atCab; end; { -------------------------------------------------------------------------- } destructor TAbCustomCabBrowser.Destroy; begin inherited Destroy; end; { -------------------------------------------------------------------------- } function TAbCustomCabBrowser.GetCabArchive : TAbCabArchive; begin if Assigned(Archive) then Result := TAbCabArchive(Archive) else Result := nil; end; { -------------------------------------------------------------------------- } function TAbCustomCabBrowser.GetCabSize : Longint; begin if Assigned(Archive) then Result := TAbCabArchive(Archive).CabSize else Result := 0; end; { -------------------------------------------------------------------------- } function TAbCustomCabBrowser.GetCurrentCab : Word; begin if Assigned(Archive) then Result := TAbCabArchive(Archive).CurrentCab else Result := 0; end; { -------------------------------------------------------------------------- } function TAbCustomCabBrowser.GetFolderCount : Word; begin if Assigned(Archive) then Result := TAbCabArchive(Archive).FolderCount else Result := 0; end; { -------------------------------------------------------------------------- } function TAbCustomCabBrowser.GetHasNext : Boolean; begin if Assigned(Archive) then Result := TAbCabArchive(Archive).HasNext else Result := False; end; { -------------------------------------------------------------------------- } function TAbCustomCabBrowser.GetHasPrev : Boolean; begin if Assigned(Archive) then Result := TAbCabArchive(Archive).HasPrev else Result := False; end; { -------------------------------------------------------------------------- } function TAbCustomCabBrowser.GetItem(Index : Integer) : TAbCabItem; {return cabinet item} begin if Assigned(CabArchive) then Result := CabArchive.Items[Index] else Result := nil; end; { -------------------------------------------------------------------------- } function TAbCustomCabBrowser.GetSetID : Word; begin if Assigned(Archive) then Result := TAbCabArchive(Archive).SetID else Result := 0; end; { -------------------------------------------------------------------------- } procedure TAbCustomCabBrowser.InitArchive; begin inherited InitArchive; if Assigned(Archive) then TAbCabArchive(Archive).SetID := FSetID; end; { -------------------------------------------------------------------------- } procedure TAbCustomCabBrowser.SetFileName(const aFileName : string); {open/create cabinet archive} begin FFileName := aFileName; if (csDesigning in ComponentState) then Exit; if Assigned(FArchive) then begin FArchive.Free; FArchive := nil; end; if (aFileName <> '') and FileExists(aFilename) and (AbDetermineArcType(aFileName, atCab) = atCab) then begin FArchive := TAbCabArchive.Create(aFileName, fmOpenRead); InitArchive; FArchive.Load; end; DoChange; end; { -------------------------------------------------------------------------- } procedure TAbCustomCabBrowser.SetSetID(Value : Word); begin FSetID := Value; if Assigned(Archive) then TAbCabArchive(Archive).SetID := Value; end; { -------------------------------------------------------------------------- } end.