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 228 by alloc, Wed Jun 20 09:51:38 2007 UTC vs.
Revision 237 by alloc, Sat Jul 14 14:18:23 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 >      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;
# Line 32 | Line 73 | var
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
# Line 49 | Line 90 | begin
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.

Diff Legend

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