Develop and Download Open Source Software

Browse CVS Repository

Contents of /gikonavigoeson/gikonavi/HistoryList.pas

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.2 - (show annotations) (download) (as text)
Sun Dec 31 04:23:28 2006 UTC (17 years, 2 months ago) by h677
Branch: MAIN
CVS Tags: v1_59_0_771, v1_59_0_770, v1_59_0_773, v1_59_0_772, v1_59_0_775, v1_59_0_774, v1_59_0_777, v1_59_0_776, v1_56_0_715, v1_59_0_778, v1_63_1_819, v1_57_0_737, v1_62_0_812, v1_57_0_735, v1_57_0_734, v1_57_0_733, v1_57_0_732, v1_57_0_731, v1_57_0_730, v1_57_0_739, v1_57_0_738, v1_59_1_765, v1_60_0_788, v1_60_0_789, v1_58_0_748, v1_58_0_745, v1_60_0_781, v1_60_0_782, v1_58_0_746, v1_60_0_784, v1_60_0_786, v1_60_0_787, v1_56_0_707, v1_59_0_767, v1_56_0_705, v1_56_0_704, v1_56_0_703, v1_56_0_702, v1_56_0_701, v1_56_0_700, v1_59_1_778, v1_57_0_723, v1_59_0_768, v1_59_0_769, v1_57_0_725, v1_57_0_726, v1_57_0_727, v1_57_0_720, v1_57_0_722, v1_57_1_744, v1_57_0_728, v1_57_0_729, v1_57_0_736, v1_58_0_752, v1_58_0_750, v1_58_0_751, v1_58_0_756, v1_58_0_757, v1_58_0_754, v1_58_0_755, v1_58_0_759, v1_57_0_719, v1_57_0_718, v1_56_0_716, v1_54_0_687, v1_56_0_710, v1_56_0_711, v1_56_1_717, v1_56_1_716, v1_54_0_688, v1_54_0_689, v1_61_0_796, v1_61_0_797, v1_61_0_795, v1_61_0_798, v1_61_0_799, v1_55_0_692, v1_55_0_693, v1_55_0_696, v1_55_0_697, v1_55_0_694, v1_55_0_695, v1_54_1_691, v1_56_2_724, v1_56_2_722, v1_55_1_697, v1_56_0_714, v1_63_0_818, v1_63_0_817, v1_63_0_816, v1_63_0_815, v1_62_0_805, v1_62_0_804, v1_62_0_807, v1_62_0_806, v1_56_0_712, v1_62_0_803, v1_62_0_802, v1_56_0_713, v1_62_0_809, v1_56_0_721, v1_60_0_780, v1_60_0_779, v1_62_0_810, v1_62_0_811, v1_58_0_747, v1_60_0_783, v1_59_2_785, marged_bRESPOPUP, v1_56_0_706, v1_60_1_793, v1_54_0_690, v1_58_0_763, v1_58_0_762, v1_58_0_761, v1_58_0_760, v1_62_1_813, v1_57_2_749, v1_57_0_742, v1_57_0_743, v1_57_0_740, v1_57_0_741, v1_56_0_709, v1_57_0_744, v1_56_0_708, v1_61_0_800, v1_56_0_699, v1_56_0_698, v1_60_0_793, v1_60_0_792, v1_60_0_791, v1_60_0_790, v1_60_2_794, v1_61_1_801, HEAD
Branch point for: Bb57, Bb56, Bb55, Bb62, Bb63, Bb60, Bb61, Bb59, Bb58, bRESPOPUP, bListSU, Bb54
Changes since 1.1: +34 -0 lines
File MIME type: text/x-pascal
HistoryListにメソッドを移動

1 unit HistoryList;
2
3 interface
4
5 uses
6 Windows, Messages, SysUtils, Classes, Graphics, Controls,
7 BoardGroup, Favorite, ComCtrls, GikoXMLDoc;
8
9 type
10 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
11
12 THistoryList = class(TList)
13 public
14 function AddHistory( favItem : TFavoriteThreadItem; TreeView : TTreeView;
15 TreeType: TGikoTreeType): Boolean;
16 procedure DeleteHistory( threadItem: TThreadItem; TreeView : TTreeView;
17 TreeType: TGikoTreeType );
18 procedure Clear; override;
19 procedure SaveToFile(const FileName: String);
20 procedure LoadFromFile(const FileName: String;
21 TreeView : TTreeView; TreeType: TGikoTreeType);
22 procedure SetTreeNode( TreeView : TTreeView );
23
24 end;
25
26
27 implementation
28
29 uses
30 Giko, GikoSystem, Setting, YofUtils, MojuUtils;
31
32 const
33 ITEM_ICON_THREADLOG1 = 6; //?鴻???≪?ゃ?潟?鰹????違????鐚?
34 ITEM_ICON_THREADLOG2 = 7; //?鴻???≪?ゃ?潟?鰹????違????鐚?
35
36
37 function THistoryList.AddHistory(
38 favItem : TFavoriteThreadItem; TreeView : TTreeView;
39 TreeType: TGikoTreeType ): Boolean;
40 var
41 i: Integer;
42 Item: TFavoriteThreadItem;
43 Node: TTreeNode;
44 begin
45 Result := True;
46 if TreeType = gttHistory then
47 TreeView.Selected := nil;
48
49 for i := 0 to Self.Count - 1 do begin
50 if TObject(Self[i]) is TFavoriteThreadItem then begin
51 Item := TFavoriteThreadItem(Self[i]);
52 if Item.URL = favItem.URL then begin
53 Self.Move(i, 0);
54 if TreeType = gttHistory then
55 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
56 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
57 Result := false;
58 Exit;
59 end;
60 end;
61 end;
62
63 if Self.Count > 0 then
64 Self.Insert( 0, favItem )
65 else
66 Self.Add( favItem );
67
68 while GikoSys.Setting.MaxRecordCount < Self.Count do begin
69 i := Self.Count - 1;
70 TObject( Self.Items[ i ] ).Free;
71 Self.Delete( i );
72 end;
73
74 if TreeType = gttHistory then begin
75 Node := TreeView.Items.Add( nil, favItem.Title );
76 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
77 {
78 if favItem.NewArrival then begin
79 Node.ImageIndex := ITEM_ICON_THREADNEW1;
80 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
81 end else begin
82 Node.ImageIndex := ITEM_ICON_THREADLOG1;
83 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
84 end;
85 }
86 // 莢??激???????????????? NewArrival ?????с??????茵??????
87 // ??avItem.Item ?????????c? dat ????粋昭?帥??綽?荀???????
88 Node.ImageIndex := ITEM_ICON_THREADLOG1;
89 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
90 Node.Data := favItem;
91 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
92 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
93 i := TreeView.Items.Count - 1;
94 TreeView.Items.Item[ i ].Delete;
95 end;
96 end;
97 end;
98
99 procedure THistoryList.DeleteHistory( threadItem: TThreadItem;
100 TreeView : TTreeView; TreeType: TGikoTreeType );
101 var
102 i: Integer;
103 node: TTreeNode;
104 begin
105 // ???c??????????吋罩眼??茵?ず??????????????
106 // ???c?????????????≪?ゃ?????????ゃ??????
107 if (TreeType = gttHistory) then begin
108 node := TreeView.Items.GetFirstNode;
109 while (node <> nil) do begin
110 if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
111 TreeView.Items.Delete(node);
112 TreeView.Refresh;
113 node := nil;
114 end else begin
115 node := node.GetNext;
116 end;
117 end;
118 end;
119 for i := 0 to Self.Count - 1 do begin
120 if threadItem = TFavoriteThreadItem( Self.Items[i] ).Item then begin
121 TFavoriteThreadItem( Self.Items[ i ] ).Free;
122 Self.Delete(i);
123 Self.Capacity := Self.Count;
124 Break;
125 end;
126 end;
127 end;
128
129 procedure THistoryList.Clear;
130 var
131 i : Integer;
132 begin
133 try
134 for i := Self.Count - 1 downto 0 do begin
135 if TObject(Self[ i ]) is TFavoriteThreadItem then
136 TFavoriteThreadItem(Self[ i ]).Free
137 else if TObject(Self[ i ]) is TFavoriteBoardItem then
138 TFavoriteBoardItem(Self[ i ]).Free;
139 end;
140 except
141 end;
142
143 inherited Clear;
144 Self.Capacity := Self.Count;
145
146 end;
147
148 procedure THistoryList.SaveToFile(const FileName: String);
149 var
150 i, bound : Integer;
151 saveList : TstringList;
152 begin
153
154 saveList := TStringList.Create;
155 try
156 Self.Pack;
157 Self.Capacity := Self.Count;
158 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
159 saveList.Add('<address>');
160 bound := Self.Count - 1;
161 for i := bound downto 0 do begin
162 // title ???????????篏帥?c????????
163 saveList.Add(
164 '<history url="' + HtmlEncode( TFavoriteThreadItem( Self[ i ] ).URL ) + '"' +
165 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( Self[ i ] ).Title )) + '"/>');
166 end;
167 saveList.Add('</address>');
168 saveList.SaveToFile( FileName );
169 finally
170 saveList.Free;
171 end;
172
173 end;
174
175 procedure THistoryList.LoadFromFile(const FileName: String;
176 TreeView : TTreeView; TreeType: TGikoTreeType);
177 var
178 i, bound : Integer;
179 XMLDoc : IXMLDocument;
180 XMLNode : IXMLNode;
181 HistoryNode : IXMLNode;
182 s : string;
183 favItem : TFavoriteThreadItem;
184 {$IFDEF DEBUG}
185 st, rt : Cardinal;
186 {$ENDIF}
187 begin
188 {$IFDEF DEBUG}
189 st := GetTickCount;
190 {$ENDIF}
191 if FileExists( FileName ) then begin
192 try
193 XMLDoc := IXMLDocument.Create;
194 //XMLDoc := LoadXMLDocument(FileName);
195 LoadXMLDocument(FileName, XMLDoc);
196 try
197 XMLNode := XMLDoc.DocumentElement;
198
199 if XMLNode.NodeName = 'address' then begin
200 bound := XMLNode.ChildNodes.Count - 1;
201 for i := 0 to bound do begin
202 HistoryNode := XMLNode.ChildNodes[i];
203 if HistoryNode.NodeName = 'history' then begin
204 //if FReadCount >= sl.Count then begin
205 s := Trim(HistoryNode.Attributes['url']);
206 if s <> '' then begin
207 favItem := TFavoriteThreadItem.Create(
208 s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
209 if not AddHistory( favItem, TreeView, TreeType ) then
210 favItem.Free;
211 end;
212 //end;
213 end;
214 end;
215 end;
216 finally
217 XMLDoc.Free;
218 end;
219 except
220 end;
221 end;
222 {$IFDEF DEBUG}
223 rt := GetTickCount - st;
224 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
225 {$ENDIF}
226
227 end;
228 procedure THistoryList.SetTreeNode(
229 TreeView : TTreeView );
230 var
231 i: Integer;
232 Node: TTreeNode;
233 Item: TFavoriteThreadItem;
234 begin
235 TreeView.Items.BeginUpdate;
236 try
237 TreeView.Items.Clear;
238 for i := 0 to Self.Count - 1 do begin
239 Item := TFavoriteThreadItem(Self[i]);
240 Node := TreeView.Items.Add(nil, Item.Title);
241 {
242 if Item.Item.NewArrival then begin
243 Node.ImageIndex := ITEM_ICON_THREADNEW1;
244 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
245 end else begin
246 Node.ImageIndex := ITEM_ICON_THREADLOG1;
247 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
248 end;
249 }
250 // 莢??激???????????????? NewArrival ?????с??????茵??????
251 // ??tem.Item ?????????c? dat ????粋昭?帥??綽?荀???????
252 Node.ImageIndex := ITEM_ICON_THREADLOG1;
253 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
254 Node.Data := Item;
255 end;
256 finally
257 TreeView.Items.EndUpdate;
258 end;
259 end;
260
261 end.

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26