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);
28 Giko, GikoSystem, Setting, YofUtils, MojuUtils;
31 ITEM_ICON_THREADLOG1 = 6; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
32 ITEM_ICON_THREADLOG2 = 7; //
\83X
\83\8c\83A
\83C
\83R
\83\93\81i
\83\8d\83O
\82 \82è
\81j
35 function THistoryList.AddHistory(
36 favItem : TFavoriteThreadItem; TreeView : TTreeView;
37 TreeType: TGikoTreeType ): Boolean;
40 Item: TFavoriteThreadItem;
44 if TreeType = gttHistory then
45 TreeView.Selected := nil;
47 for i := 0 to Self.Count - 1 do begin
48 if TObject(Self[i]) is TFavoriteThreadItem then begin
49 Item := TFavoriteThreadItem(Self[i]);
50 if Item.URL = favItem.URL then begin
52 if TreeType = gttHistory then
53 if TreeView.Items.GetFirstNode <> TreeView.Items[ i ] then
54 TreeView.Items[ i ].MoveTo( TreeView.Items.GetFirstNode, naInsert );
61 if Self.Count > 0 then
62 Self.Insert( 0, favItem )
66 while GikoSys.Setting.MaxRecordCount < Self.Count do begin
68 TObject( Self.Items[ i ] ).Free;
72 if TreeType = gttHistory then begin
73 Node := TreeView.Items.Add( nil, favItem.Title );
74 Node.MoveTo( TreeView.Items.GetFirstNode, naInsert );
76 if favItem.NewArrival then begin
77 Node.ImageIndex := ITEM_ICON_THREADNEW1;
78 Node.SelectedIndex := ITEM_ICON_THREADNEW2;
80 Node.ImageIndex := ITEM_ICON_THREADLOG1;
81 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
84 //
\95\89\89×
\82ð
\82©
\82¯
\82½
\82
\82È
\82¢
\82Ì
\82Å NewArrival
\82Ì
\83`
\83F
\83b
\83N
\82ð
\8ds
\82í
\82È
\82¢
85 //
\81¦favItem.Item
\83v
\83\8d\83p
\83e
\83B
\82Í dat
\82Ì
\93Ç
\82Ý
\8d\9e\82Ý
\82ð
\95K
\97v
\82Æ
\82·
\82é
86 Node.ImageIndex := ITEM_ICON_THREADLOG1;
87 Node.SelectedIndex := ITEM_ICON_THREADLOG2;
89 //while GikoSys.Setting.AddressHistoryCount < TreeView.Items.Count do begin
90 while GikoSys.Setting.MaxRecordCount < TreeView.Items.Count do begin
91 i := TreeView.Items.Count - 1;
92 TreeView.Items.Item[ i ].Delete;
97 procedure THistoryList.DeleteHistory( threadItem: TThreadItem;
98 TreeView : TTreeView; TreeType: TGikoTreeType );
103 //
\83L
\83\83\83r
\83l
\83b
\83g
\82É
\97\9a\97ð
\82ª
\95\
\8e¦
\82³
\82ê
\82Ä
\82¢
\82½
\82ç
\81A
104 //
\83L
\83\83\83r
\83l
\83b
\83g
\93à
\82Ì
\83A
\83C
\83e
\83\80\82à
\8dí
\8f\9c\82·
\82é
\81B
105 if (TreeType = gttHistory) then begin
106 node := TreeView.Items.GetFirstNode;
107 while (node <> nil) do begin
108 if ( TFavoriteThreadItem(node.Data).Item = threadItem ) then begin
109 TreeView.Items.Delete(node);
113 node := node.GetNext;
117 for i := 0 to Self.Count - 1 do begin
118 if threadItem = TFavoriteThreadItem( Self.Items[i] ).Item then begin
119 TFavoriteThreadItem( Self.Items[ i ] ).Free;
121 Self.Capacity := Self.Count;
127 procedure THistoryList.Clear;
132 for i := Self.Count - 1 downto 0 do begin
133 if TObject(Self[ i ]) is TFavoriteThreadItem then
134 TFavoriteThreadItem(Self[ i ]).Free
135 else if TObject(Self[ i ]) is TFavoriteBoardItem then
136 TFavoriteBoardItem(Self[ i ]).Free;
142 Self.Capacity := Self.Count;
146 procedure THistoryList.SaveToFile(const FileName: String);
149 saveList : TstringList;
152 saveList := TStringList.Create;
155 Self.Capacity := Self.Count;
156 saveList.Add('<?xml version="1.0" encoding="Shift_JIS" standalone="yes"?>');
157 saveList.Add('<address>');
158 bound := Self.Count - 1;
159 for i := bound downto 0 do begin
160 // title
\82Í
\8d¡
\82Ì
\82Æ
\82±
\82ë
\8eg
\82Á
\82Ä
\82¢
\82È
\82¢
162 '<history url="' + HtmlEncode( TFavoriteThreadItem( Self[ i ] ).URL ) + '"' +
163 ' title="' + HtmlEncode( MojuUtils.Sanitize(TFavoriteThreadItem( Self[ i ] ).Title )) + '"/>');
165 saveList.Add('</address>');
166 saveList.SaveToFile( FileName );
173 procedure THistoryList.LoadFromFile(const FileName: String;
174 TreeView : TTreeView; TreeType: TGikoTreeType);
177 XMLDoc : IXMLDocument;
179 HistoryNode : IXMLNode;
181 favItem : TFavoriteThreadItem;
189 if FileExists( FileName ) then begin
191 XMLDoc := IXMLDocument.Create;
192 //XMLDoc := LoadXMLDocument(FileName);
193 LoadXMLDocument(FileName, XMLDoc);
195 XMLNode := XMLDoc.DocumentElement;
197 if XMLNode.NodeName = 'address' then begin
198 bound := XMLNode.ChildNodes.Count - 1;
199 for i := 0 to bound do begin
200 HistoryNode := XMLNode.ChildNodes[i];
201 if HistoryNode.NodeName = 'history' then begin
202 //if FReadCount >= sl.Count then begin
203 s := Trim(HistoryNode.Attributes['url']);
204 if s <> '' then begin
205 favItem := TFavoriteThreadItem.Create(
206 s, MojuUtils.UnSanitize(HistoryNode.Attributes[ 'title' ]) );
207 if not AddHistory( favItem, TreeView, TreeType ) then
221 rt := GetTickCount - st;
222 Writeln('Runtime(Load Histroy) : ' + IntToStr(rt) + ' ms');