ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/FileClasses/_Extensions.pas
Revision: 241
Committed: Tue Jul 17 22:27:16 2007 UTC (18 years, 2 months ago) by alloc
Content type: text/x-pascal
File size: 4202 byte(s)
Log Message:

File Contents

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