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 241 by alloc, Tue Jul 17 22:27:16 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
16 <      FConnectionID: Integer;
16 >      FExt: String;
17        FFiles: array of Integer;
10      function GetFile(ID: Integer): Integer;
11      function GetFileCount: Integer;
18      public
19        constructor Create(ConnectionID: Integer; Ext: String); virtual;
20        procedure InitList;
21 <      property Files[ID: Integer]: Integer read GetFile;
16 <      property FileCount: Integer read GetFileCount;
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;
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;
# Line 32 | Line 80 | var
80    finfo: TFileInfo;
81   begin
82    files := TStringList.Create;
83 <  files := ConManager.Connection[FConnectionID].GetFilesList(Ext, '', False, ST_NameAsc);
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
# Line 49 | Line 97 | begin
97    files.Free;
98   end;
99  
100 < function TExtension.GetFile(ID: Integer): Integer;
100 >
101 > { TExtensions }
102 >
103 > function TExtensions.GetCaption: String;
104   begin
105 <  Result := FFiles[ID];
105 >  Result := '';
106   end;
107  
108 < function TExtension.GetFileCount: Integer;
108 > function TExtensions.GetChild(ID: Integer): TTreeElement;
109   begin
110 <  Result := Length(FFiles);
110 >  FExtensions[ID].InitList;
111 >  Result := FExtensions[ID];
112   end;
113  
114 < procedure TExtension.InitList;
114 > function TExtensions.GetChildCount: Integer;
115   begin
116 < Exit;
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.

Diff Legend

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