Develop and Download Open Source Software

Browse CVS Repository

Contents of /gikonavigoeson/gikonavi/ListViewUtils.pas

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


Revision 1.11 - (show annotations) (download) (as text)
Mon Feb 18 16:11:02 2008 UTC (16 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_59_0_778, v1_63_1_819, v1_62_0_812, 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_59_0_767, v1_59_1_778, v1_59_0_768, v1_59_0_769, v1_57_1_744, 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_61_0_796, v1_61_0_797, v1_61_0_795, v1_61_0_798, v1_61_0_799, 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_62_0_803, v1_62_0_802, v1_62_0_809, 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, v1_60_1_793, 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_744, v1_61_0_800, 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, Bb62, Bb63, Bb60, Bb61, Bb59, Bb58
Changes since 1.10: +1 -1 lines
File MIME type: text/x-pascal
index、ホネスト熙ャツュ、熙ニ、、、ハ、、、ホ、ヌス、タオ

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

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