OSDN Git Service

GikoFormの整理
[gikonavigoeson/gikonavi.git] / ListViewUtils.pas
1 unit ListViewUtils;
2
3 interface
4
5 uses
6         Windows, Messages, SysUtils, Classes, Graphics, Controls,
7         BoardGroup, StdCtrls, ComCtrls;
8
9 type
10         TListViewUtils = class(TObject)
11         private
12                 {Private \90é\8c¾}
13         public
14                 {Public \90é\8c¾}
15                 class procedure SetBoardTreeNode(inBBS : TBBS; treeView: TTreeView);
16                 class function SetCategoryListItem(ABBS2ch: TBBS; ListView: TListView;
17                         NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
18                 class procedure ListViewSort(Sender: TObject; ListView: TListView; Column: TListColumn;
19                         NumberVisible: Boolean; var vSortOrder: Boolean;        var vSortIndex: Integer);
20                 class function  ActiveListTrueColumn( column : TListColumn ) : TListColumn;
21                 class function SetBoardListItem(Category: TCategory; ListView: TListView;
22                         NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
23                 class function SetThreadListItem(Board: TBoard; ListView: TListView;
24                         NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
25                 class procedure ListViewData(Sender: TObject; Item: TListItem);
26
27         end;
28
29
30 implementation
31
32 uses
33         GikoSystem, Sort, Setting, Giko, MojuUtils;
34
35 const
36         //\83c\83\8a\81[\81E\83\8a\83X\83g\83A\83C\83R\83\93
37         ITEM_ICON_2CH1                                  = 0;            //2ch\83A\83C\83R\83\93
38         ITEM_ICON_2CH2                                  = 1;            //2ch\83A\83C\83R\83\93
39         ITEM_ICON_CATEGORY1                     = 2;            //\83J\83e\83S\83\8a\83A\83C\83R\83\93
40         ITEM_ICON_CATEGORY2                     = 3;            //\83J\83e\83S\83\8a\83A\83C\83R\83\93
41         ITEM_ICON_BOARD_NOSUBJECT       = 3;    //\93Ç\82Ý\8d\9e\82Ü\82ê\82Ä\82¢\82È\82¢\94Â\83A\83C\83R\83\93
42         ITEM_ICON_BOARD1                                = 4;            //\94Â\83A\83C\83R\83\93
43         ITEM_ICON_BOARD2                                = 5;            //\94Â\83A\83C\83R\83\93
44         ITEM_ICON_THREADLOG1            = 6;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82 \82è\81j
45         ITEM_ICON_THREADLOG2            = 7;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82 \82è\81j
46         ITEM_ICON_THREAD1                               = 8;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82È\82µ\81j
47         ITEM_ICON_THREAD2                               = 9;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82È\82µ\81j
48         ITEM_ICON_THREADNEW1            = 10;           //\83X\83\8c\83A\83C\83R\83\93\81i\90V\92\85\81j
49         ITEM_ICON_THREADNEW2            = 11;           //\83X\83\8c\83A\83C\83R\83\93\81i\90V\92\85\81j
50         ITEM_ICON_SORT1                                 = 12;           //\83\\81[\83g\83A\83C\83R\83\93
51         ITEM_ICON_SORT2                                 = 13;           //\83\\81[\83g\83A\83C\83R\83\93
52         ITEM_ICON_BOARD_LOG                     = 17;           //\83X\83\8c\83\8d\83O\82 \82è\94Â\83A\83C\83R\83\93
53         ITEM_ICON_BOARD_NEW                     = 18;           //\83X\83\8c\90V\92\85\94Â\83A\83C\83R\83\93
54
55
56 //\83{\81[\83h\83c\83\8a\81[\90Ý\92è
57 class procedure TListViewUtils.SetBoardTreeNode(
58         inBBS : TBBS;
59         treeView : TTreeView
60 );
61 var
62         i, j, k: integer;
63         Root: TTreeNode;
64         CategoryNode: TTreeNode;
65         BoardNode: TTreeNode;
66         Category: TCategory;
67         Board: TBoard;
68 begin
69         // \94Â\83\8a\83X\83g\82Ì\90Ý\92è
70         //FActiveBBS := inBBS;
71         TreeView.Items.BeginUpdate;
72         TreeView.Items.Clear;
73         try
74                 if not inBBS.IsBoardFileRead then
75                         GikoSys.ReadBoardFile( inBBS );
76
77                 // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
78                 if ( GikoSys.Setting.BBSSortIndex <> 0 ) or ( GikoSys.Setting.BBSSortOrder <> true ) then begin
79                         Sort.SortOrder := true;
80                         Sort.SortIndex := 0;
81                         Sort.SortNoFlag := true;
82                         inBBS.Sort(CategorySortProc);
83                 end;
84
85                 Root                                                            := TreeView.Items.Add( nil, inBBS.Title );
86                 Root.ImageIndex                 := ITEM_ICON_2CH1;
87                 Root.SelectedIndex      := ITEM_ICON_2CH2;
88                 Root.Data                                               := inBBS;
89                 for i := inBBS.Count - 1 downto 0 do begin
90                         Category := TCategory(inBBS.Items[i]);
91                         CategoryNode := TreeView.Items.AddChildFirst(Root, Category.Title);
92                         CategoryNode.Data := Category;
93                         CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
94                         CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
95
96                         // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
97                         if ( GikoSys.Setting.CategorySortIndex <> 0 ) or ( GikoSys.Setting.CategorySortOrder <> true ) then begin
98                                 Sort.SortOrder := true;
99                                 Sort.SortIndex := 0;
100                                 Sort.SortNoFlag := true;
101                                 Category.CustomSort(BoardSortProc);
102                         end;
103
104                         for j := Category.Count - 1 downto 0 do begin
105                                 Board := TBoard(Category.Items[j]);
106                                 Board.BeginUpdate;
107                                 BoardNode := TreeView.Items.AddChildFirst(CategoryNode, Board.Title);
108                                 BoardNode.Data := Board;
109                                 //if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then begin
110                                 if not Board.IsLogFile then begin
111                                         BoardNode.ImageIndex := ITEM_ICON_BOARD_NOSUBJECT;
112                                         BoardNode.SelectedIndex := ITEM_ICON_BOARD_NOSUBJECT;
113                                 end else begin
114                                         BoardNode.ImageIndex := ITEM_ICON_BOARD1;
115                                         BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
116                                         for k := 0 to Board.Count - 1 do begin
117                                                 if Board.Items[ k ].IsLogFile then begin
118                                                         BoardNode.ImageIndex := ITEM_ICON_BOARD_LOG;
119                                                         BoardNode.SelectedIndex := ITEM_ICON_BOARD_LOG;
120
121                                                         Break;
122                                                 end;
123                                         end;
124                                 end;
125                                 Board.EndUpdate;
126                         end;
127
128                         CategoryNode.Expanded := Category.NodeExpand;
129
130                 end;
131         finally
132                 TreeView.Items.EndUpdate;
133         end;
134 end;
135
136 //ListView\82É\83J\83e\83S\83\8a\82ð\90Ý\92è\82·\82é
137 class function TListViewUtils.SetCategoryListItem(
138         ABBS2ch: TBBS;
139         ListView: TListView;
140         NumberVisible: Boolean;
141         var vSortIndex: Integer;
142         var vSortOrder: Boolean
143 ): Integer;
144 var
145         TitleColumn     : TListColumn;
146         ListColumn      : TListColumn;
147         i, id, idx      : Integer;
148 begin
149         ListView.Items.BeginUpdate;
150         try
151                 ListView.Columns.Clear;
152                 TitleColumn := ListView.Columns.Add;
153                 TitleColumn.Caption := GikoBBSColumnCaption[ Ord( gbbscTitle ) ];
154                 TitleColumn.Width := GikoSys.Setting.BBSColumnWidth[ Ord( gbbscTitle ) ];
155                 idx := 0;
156                 for i := 0 to GikoSys.Setting.BBSColumnOrder.Count - 1 do begin
157                         if GikoSys.Setting.BBSColumnOrder[ i ] = gbbscTitle then begin
158                                 TitleColumn.Tag := i;
159                                 idx := i;
160                         end else begin
161                                 id := Ord( GikoSys.Setting.BBSColumnOrder[ i ] );
162                                 if (Integer( Low( TGikoBBSColumnID ) ) <= id) and
163                                         (id <= Integer( High( TGikoBBSColumnID ) )) then begin
164                                         ListColumn := ListView.Columns.Add;
165         //                                      ListColumn.Tag := id;
166                                                 ListColumn.Tag := i;
167                                         ListColumn.Caption := GikoBBSColumnCaption[ id ];
168                                         ListColumn.Width := GikoSys.Setting.BBSColumnWidth[ id ];
169                                 end;
170                         end;
171                 end;
172                 TitleColumn.Index := idx;
173
174                 ListView.Items.Count := 0;
175                 ListView.Items.Clear;
176                 ListView.Items.Count := ABBS2ch.Count;
177
178                 GikoForm.ListNameLabel.Caption := ABBS2ch.Title;
179                 GikoForm.FolderImage.Picture := nil;
180                 GikoForm.ItemIcon16.GetBitmap(1, GikoForm.FolderImage.Picture.Bitmap);
181
182                 vSortIndex := GikoSys.Setting.BBSSortIndex;
183                 vSortOrder := GikoSys.Setting.BBSSortOrder;
184                 for i := ListView.Columns.Count - 1 downto 0 do begin
185                         idx := ListView.Column[ i ].Tag;
186                         if vSortIndex = Ord( GikoSys.Setting.BBSColumnOrder[ idx ] ) then
187                                 ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
188                 end;
189
190                 Result := ABBS2ch.Count;
191         finally
192                 ListView.Items.EndUpdate;
193         end;
194 end;
195
196 class procedure TListViewUtils.ListViewSort(
197         Sender: TObject;
198         ListView: TListView;
199         Column: TListColumn;
200         NumberVisible: Boolean;
201         var vSortOrder: Boolean;
202         var vSortIndex: Integer
203 );
204 var
205         i, id, idx      : Integer;
206         orderList               : TList;
207         wkBBS: TBBS;
208         wkCategory: TCategory;
209         wkBoard: TBoard;
210 begin
211         idx := ActiveListTrueColumn( Column ).Tag;
212
213         for i := 0 to ListView.Columns.Count - 1 do begin
214                 ListView.Column[i].ImageIndex := -1;
215         end;
216
217         if SortOrder then
218                 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT1
219         else
220                 ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
221
222         Sort.SortNoFlag := NumberVisible;
223
224         //if TObject(TreeView.Selected.Data) is TBBS then begin
225         if TObject( GikoForm.ActiveList ) is TBBS then begin
226                 //wkBBS := TBBS(TreeView.Selected.Data);
227                 wkBBS := TBBS( GikoForm.ActiveList );
228                 orderList := GikoSys.Setting.BBSColumnOrder;
229                 id := Integer( orderList[ idx ] );
230                 Sort.SortOrder := vSortOrder;
231                 Sort.SortIndex := id;
232                 GikoSys.Setting.BBSSortIndex := id;
233                 GikoSys.Setting.BBSSortOrder := vSortOrder;
234                 wkBBS.Sort(Sort.CategorySortProc);
235         //end else if TObject(TreeView.Selected.Data) is TCategory then begin
236         end else if TObject( GikoForm.ActiveList ) is TCategory then begin
237                 //wkCategory := TCategory(TreeView.Selected.Data);
238                 wkCategory := TCategory( GikoForm.ActiveList );
239                 orderList := GikoSys.Setting.CategoryColumnOrder;
240                 id := Integer( orderList[ idx ] );
241                 Sort.SortOrder := vSortOrder;
242                 Sort.SortIndex := id;
243                 GikoSys.Setting.CategorySortIndex := id;
244                 GikoSys.Setting.CategorySortOrder := vSortOrder;
245                 wkCategory.CustomSort(BoardSortProc);
246         //end else if TObject(TreeView.Selected.Data) is TBoard then begin
247         end else if TObject( GikoForm.ActiveList ) is TBoard then begin
248                 //wkBoard := TBoard(TreeView.Selected.Data);
249                 wkBoard := TBoard( GikoForm.ActiveList );
250                 orderList := GikoSys.Setting.BoardColumnOrder;
251                 id := Integer( orderList[ idx ] );
252                 Sort.SortOrder := vSortOrder;
253                 Sort.SortIndex := id;
254                 GikoSys.Setting.BoardSortIndex := id;
255                 GikoSys.Setting.BoardSortOrder := vSortOrder;
256                 wkBoard.CustomSort(ThreadItemSortProc);
257         end else begin
258                 id := 0;
259         end;
260
261         ListView.Refresh;
262         vSortIndex := id;
263 end;
264
265 {!
266 \brief          ListView \82Ì Column \82ð\90^\82Ì\83J\83\89\83\80\82É\95Ï\8a·
267
268 Delphi 6 Personal \82Å\82Ì ListView \82Å\82Í ListViewColumnClick \83C\83x\83\93\83g\82Å
269 \90³\82µ\82¢\83J\83\89\83\80\82ª\93n\82³\82ê\82È\82¢\82½\82ß\81A\90³\82µ\82¢\83J\83\89\83\80\82É\95Ï\8a·\82µ\82Ü\82·\81B
270 }
271 class function  TListViewUtils.ActiveListTrueColumn( column : TListColumn ) : TListColumn;
272 {*
273 var
274         i, idx          : Integer;
275         orderList       : TList;
276 *}
277 begin
278
279         // \90³\82µ\82­\95Ï\8a·\82·\82é\95û\96@\82ª\95ª\82©\82ç\82È\82¢\82Ì\82Å\95Û\97¯
280         Result := column;
281         Exit;
282 {*
283         Result := column;
284
285         if TObject( FActiveList ) is TBBS then
286                 orderList := GikoSys.Setting.BBSColumnOrder
287         else if TObject( FActiveList ) is TCategory then
288                 orderList := GikoSys.Setting.CategoryColumnOrder
289         else if TObject( FActiveList ) is TBoard then
290                 orderList := GikoSys.Setting.BoardColumnOrder
291         else
292                 Exit;
293
294         idx := column.Tag;
295
296         for i := 0 to ListView.Columns.Count - 1 do begin
297                 if Integer( orderList[ ListView.Column[ i ].Tag ] ) = 0 then begin
298                         if idx = 0 then
299                                 Result := ListView.Column[ i ]
300                         else if idx <= i then
301                                 Result := ListView.Column[ idx - 1 ];
302                         Exit;
303                 end;
304         end;
305 *}
306
307 end;
308 //ListView\82ÉBoardItem\82ð\90Ý\92è\82·\82é
309 class function TListViewUtils.SetBoardListItem(
310         Category: TCategory;
311         ListView: TListView;
312         NumberVisible: Boolean;
313         var vSortIndex: Integer;
314         var vSortOrder: Boolean
315 ): Integer;
316 var
317         TitleColumn     : TListColumn;
318         ListColumn      : TListColumn;
319         i, id, idx      : Integer;
320 begin
321         ListView.Items.BeginUpdate;
322         try
323                 ListView.Columns.Clear;
324                 TitleColumn := ListView.Columns.Add;
325                 TitleColumn.Caption := GikoCategoryColumnCaption[ Ord( gccTitle ) ];
326                 TitleColumn.Width := GikoSys.Setting.CategoryColumnWidth[ Ord( gccTitle ) ];
327                 idx := 0;
328                 for i := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
329                         if GikoSys.Setting.CategoryColumnOrder[ i ] = gccTitle then begin
330                                 TitleColumn.Tag := i;
331                                 idx := i;
332                         end else begin
333                                 id := Ord( GikoSys.Setting.CategoryColumnOrder[ i ] );
334                                 if (Integer( Low( TGikoCategoryColumnID ) ) <= id) and
335                                         (id <= Integer( High( TGikoCategoryColumnID ) )) then begin
336                                         ListColumn := ListView.Columns.Add;
337 //                                              ListColumn.Tag := id;
338                                         ListColumn.Tag := i;
339                                         ListColumn.Caption := GikoCategoryColumnCaption[ id ];
340                                         ListColumn.Width := GikoSys.Setting.CategoryColumnWidth[ id ];
341                                 end;
342                         end;
343                 end;
344                 TitleColumn.Index := idx;
345
346                 ListView.Items.Count := 0;
347                 ListView.Items.Clear;
348                 ListView.Items.Count := Category.Count;
349
350                 for i := Category.Count - 1 downto 0 do begin
351                         if( Category.Items[i].ParentCategory <> Category ) then begin
352                                 Category.Items[i].ParentCategory        := Category;
353                                 Category.Items[i].No                            := i + 1;
354                         end;
355                 end;
356 //              UpFolderAction.Enabled := True;
357 //              AllItemAction.Enabled := False;
358 //              LogItemAction.Enabled := False;
359 //              NewItemAction.Enabled := False;
360 //              SelectItemAction.Enabled := False;
361 //              ListDownloadToolButton.Enabled := False;
362 //              BoardReservToolButton.Enabled := False;
363 //              ListThreadDownloadToolButton.Enabled := False;
364
365                 GikoForm.ListNameLabel.Caption := Category.Title;
366                 GikoForm.FolderImage.Picture := nil;
367                 GikoForm.ItemIcon16.GetBitmap(3, GikoForm.FolderImage.Picture.Bitmap);
368
369                 vSortIndex := GikoSys.Setting.CategorySortIndex;
370                 vSortOrder := GikoSys.Setting.CategorySortOrder;
371                 for i := ListView.Columns.Count - 1 downto 0 do begin
372                         idx := ListView.Column[ i ].Tag;
373                         if vSortIndex = Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] ) then
374                                 ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
375                 end;
376
377                 Result := Category.Count;
378         finally
379                 ListView.Items.EndUpdate;
380         end;
381 end;
382 //ListView\82ÉThreadItem\82ð\90Ý\92è\82·\82é
383 class function TListViewUtils.SetThreadListItem(
384         Board: TBoard;
385         ListView: TListView;
386         NumberVisible: Boolean;
387         var vSortIndex: Integer;
388         var vSortOrder: Boolean
389 ): Integer;
390 var
391         TitleColumn     : TListColumn;
392         ListColumn      : TListColumn;
393         i, id, idx      : Integer;
394 begin
395         ListView.Items.BeginUpdate;
396         try
397                 //Screen.Cursor := crHourGlass;
398
399 {*
400                 // \83`\83\89\82Â\82«\96h\8e~\82Ì\82½\82ß\81A\95Ï\8dX\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82Ì\82Ý
401                 // \81¦\96¼\8fÌ\82Í\88á\82¤\82ª\83J\83\89\83\80\90\94\82ª\93¯\82\81A\82Æ\82¢\82Á\82½\8fê\8d\87\82É\91Î\8f\88\82Å\82«\82È\82¢\82Ì\82Å\92\8d\88Ó
402                 if ListView.Columns.Count <> GikoSys.Setting.BoardColumnOrder.Count then
403 *}
404                 begin
405                         ListView.Columns.Clear;
406                         TitleColumn := ListView.Columns.Add;
407                         TitleColumn.Caption := GikoBoardColumnCaption[ Ord( gbcTitle ) ];
408                         TitleColumn.Width := GikoSys.Setting.BoardColumnWidth[ Ord( gbcTitle ) ];
409                         idx := 0;
410                         for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
411                                 if GikoSys.Setting.BoardColumnOrder[ i ] = gbcTitle then begin
412                                         TitleColumn.Tag := i;
413                                         idx := i;
414                                 end else begin
415                                         id := Ord( GikoSys.Setting.BoardColumnOrder[ i ] );
416                                         if (Integer( Low( TGikoBoardColumnID ) ) <= id) and
417                                                 (id <= Integer( High( TGikoBoardColumnID ) )) then begin
418                                                 ListColumn := ListView.Columns.Add;
419                                                 ListColumn.Caption := GikoBoardColumnCaption[ id ];
420         //                                      ListColumn.Tag := id;
421                                                 ListColumn.Tag := i;
422                                                 ListColumn.Width := GikoSys.Setting.BoardColumnWidth[ id ];
423                                                 ListColumn.Alignment := GikoBoardColumnAlignment[ id ];
424                                         end;
425                                 end;
426                         end;
427                         TitleColumn.Index := idx;
428                 end;
429
430                 ListView.Items.Count := 0;
431                 ListView.Items.Clear;
432
433                 {case GikoForm.ViewType of
434                         gvtAll: ListView.Items.Count := Board.Count;
435                         gvtLog: ListView.Items.Count := Board.GetLogThreadCount;
436                         gvtNew: ListView.Items.Count := Board.GetNewThreadCount;
437                         gvtUser: ListView.Items.Count := Board.GetUserThreadCount;
438                 end;
439                 }
440                 case GikoForm.ViewType of
441                         gvtAll: ListView.Items.Count := Board.Count;
442                         gvtLog:
443                         begin
444                                 Board.LogThreadCount := Board.GetLogThreadCount;
445                                 ListView.Items.Count := Board.LogThreadCount;
446                         end;
447                         gvtNew:
448                         begin
449                                 Board.NewThreadCount := Board.GetNewThreadCount;
450                                 ListView.Items.Count := Board.NewThreadCount;
451                         end;
452                         gvtUser:
453                         begin
454                                 Board.UserThreadCount:= Board.GetUserThreadCount;
455                                 ListView.Items.Count := Board.UserThreadCount;
456                         end;
457                 end;
458
459                 GikoForm.ListNameLabel.Caption := Board.Title;
460                 GikoForm.FolderImage.Picture := nil;
461                 GikoForm.ItemIcon16.GetBitmap(5, GikoForm.FolderImage.Picture.Bitmap);
462
463                 vSortIndex := GikoSys.Setting.BoardSortIndex;
464                 vSortOrder := GikoSys.Setting.BoardSortOrder;
465                 for i := ListView.Columns.Count - 1 downto 0 do begin
466                         idx := ListView.Column[ i ].Tag;
467                         if vSortIndex = Ord( GikoSys.Setting.BoardColumnOrder[ idx ] ) then
468                                 ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
469                 end;
470
471                 Result := Board.Count;
472         finally
473                 ListView.Items.EndUpdate;
474         end;
475 end;
476
477 class procedure TListViewUtils.ListViewData(Sender: TObject; Item: TListItem);
478 var
479 //      FileName: string;
480 //      DateTime: TDateTime;
481         BoardCnt: Integer;
482         BBS: TBBS;
483         Category: TCategory;
484         Board: TBoard;
485         ThreadItem: TThreadItem;
486         RepStr: string;
487                 ActivListObj : TObject;
488         i, idx : Integer;
489         ListView : TListView;
490 begin
491         if (Sender <> nil) and (Sender is TListView) then begin
492                 ListView := TListView(Sender)
493         end else begin
494                 Exit;
495         end;
496
497         ActivListObj := GikoForm.ActiveList;
498         if ActivListObj is TBBS then begin
499                 //===== \83J\83e\83S\83\8a\83\8a\83X\83g =====
500                 BBS := TBBS(ActivListObj);
501
502                 GikoForm.ListView.StateImages := nil;
503
504                 if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
505                         or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
506                         or (not (BBS.Items[Item.index] is TCategory)) then Exit;
507                 //if BBS.Count <= 0 then Exit;
508                 //if Item = nil then Exit;
509                 //if Item.Index >= BBS.Count then Exit;
510                 //if ListView.Items.Count = 0 then Exit;
511
512                 //if not (BBS.Items[Item.index] is TCategory) then Exit;
513                 Category := TCategory(BBS.Items[Item.index]);
514
515                 if Category = nil then Exit;
516
517                 if GikoForm.ListNumberVisibleAction.Checked then
518                         Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
519                 else
520                         Item.Caption := Category.Title;
521
522                 Item.ImageIndex := ITEM_ICON_CATEGORY1;
523                 Item.Data := Category;
524
525         end else if ActivListObj is TCategory then begin
526
527                 //===== \94Â\83\8a\83X\83g =====
528                 Category := TCategory(ActivListObj);
529
530                 ListView.StateImages := nil;
531
532                 if (Category = nil) or (Category.Count <= 0) or (Item = nil)
533                         or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
534                         or (not (Category.Items[Item.Index] is TBoard))  then Exit;
535                 //if Category.Count <= 0 then Exit;
536                 //if Item = nil then Exit;
537                 //if Item.Index >= Category.Count then Exit;
538                 //if ListView.Items.Count = 0 then Exit;
539
540                 //if not (Category.Items[Item.Index] is TBoard) then Exit;
541                 Board := TBoard(Category.Items[Item.Index]);
542
543                 if Board = nil then Exit;
544
545                 if GikoForm.ListNumberVisibleAction.Checked then
546                         Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
547                         //Item.Caption := IntToStr(Item.Index + 1) + ': ' + Board.Title
548                 else
549                         Item.Caption := Board.Title;
550
551                 if Item.SubItems.Count <> ListView.Columns.Count then begin
552                         Item.SubItems.Clear;
553                         Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
554                         for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
555                                 Item.SubItems.Add('');
556                 end;
557
558                 Item.ImageIndex := ITEM_ICON_BOARD1;
559                 idx := 0;
560                 for i := 0 to ListView.Columns.Count - 1 do begin
561                         if GikoSys.Setting.CategoryColumnOrder.Count <= i then
562                                 Break;
563 //                              case TGikoCategoryColumnID( ListView.Column[ i ].Tag ) of
564                         case GikoSys.Setting.CategoryColumnOrder[ i ] of
565                         gccTitle:
566                                 // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
567                                 Dec( idx );
568
569                         gccRoundName:
570                                 if Board.Round then
571                                         Item.SubItems[ idx ] := Board.RoundName // '\97\\96ñ'
572                                 else
573                                         Item.SubItems[ idx ] := '';
574
575                         gccLastModified:
576                                 if Board.RoundDate = ZERO_DATE then begin
577                                         Item.SubItems[ idx ] := '';
578                                 end else
579                                         Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
580                         end;
581                         Inc( idx );
582                 end;
583
584                 Item.Data := Board;
585
586         end else if ActivListObj is TBoard then begin
587
588                 //===== \83X\83\8c\83\8a\83X\83g =====
589                 Board := TBoard(ActivListObj);
590
591                 if GikoSys.Setting.ListIconVisible then
592                         ListView.StateImages := GikoForm.StateIconImageList
593                 else
594                         ListView.StateImages := nil;
595
596
597                 case GikoForm.ViewType of
598                         gvtAll: BoardCnt := Board.Count;
599                         gvtLog: BoardCnt := Board.LogThreadCount;
600                         gvtNew: BoardCnt := Board.NewThreadCount;
601                         gvtUser: BoardCnt := Board.UserThreadCount;
602                         else
603                                 BoardCnt := 0;
604                 end;
605                 {
606                 case GikoForm.ViewType of
607                         gvtAll: BoardCnt := Board.Count;
608                         gvtLog: BoardCnt := Board.GetLogThreadCount;
609                         gvtNew: BoardCnt := Board.GetNewThreadCount;
610                         gvtUser: BoardCnt := Board.GetUserThreadCount;
611                         else
612                                 BoardCnt := 0;
613                 end;
614                 }
615 //              if Board = nil then Exit;
616                 if (BoardCnt <= 0) or (Item = nil) or (Item.Index > BoardCnt)
617                         or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
618
619                 //\89ü\91P\82·\82×\82«\83u\83\8d\83b\83N/////////////////////////////////////////////////////
620                 ThreadItem := nil;
621                 case GikoForm.ViewType of
622                         gvtAll: if Item.Index >= Board.Count then Exit else
623                                                                 ThreadItem := TThreadItem(Board.Items[Item.Index]);
624                         gvtLog:         ThreadItem := Board.GetLogThread(Item.Index);
625                         gvtNew:         ThreadItem := Board.GetNewThread(Item.Index);
626                         gvtUser:        ThreadItem := Board.GetUserThread(Item.Index);
627                 end;
628                 //////////////////////////////////////////////////////////////////////////
629                 
630                 if ThreadItem = nil then Exit;
631
632                 RepStr := CustomStringReplace(ThreadItem.Title, '&lt;', '<' );
633                 RepStr := CustomStringReplace(RepStr, '&gt;', '>' );
634                 RepStr := CustomStringReplace(RepStr, '&quot;', '"' );
635                 RepStr := CustomStringReplace(RepStr, '&amp;', '&' );
636                 //RepStr := StringReplace(RepStr, '\81\97\81M', ',', [rfReplaceAll]);
637                 if Item.SubItems.Count <> ListView.Columns.Count then begin
638                         Item.SubItems.Clear;
639                         Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
640                         for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
641                                 Item.SubItems.Add('');
642                 end;
643
644                 if GikoForm.ListNumberVisibleAction.Checked then
645                         Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
646                 else
647                         Item.Caption := RepStr;
648
649                 case ThreadItem.AgeSage of
650                         gasNone: Item.StateIndex := -1;
651                         gasNew: Item.StateIndex := 0;
652                         gasAge: Item.StateIndex := 1;
653                         gasSage: Item.StateIndex := 2;
654                 end;
655
656                 if ThreadItem.IsLogFile then begin
657                         idx := 0;
658                         for i := 0 to ListView.Columns.Count - 1 do begin
659                         if GikoSys.Setting.BoardColumnOrder.Count <= i then
660                                 Break;
661 //                              case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
662                                 case GikoSys.Setting.BoardColumnOrder[ i ] of
663                                 gbcTitle:
664                                         // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
665                                         Dec( idx );
666
667                                 gbcAllCount:
668                                         Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
669
670                                 gbcLocalCount:
671                                         Item.SubItems[ idx ] := IntToStr(ThreadItem.Count);
672
673                                 gbcNonAcqCount:
674                                         Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount - ThreadItem.Count);
675
676                                 gbcNewCount:
677                                         if ThreadItem.NewResCount = 0 then
678                                                 Item.SubItems[ idx ] := ''
679                                         else
680                                                 Item.SubItems[ idx ] := IntToStr(ThreadItem.NewResCount);
681
682                                 gbcUnReadCount:
683                                         Item.SubItems[ idx ] := '';
684
685                                 gbcRoundName:
686                                         if ThreadItem.Round then
687                                                 Item.SubItems[ idx ] := ThreadItem.RoundName
688                                         else
689                                                 Item.SubItems[ idx ] := '';
690
691                                 gbcRoundDate://gbcLastModified:
692                                         if (ThreadItem.RoundDate = ZERO_DATE)  then begin
693                                                 Item.SubItems[ idx ] := '';
694                                         end else
695                                                 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
696
697                                 gbcCreated:
698                                         if ThreadItem.CreateDate = ZERO_DATE then begin
699                                                 Item.SubItems[ idx ] := '';
700                                         end else
701                                                 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
702
703                                 gbcLastModified:
704                                         if (ThreadItem.LastModified = ZERO_DATE)  then begin
705                                                 Item.SubItems[ idx ] := '';
706                                         end else
707                                                 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.LastModified);
708
709
710                                 end;
711                                 Inc( idx );
712                         end;
713
714                         if ThreadItem.NewArrival then
715                                 Item.ImageIndex := ITEM_ICON_THREADNEW1
716                         else
717                                 Item.ImageIndex := ITEM_ICON_THREADLOG1;
718
719
720                 end else begin
721                         idx := 0;
722                         for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
723 //                              case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
724                                 case GikoSys.Setting.BoardColumnOrder[ i ] of
725                                 gbcTitle:
726                                         // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
727                                         Dec( idx );
728
729                                 gbcAllCount:
730                                         Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
731
732                                 gbcRoundDate://gbcLastModified:
733                                         Item.SubItems[ idx ] := '';
734
735                                 gbcCreated:
736                                         if ThreadItem.CreateDate = ZERO_DATE then begin
737                                                 Item.SubItems[ idx ] := '';
738                                         end else
739                                                 Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
740
741                                 gbcLastModified:
742                                         Item.SubItems[ idx ] := '';
743
744                                 else
745                                         Item.SubItems[ idx ] := '';
746                                 end;
747                                 Inc( idx );
748                         end;
749                         if ThreadItem.NewArrival then
750                                 Item.ImageIndex := ITEM_ICON_THREADNEW1
751                         else
752                                 Item.ImageIndex := ITEM_ICON_THREAD1;
753                 end;
754
755                 Item.Data := ThreadItem;
756
757         end;
758 end;
759
760 end.