6 Windows, Messages, SysUtils, Classes, Graphics, Controls,
7 BoardGroup, Favorite, ComCtrls, GikoXMLDoc;
10 TGikoTreeType = (gttNone, gtt2ch, gttHistory, gttFavorite);
12 THistoryList = class(TList)
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 );
30 Giko, GikoSystem, Setting, YofUtils, MojuUtils;
33 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
34 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
37 function THistoryList.AddHistory(
38 favItem : TFavoriteThreadItem; TreeView : TTreeView;
39 TreeType: TGikoTreeType ): Boolean;
42 Item: TFavoriteThreadItem;
46 if TreeType = gttHistory then
47 TreeView.Selected := nil;
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
54 if TreeType = gttHistory then
55 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
56 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
63 if Self.Count > 0 then
64 Self.Insert( 0, favItem )
68 while GikoSys.Setting.MaxRecordCount < Self.Count do begin
70 TObject( Self.Items[ i ] ).Free;
74 if TreeType = gttHistory then begin
75 Node := TreeView.Items.Add( nil, favItem.Title );
76 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
78 if favItem.NewArrival then begin
79 Node.ImageIndex := ITEM_ICON_THREADNEW1;
80 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
82 Node.ImageIndex := ITEM_ICON_THREADLOG1;
83 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
86 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
87 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
88 Node.ImageIndex := ITEM_ICON_THREADLOG1;
89 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
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;
99 procedure THistoryList.DeleteHistory( threadItem: TThreadItem;
100 TreeView : TTreeView; TreeType: TGikoTreeType );
105 //
\83L
\83\83\83r
\83l
\83b
\83g
\82É
\97\9a\97ð
\82ª
\95\
\8e¦
\82³
\82ê
\82Ä
\82¢
\82½
\82ç
\81A
106 //
\83L
\83\83\83r
\83l
\83b
\83g
\93à
\82Ì
\83A
\83C
\83e
\83\80\82à
\8dí
\8f\9c\82·
\82é
\81B
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);
115 node := node.GetNext;
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;
123 Self.Capacity := Self.Count;
129 procedure THistoryList.Clear;
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;
144 Self.Capacity := Self.Count;
148 procedure THistoryList.SaveToFile(const FileName: String);
151 saveList : TstringList;
154 saveList := TStringList.Create;
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
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
164 '<history url="' + HtmlEncode( TFavoriteThreadItem( Self[ i ] ).URL ) + '"' +
165 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( Self[ i ] ).Title )) + '"/>');
167 saveList.Add('</address>');
168 saveList.SaveToFile( FileName );
175 procedure THistoryList.LoadFromFile(const FileName: String;
176 TreeView : TTreeView; TreeType: TGikoTreeType);
179 XMLDoc : IXMLDocument;
181 HistoryNode : IXMLNode;
183 favItem : TFavoriteThreadItem;
191 if FileExists( FileName ) then begin
193 XMLDoc := IXMLDocument.Create;
194 //XMLDoc := LoadXMLDocument(FileName);
195 LoadXMLDocument(FileName, XMLDoc);
197 XMLNode := XMLDoc.DocumentElement;
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
223 rt := GetTickCount - st;
224 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');
228 procedure THistoryList.SetTreeNode(
229 TreeView : TTreeView );
233 Item: TFavoriteThreadItem;
235 TreeView.Items.BeginUpdate;
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);
242 if Item.Item.NewArrival then begin
243 Node.ImageIndex := ITEM_ICON_THREADNEW1;
244 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
246 Node.ImageIndex := ITEM_ICON_THREADLOG1;
247 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
250 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
251 //
\81¦Item.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
252 Node.ImageIndex := ITEM_ICON_THREADLOG1;
253 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
257 TreeView.Items.EndUpdate;