--- oup/current/FileClasses/_Extensions.pas 2007/06/20 09:51:38 228 +++ oup/current/FileClasses/_Extensions.pas 2007/08/17 21:09:51 244 @@ -2,29 +2,78 @@ unit _Extensions; interface +uses + _FileTypes, _TreeElement; + type - TExtension = class + TExtension = class(TTreeElement) + protected + function GetChildCount: Integer; override; + function GetChild(ID: Integer): TTreeElement; override; + function GetCaption: String; override; + function GetType: String; override; private - FConnectionID: Integer; + FExt: String; FFiles: array of Integer; - function GetFile(ID: Integer): Integer; - function GetFileCount: Integer; public constructor Create(ConnectionID: Integer; Ext: String); virtual; procedure InitList; - property Files[ID: Integer]: Integer read GetFile; - property FileCount: Integer read GetFileCount; + property Ext: String read FExt; end; + TExtensions = class(TTreeElement) + function GetChildCount: Integer; override; + function GetChild(ID: Integer): TTreeElement; override; + function GetCaption: String; override; + function GetType: String; override; + private + FExtensions: array of TExtension; + public + constructor Create(DataAccess: TObject; ConnectionID: Integer); + function GetExt(Ext: String): TExtension; + procedure AddExt(Ext: String); + end; + + implementation uses - Classes, StrUtils, SysUtils, ConnectionManager, TypeDefs; + Classes, StrUtils, SysUtils, ConnectionManager, TypeDefs, DataAccess, _MetaManager; { TExtension } constructor TExtension.Create(ConnectionID: Integer; Ext: String); +begin + FConnectionID := ConnectionID; + FExt := Ext; +end; + +function TExtension.GetCaption: String; +begin + Result := FExt + '[' + IntToStr(GetChildCount) + ']'; +end; + +function TExtension.GetChild(ID: Integer): TTreeElement; +var + Meta: TMetaManager; +begin + Meta := ConManager.Connection[FConnectionID].MetaData; + Meta.InitFile(FFiles[ID]); + Result := Meta.FileById[FFiles[ID]]; +end; + +function TExtension.GetChildCount: Integer; +begin + Result := Length(FFiles); +end; + +function TExtension.GetType: String; +begin + Result := ''; +end; + +procedure TExtension.InitList; var files: TStrings; i: Integer; @@ -32,7 +81,7 @@ var finfo: TFileInfo; begin files := TStringList.Create; - files := ConManager.Connection[FConnectionID].GetFilesList(Ext, '', False, ST_NameAsc); + files := ConManager.Connection[FConnectionID].GetFilesList(FExt, '', False, ST_NameAsc); if files.Count > 0 then begin for i := 0 to files.Count - 1 do @@ -49,19 +98,89 @@ begin files.Free; end; -function TExtension.GetFile(ID: Integer): Integer; + +{ TExtensions } + +function TExtensions.GetCaption: String; begin - Result := FFiles[ID]; + Result := 'Extensions'; end; -function TExtension.GetFileCount: Integer; +function TExtensions.GetChild(ID: Integer): TTreeElement; begin - Result := Length(FFiles); + FExtensions[ID].InitList; + Result := FExtensions[ID]; end; -procedure TExtension.InitList; +function TExtensions.GetChildCount: Integer; +begin + Result := Length(FExtensions); +end; + +constructor TExtensions.Create(DataAccess: TObject; ConnectionID: Integer); +var + files: TStrings; + i: Integer; + fid: Integer; + finfo: TFileInfo; +begin + FConnectionID := ConnectionID; + files := TStringList.Create; + files := TDataAccess(DataAccess).GetFilesList('', '', False, ST_IDAsc); + SetLength(FExtensions, 0); + if files.Count > 0 then + begin + for i := 0 to files.Count - 1 do + begin + fid := StrToInt(MidStr(files.Strings[i], 1, 5)); + finfo := TDataAccess(DataAccess).GetFileInfo(fid); + if Length(finfo.Name) > 0 then + if not Assigned(GetExt(finfo.Extension)) then + AddExt(finfo.Extension); + end; + end; + files.Free; +end; + + +function TExtensions.GetExt(Ext: String): TExtension; +var + i: Integer; begin -Exit; + Result := nil; + if Length(FExtensions) > 0 then + for i := 0 to High(FExtensions) do + if FExtensions[i].Ext = Ext then + begin + Result := FExtensions[i]; + Break; + end; end; +function TExtensions.GetType: String; +begin + Result := ''; +end; + +procedure TExtensions.AddExt(Ext: String); +var + i: Integer; +begin + SetLength(FExtensions, Length(FExtensions) + 1); + for i := High(FExtensions) downto 1 do + begin + if FExtensions[i-1].GetCaption < Ext then + begin + FExtensions[i] := TExtension.Create(FConnectionID, Ext); + Break; + end + else + FExtensions[i] := FExtensions[i-1]; + end; + if i = 0 then + FExtensions[0] := TExtension.Create(FConnectionID, Ext); +end; + + + end.