ViewVC Help
View File | Revision Log | View Changeset | Root Listing
root/Oni2/oup/current/FileClasses/_Extensions.pas
(Generate patch)

Comparing oup/current/FileClasses/_Extensions.pas (file contents):
Revision 229 by alloc, Wed Jun 20 10:57:51 2007 UTC vs.
Revision 244 by alloc, Fri Aug 17 21:09:51 2007 UTC

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

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)