Browse CVS Repository
Contents of /gikonavigoeson/gikonavi/HistoryList.pas
Parent Directory
| Revision Log
| 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. |
| |