| 2 |
|
|
| 3 |
|
interface |
| 4 |
|
|
| 5 |
+ |
uses |
| 6 |
+ |
_FileTypes, _TreeElement; |
| 7 |
+ |
|
| 8 |
|
type |
| 9 |
< |
TExtension = class |
| 9 |
> |
TExtension = class(TTreeElement) |
| 10 |
> |
function GetChildCount: Integer; override; |
| 11 |
> |
function GetChild(ID: Integer): TTreeElement; override; |
| 12 |
> |
function GetCaption: String; override; |
| 13 |
|
private |
| 14 |
< |
FConnectionID: Integer; |
| 14 |
> |
FExt: String; |
| 15 |
|
FFiles: array of Integer; |
| 10 |
– |
function GetFile(ID: Integer): Integer; |
| 11 |
– |
function GetFileCount: Integer; |
| 16 |
|
public |
| 17 |
|
constructor Create(ConnectionID: Integer; Ext: String); virtual; |
| 18 |
|
procedure InitList; |
| 19 |
< |
property Files[ID: Integer]: Integer read GetFile; |
| 20 |
< |
property FileCount: Integer read GetFileCount; |
| 19 |
> |
property Ext: String read FExt; |
| 20 |
> |
end; |
| 21 |
> |
|
| 22 |
> |
TExtensions = class(TTreeElement) |
| 23 |
> |
function GetChildCount: Integer; override; |
| 24 |
> |
function GetChild(ID: Integer): TTreeElement; override; |
| 25 |
> |
function GetCaption: String; override; |
| 26 |
> |
private |
| 27 |
> |
FExtensions: array of TExtension; |
| 28 |
> |
public |
| 29 |
> |
constructor Create(DataAccess: TObject; ConnectionID: Integer); |
| 30 |
> |
function GetExt(Ext: String): TExtension; |
| 31 |
> |
procedure AddExt(Ext: String); |
| 32 |
|
end; |
| 33 |
|
|
| 34 |
|
|
| 35 |
+ |
|
| 36 |
|
implementation |
| 37 |
|
|
| 38 |
|
uses |
| 39 |
< |
Classes, StrUtils, SysUtils, ConnectionManager, TypeDefs; |
| 39 |
> |
Classes, StrUtils, SysUtils, ConnectionManager, TypeDefs, DataAccess, _MetaManager; |
| 40 |
|
|
| 41 |
|
{ TExtension } |
| 42 |
|
|
| 43 |
|
constructor TExtension.Create(ConnectionID: Integer; Ext: String); |
| 44 |
+ |
begin |
| 45 |
+ |
FConnectionID := ConnectionID; |
| 46 |
+ |
FExt := Ext; |
| 47 |
+ |
end; |
| 48 |
+ |
|
| 49 |
+ |
function TExtension.GetCaption: String; |
| 50 |
+ |
begin |
| 51 |
+ |
Result := FExt + '[' + IntToStr(GetChildCount) + ']'; |
| 52 |
+ |
end; |
| 53 |
+ |
|
| 54 |
+ |
function TExtension.GetChild(ID: Integer): TTreeElement; |
| 55 |
+ |
var |
| 56 |
+ |
Meta: TMetaManager; |
| 57 |
+ |
begin |
| 58 |
+ |
Meta := ConManager.Connection[FConnectionID].MetaData; |
| 59 |
+ |
Meta.InitFile(FFiles[ID]); |
| 60 |
+ |
Result := Meta.FileById[FFiles[ID]]; |
| 61 |
+ |
end; |
| 62 |
+ |
|
| 63 |
+ |
function TExtension.GetChildCount: Integer; |
| 64 |
+ |
begin |
| 65 |
+ |
Result := Length(FFiles); |
| 66 |
+ |
end; |
| 67 |
+ |
|
| 68 |
+ |
procedure TExtension.InitList; |
| 69 |
|
var |
| 70 |
|
files: TStrings; |
| 71 |
|
i: Integer; |
| 73 |
|
finfo: TFileInfo; |
| 74 |
|
begin |
| 75 |
|
files := TStringList.Create; |
| 76 |
< |
files := ConManager.Connection[FConnectionID].GetFilesList(Ext, '', False, ST_NameAsc); |
| 76 |
> |
files := ConManager.Connection[FConnectionID].GetFilesList(FExt, '', False, ST_NameAsc); |
| 77 |
|
if files.Count > 0 then |
| 78 |
|
begin |
| 79 |
|
for i := 0 to files.Count - 1 do |
| 90 |
|
files.Free; |
| 91 |
|
end; |
| 92 |
|
|
| 93 |
< |
function TExtension.GetFile(ID: Integer): Integer; |
| 93 |
> |
|
| 94 |
> |
{ TExtensions } |
| 95 |
> |
|
| 96 |
> |
function TExtensions.GetCaption: String; |
| 97 |
|
begin |
| 98 |
< |
Result := FFiles[ID]; |
| 98 |
> |
Result := ''; |
| 99 |
|
end; |
| 100 |
|
|
| 101 |
< |
function TExtension.GetFileCount: Integer; |
| 101 |
> |
function TExtensions.GetChild(ID: Integer): TTreeElement; |
| 102 |
|
begin |
| 103 |
< |
Result := Length(FFiles); |
| 103 |
> |
FExtensions[ID].InitList; |
| 104 |
> |
Result := FExtensions[ID]; |
| 105 |
|
end; |
| 106 |
|
|
| 107 |
< |
procedure TExtension.InitList; |
| 107 |
> |
function TExtensions.GetChildCount: Integer; |
| 108 |
> |
begin |
| 109 |
> |
Result := Length(FExtensions); |
| 110 |
> |
end; |
| 111 |
> |
|
| 112 |
> |
constructor TExtensions.Create(DataAccess: TObject; ConnectionID: Integer); |
| 113 |
> |
var |
| 114 |
> |
files: TStrings; |
| 115 |
> |
i: Integer; |
| 116 |
> |
fid: Integer; |
| 117 |
> |
finfo: TFileInfo; |
| 118 |
|
begin |
| 119 |
< |
Exit; |
| 119 |
> |
FConnectionID := ConnectionID; |
| 120 |
> |
files := TStringList.Create; |
| 121 |
> |
files := TDataAccess(DataAccess).GetFilesList('', '', False, ST_IDAsc); |
| 122 |
> |
SetLength(FExtensions, 0); |
| 123 |
> |
if files.Count > 0 then |
| 124 |
> |
begin |
| 125 |
> |
for i := 0 to files.Count - 1 do |
| 126 |
> |
begin |
| 127 |
> |
fid := StrToInt(MidStr(files.Strings[i], 1, 5)); |
| 128 |
> |
finfo := TDataAccess(DataAccess).GetFileInfo(fid); |
| 129 |
> |
if Length(finfo.Name) > 0 then |
| 130 |
> |
if not Assigned(GetExt(finfo.Extension)) then |
| 131 |
> |
AddExt(finfo.Extension); |
| 132 |
> |
end; |
| 133 |
> |
end; |
| 134 |
> |
files.Free; |
| 135 |
|
end; |
| 136 |
|
|
| 137 |
+ |
|
| 138 |
+ |
function TExtensions.GetExt(Ext: String): TExtension; |
| 139 |
+ |
var |
| 140 |
+ |
i: Integer; |
| 141 |
+ |
begin |
| 142 |
+ |
Result := nil; |
| 143 |
+ |
if Length(FExtensions) > 0 then |
| 144 |
+ |
for i := 0 to High(FExtensions) do |
| 145 |
+ |
if FExtensions[i].Ext = Ext then |
| 146 |
+ |
begin |
| 147 |
+ |
Result := FExtensions[i]; |
| 148 |
+ |
Break; |
| 149 |
+ |
end; |
| 150 |
+ |
end; |
| 151 |
+ |
|
| 152 |
+ |
procedure TExtensions.AddExt(Ext: String); |
| 153 |
+ |
var |
| 154 |
+ |
i: Integer; |
| 155 |
+ |
begin |
| 156 |
+ |
SetLength(FExtensions, Length(FExtensions) + 1); |
| 157 |
+ |
for i := High(FExtensions) downto 1 do |
| 158 |
+ |
begin |
| 159 |
+ |
if FExtensions[i-1].GetCaption < Ext then |
| 160 |
+ |
begin |
| 161 |
+ |
FExtensions[i] := TExtension.Create(FConnectionID, Ext); |
| 162 |
+ |
Break; |
| 163 |
+ |
end |
| 164 |
+ |
else |
| 165 |
+ |
FExtensions[i] := FExtensions[i-1]; |
| 166 |
+ |
end; |
| 167 |
+ |
if i = 0 then |
| 168 |
+ |
FExtensions[0] := TExtension.Create(FConnectionID, Ext); |
| 169 |
+ |
end; |
| 170 |
+ |
|
| 171 |
+ |
|
| 172 |
+ |
|
| 173 |
|
end. |