OSDN Git Service

GikoFormの整理
authorh677 <h677>
Mon, 14 Nov 2005 15:31:48 +0000 (15:31 +0000)
committerh677 <h677>
Mon, 14 Nov 2005 15:31:48 +0000 (15:31 +0000)
Giko.dfm
Giko.pas
ListViewUtils.pas [new file with mode: 0644]
gikoNavi.dpr
gikoNavi.res

index 412296e..a513b74 100644 (file)
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -1,6 +1,6 @@
 object GikoForm: TGikoForm
-  Left = 176
-  Top = 124
+  Left = 69
+  Top = 85
   HorzScrollBar.Visible = False
   VertScrollBar.Visible = False
   AutoScroll = False
@@ -104,7 +104,6 @@ object GikoForm: TGikoForm
           RightClickSelect = True
           ShowRoot = False
           TabOrder = 0
-          OnChanging = TreeViewChanging
           OnClick = TreeViewClick
           OnCollapsed = TreeViewCollapsed
           OnCustomDraw = TreeViewCustomDraw
@@ -131,7 +130,7 @@ object GikoForm: TGikoForm
             Top = 4
             Width = 20
             Height = 17
-            Hint = #38281#12376#12427
+            Hint = #12461#12515#12499#12493#12483#12488#12398#34920#31034#29366#24907#12434#22793#26356#12377#12427
             Anchors = [akRight]
             Flat = True
             Font.Charset = SHIFTJIS_CHARSET
@@ -154,7 +153,7 @@ object GikoForm: TGikoForm
             ShowHint = True
             Spacing = 0
             Transparent = False
-            OnClick = CabinetPanelHide
+            OnClick = CabinetVisibleActionExecute
           end
           object ToolBar1: TToolBar
             Left = 2
@@ -264,7 +263,7 @@ object GikoForm: TGikoForm
             AutoSize = True
             Caption = #25972#29702'...'
             ImageIndex = 1
-            OnClick = ToolButton19Click
+            OnClick = FavoriteArrangeActionExecute
           end
         end
       end
@@ -319,10 +318,6 @@ object GikoForm: TGikoForm
             OnColumnRightClick = ListViewColumnRightClick
             OnCustomDraw = ListViewCustomDraw
             OnCustomDrawItem = ListViewCustomDrawItem
-            OnData = ListViewData
-            OnDataFind = ListViewDataFind
-            OnDataHint = ListViewDataHint
-            OnDataStateChange = ListViewDataStateChange
             OnKeyDown = ListViewKeyDown
             OnKeyUp = ListViewKeyUp
             OnMouseDown = ListViewMouseDown
index 0e4ff9f..5ca4bb1 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -568,16 +568,6 @@ type
     WikiFAQWebPageAction: TAction;
                                procedure FormCreate(Sender: TObject);
                procedure FormDestroy(Sender: TObject);
-               procedure CabinetPanelHide(Sender: TObject);
-               procedure ListViewData(Sender: TObject; Item: TListItem);
-               procedure ListViewDataFind(Sender: TObject; Find: TItemFind;
-                       const FindString: String; const FindPosition: TPoint;
-                       FindData: Pointer; StartIndex: Integer; Direction: TSearchDirection;
-                       Wrap: Boolean; var Index: Integer);
-               procedure ListViewDataHint(Sender: TObject; StartIndex,
-                       EndIndex: Integer);
-               procedure ListViewDataStateChange(Sender: TObject; StartIndex,
-                       EndIndex: Integer; OldState, NewState: TItemStates);
                procedure BrowserStatusTextChange(Sender: TObject;
                        const Text: WideString);
                procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
@@ -586,7 +576,6 @@ type
                procedure ListViewKeyDown(Sender: TObject; var Key: Word;
                        Shift: TShiftState);
                procedure ListViewColumnClick(Sender: TObject; Column: TListColumn);
-               procedure ListViewSort(Sender: TObject; Column: TListColumn);
                procedure MenuToolBarCustomDrawButton(Sender: TToolBar;
                        Button: TToolButton; State: TCustomDrawState;
                        var DefaultDraw: Boolean);
@@ -788,7 +777,6 @@ type
                procedure FavoriteTreeViewDeleteActionExecute(Sender: TObject);
                procedure FavoriteTreeViewRenameActionExecute(Sender: TObject);
                procedure FavoriteTreeViewNewFolderActionExecute(Sender: TObject);
-               procedure ToolButton19Click(Sender: TObject);
                procedure FavoriteTreeViewBrowseFolderActionExecute(Sender: TObject);
                procedure FavoriteTreeViewDblClick(Sender: TObject);
                procedure FavoriteTreeViewLogDeleteActionExecute(Sender: TObject);
@@ -957,12 +945,6 @@ type
                FIsHandledWheel : Boolean;                      ///< \8aù\82É\8eó\82¯\8eæ\82Á\82½ WM_MOUSEWHEEL \82©\82Ç\82¤\82©
                                DiffComp: Boolean;                      //Add by Genyakun \83X\83\8c\82ª\8dX\90V\82³\82ê\82½\82Æ\82«\82ÉTrue\82É\82È\82é
                FOrigenCaption: String;                         //\82¨\8bC\82É\93ü\82è\83c\83\8a\81[\82Ì\83A\83C\83e\83\80\95Ò\8fW\8e\9e\82Ì\95Ò\8fW\91O\82Ì\95\8e\9a\97ñ                              
-               procedure SetBoardTreeNode( inBBS : TBBS );
-               function SetCategoryListItem(ABBS2ch: TBBS): Integer;
-               function SetBoardListItem(Category: TCategory): Integer;
-               function SetThreadListItem(Board: TBoard): Integer;
-//             function GetRoundName(index: integer): string;
-
                procedure DownloadEnd(Sender: TObject; Item: TDownloadItem);
                procedure DownloadMsg(Sender: TObject; Item: TDownloadItem; Msg: string; Icon: TGikoMessageIcon);
                procedure WorkBegin(Sender: TObject; AWorkMode: TWorkMode; const AWorkCountMax: Integer; Number: Integer; const AWorkTitle: string);
@@ -1190,7 +1172,7 @@ implementation
 uses
        About, Option, Round, Splash, Sort, ListSelect, Imm,
        NewBoard, MojuUtils, Clipbrd, GikoBayesian,Y_TextConverter,
-       HTMLCreate;
+       HTMLCreate, ListViewUtils;
 
 const
        CAPTION_NAME: string = '\83M\83R\83i\83r';
@@ -1200,8 +1182,8 @@ const
        //D&D臒l
        DandD_THRESHOLD = 5;    //D&D\82Ìè\87\92l\81ipixcel)
        //\83c\83\8a\81[\81E\83\8a\83X\83g\83A\83C\83R\83\93
-       ITEM_ICON_2CH1                                  = 0;            //2ch\83A\83C\83R\83\93
-       ITEM_ICON_2CH2                                  = 1;            //2ch\83A\83C\83R\83\93
+       //ITEM_ICON_2CH1                                        = 0;            //2ch\83A\83C\83R\83\93
+       //ITEM_ICON_2CH2                                        = 1;            //2ch\83A\83C\83R\83\93
        ITEM_ICON_CATEGORY1                     = 2;            //\83J\83e\83S\83\8a\83A\83C\83R\83\93
        ITEM_ICON_CATEGORY2                     = 3;            //\83J\83e\83S\83\8a\83A\83C\83R\83\93
        ITEM_ICON_BOARD_NOSUBJECT       = 3;    //\93Ç\82Ý\8d\9e\82Ü\82ê\82Ä\82¢\82È\82¢\94Â\83A\83C\83R\83\93
@@ -1668,6 +1650,8 @@ begin
        //ResHint
        FHint := TResPopup.Create(Self);
 
+    ListView.OnData := TListViewUtils.ListViewData;
+
        // \8dÅ\8cã\82É\91I\91ð\82³\82ê\82½\83L\83\83\83r\83l\83b\83g\82Ì\95\9c\8c³
        CabinetVisible( False );
        if GikoSys.Setting.CabinetVisible then begin
@@ -1849,9 +1833,6 @@ begin
        end;
 
 end;
-
-//
-//
 //
 procedure TGikoForm.FormShow(Sender: TObject);
 begin
@@ -2145,13 +2126,6 @@ begin
     LockWindowUpdate(0);
 end;
 
-//\83L\83\83\83r\83l\83b\83g\81~\83{\83^\83\93\83N\83\8a\83b\83N
-procedure TGikoForm.CabinetPanelHide(Sender: TObject);
-begin
-       CabinetVisibleAction.Execute;
-//     CabinetPanelVisible(false);
-end;
-
 // \8ae\8f\8a\82É\82 \82é\83L\83\83\83r\83l\83b\83g\81E BBS \83\81\83j\83\85\81[\82ð\83Z\83b\83g\81^\8dX\90V
 procedure TGikoForm.SetBBSMenu;
 var
@@ -2293,617 +2267,6 @@ begin
        TabsOpenAction.Execute;
 end;
 
-//\83{\81[\83h\83c\83\8a\81[\90Ý\92è
-procedure TGikoForm.SetBoardTreeNode(
-       inBBS : TBBS
-);
-var
-       i, j, k: integer;
-       Root: TTreeNode;
-       CategoryNode: TTreeNode;
-       BoardNode: TTreeNode;
-       Category: TCategory;
-       Board: TBoard;
-begin
-       // \94Â\83\8a\83X\83g\82Ì\90Ý\92è
-       FActiveBBS := inBBS;
-       TreeView.Items.BeginUpdate;
-       TreeView.Items.Clear;
-       try
-               if not inBBS.IsBoardFileRead then
-                       GikoSys.ReadBoardFile( inBBS );
-               try
-                       //if SplashWindow <> nil then
-                               //SplashWindow.ProgressBar.Max := inBBS.Count;
-                       //      SplashWindow.ProgressBar.Max := inBBS.Count + Length(BBSs) * 20;
-               except
-               end;
-
-               // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
-               if ( GikoSys.Setting.BBSSortIndex <> 0 ) or ( GikoSys.Setting.BBSSortOrder <> true ) then begin
-                       Sort.SortOrder := true;
-                       Sort.SortIndex := 0;
-                       Sort.SortNoFlag := true;
-                       inBBS.Sort(CategorySortProc);
-               end;
-
-               Root                                                            := TreeView.Items.Add( nil, inBBS.Title );
-               Root.ImageIndex                 := ITEM_ICON_2CH1;
-               Root.SelectedIndex      := ITEM_ICON_2CH2;
-               Root.Data                                               := inBBS;
-               for i := inBBS.Count - 1 downto 0 do begin
-                       Category := TCategory(inBBS.Items[i]);
-                       CategoryNode := TreeView.Items.AddChildFirst(Root, Category.Title);
-                       CategoryNode.Data := Category;
-                       CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
-                       CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
-
-                       // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
-                       if ( GikoSys.Setting.CategorySortIndex <> 0 ) or ( GikoSys.Setting.CategorySortOrder <> true ) then begin
-                               Sort.SortOrder := true;
-                               Sort.SortIndex := 0;
-                               Sort.SortNoFlag := true;
-                               Category.CustomSort(BoardSortProc);
-                       end;
-
-                       for j := Category.Count - 1 downto 0 do begin
-                               Board := TBoard(Category.Items[j]);
-                               Board.BeginUpdate;
-                               BoardNode := TreeView.Items.AddChildFirst(CategoryNode, Board.Title);
-                               BoardNode.Data := Board;
-                               //if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then begin
-                               if not Board.IsLogFile then begin
-                                       BoardNode.ImageIndex := ITEM_ICON_BOARD_NOSUBJECT;
-                                       BoardNode.SelectedIndex := ITEM_ICON_BOARD_NOSUBJECT;
-                               end else begin
-                                       BoardNode.ImageIndex := ITEM_ICON_BOARD1;
-                                       BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
-                                       for k := 0 to Board.Count - 1 do begin
-                                               if Board.Items[ k ].IsLogFile then begin
-                                                       BoardNode.ImageIndex := ITEM_ICON_BOARD_LOG;
-                                                       BoardNode.SelectedIndex := ITEM_ICON_BOARD_LOG;
-
-                                                       Break;
-                                               end;
-                                       end;
-                               end;
-                               Board.EndUpdate;
-                       end;
-
-                       CategoryNode.Expanded := Category.NodeExpand;
-
-                       //if SplashWindow <> nil then begin
-                       //      SplashWindow.ProgressBar.StepIt;
-                               //Application.ProcessMessages;
-                       //      SplashWindow.Update;
-                       //end;
-               end;
-       finally
-               TreeView.Items.EndUpdate;
-       end;
-end;
-
-function TGikoForm.SetCategoryListItem(ABBS2ch: TBBS): Integer;
-var
-       TitleColumn     : TListColumn;
-       ListColumn      : TListColumn;
-       i, id, idx      : Integer;
-begin
-       ListView.Items.BeginUpdate;
-       try
-               Screen.Cursor := crHourGlass;
-
-               ListView.Columns.Clear;
-               TitleColumn := ListView.Columns.Add;
-               TitleColumn.Caption := GikoBBSColumnCaption[ Ord( gbbscTitle ) ];
-               TitleColumn.Width := GikoSys.Setting.BBSColumnWidth[ Ord( gbbscTitle ) ];
-               idx := 0;
-               for i := 0 to GikoSys.Setting.BBSColumnOrder.Count - 1 do begin
-                       if GikoSys.Setting.BBSColumnOrder[ i ] = gbbscTitle then begin
-                               TitleColumn.Tag := i;
-                               idx := i;
-                       end else begin
-                               id := Ord( GikoSys.Setting.BBSColumnOrder[ i ] );
-                               if (Integer( Low( TGikoBBSColumnID ) ) <= id) and
-                                       (id <= Integer( High( TGikoBBSColumnID ) )) then begin
-                                       ListColumn := ListView.Columns.Add;
-       //                                      ListColumn.Tag := id;
-                                               ListColumn.Tag := i;
-                                       ListColumn.Caption := GikoBBSColumnCaption[ id ];
-                                       ListColumn.Width := GikoSys.Setting.BBSColumnWidth[ id ];
-                               end;
-                       end;
-               end;
-               TitleColumn.Index := idx;
-
-               ListView.Items.Count := 0;
-               ListView.Items.Clear;
-               ListView.Items.Count := ABBS2ch.Count;
-
-//             UpFolderAction.Enabled := False;
-//             AllItemAction.Enabled := False;
-//             LogItemAction.Enabled := False;
-//             NewItemAction.Enabled := False;
-//             SelectItemAction.Enabled := False;
-//             ListDownloadToolButton.Enabled := False;
-//             BoardReservToolButton.Enabled := False;
-//             ListThreadDownloadToolButton.Enabled := False;
-
-               ListNameLabel.Caption := ABBS2ch.Title;
-               FolderImage.Picture := nil;
-               ItemIcon16.GetBitmap(1, FolderImage.Picture.Bitmap);
-
-               FSortIndex := GikoSys.Setting.BBSSortIndex;
-               FSortOrder := GikoSys.Setting.BBSSortOrder;
-               for i := ListView.Columns.Count - 1 downto 0 do begin
-                       idx := ListView.Column[ i ].Tag;
-                       if FSortIndex = Ord( GikoSys.Setting.BBSColumnOrder[ idx ] ) then
-                               ListViewSort( nil, ListView.Column[ i ] );
-               end;
-
-               Result := ABBS2ch.Count;
-       finally
-               Screen.Cursor := crDefault;
-               ListView.Items.EndUpdate;
-       end;
-end;
-
-function TGikoForm.SetBoardListItem(Category: TCategory): Integer;
-var
-       TitleColumn     : TListColumn;
-       ListColumn      : TListColumn;
-       i, id, idx      : Integer;
-begin
-       ListView.Items.BeginUpdate;
-       try
-               Screen.Cursor := crHourGlass;
-
-               ListView.Columns.Clear;
-               TitleColumn := ListView.Columns.Add;
-               TitleColumn.Caption := GikoCategoryColumnCaption[ Ord( gccTitle ) ];
-               TitleColumn.Width := GikoSys.Setting.CategoryColumnWidth[ Ord( gccTitle ) ];
-               idx := 0;
-               for i := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
-                       if GikoSys.Setting.CategoryColumnOrder[ i ] = gccTitle then begin
-                               TitleColumn.Tag := i;
-                               idx := i;
-                       end else begin
-                               id := Ord( GikoSys.Setting.CategoryColumnOrder[ i ] );
-                               if (Integer( Low( TGikoCategoryColumnID ) ) <= id) and
-                                       (id <= Integer( High( TGikoCategoryColumnID ) )) then begin
-                                       ListColumn := ListView.Columns.Add;
-//                                             ListColumn.Tag := id;
-                                       ListColumn.Tag := i;
-                                       ListColumn.Caption := GikoCategoryColumnCaption[ id ];
-                                       ListColumn.Width := GikoSys.Setting.CategoryColumnWidth[ id ];
-                               end;
-                       end;
-               end;
-               TitleColumn.Index := idx;
-
-               ListView.Items.Count := 0;
-               ListView.Items.Clear;
-               ListView.Items.Count := Category.Count;
-
-               for i := Category.Count - 1 downto 0 do begin
-                       if( Category.Items[i].ParentCategory <> Category ) then begin
-                               Category.Items[i].ParentCategory        := Category;
-                               Category.Items[i].No                            := i + 1;
-                       end;
-               end;
-//             UpFolderAction.Enabled := True;
-//             AllItemAction.Enabled := False;
-//             LogItemAction.Enabled := False;
-//             NewItemAction.Enabled := False;
-//             SelectItemAction.Enabled := False;
-//             ListDownloadToolButton.Enabled := False;
-//             BoardReservToolButton.Enabled := False;
-//             ListThreadDownloadToolButton.Enabled := False;
-
-               ListNameLabel.Caption := Category.Title;
-               FolderImage.Picture := nil;
-               ItemIcon16.GetBitmap(3, FolderImage.Picture.Bitmap);
-
-               FSortIndex := GikoSys.Setting.CategorySortIndex;
-               FSortOrder := GikoSys.Setting.CategorySortOrder;
-               for i := ListView.Columns.Count - 1 downto 0 do begin
-                       idx := ListView.Column[ i ].Tag;
-                       if FSortIndex = Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] ) then
-                               ListViewSort( nil, ListView.Column[ i ] );
-               end;
-
-               Result := Category.Count;
-       finally
-               Screen.Cursor := crDefault;
-               ListView.Items.EndUpdate;
-       end;
-end;
-
-function TGikoForm.SetThreadListItem(Board: TBoard): Integer;
-var
-       TitleColumn     : TListColumn;
-       ListColumn      : TListColumn;
-       i, id, idx      : Integer;
-begin
-       ListView.Items.BeginUpdate;
-       try
-               Screen.Cursor := crHourGlass;
-
-{*
-               // \83`\83\89\82Â\82«\96h\8e~\82Ì\82½\82ß\81A\95Ï\8dX\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82Ì\82Ý
-               // \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Ó
-               if ListView.Columns.Count <> GikoSys.Setting.BoardColumnOrder.Count then
-*}
-               begin
-                       ListView.Columns.Clear;
-                       TitleColumn := ListView.Columns.Add;
-                       TitleColumn.Caption := GikoBoardColumnCaption[ Ord( gbcTitle ) ];
-                       TitleColumn.Width := GikoSys.Setting.BoardColumnWidth[ Ord( gbcTitle ) ];
-                       idx := 0;
-                       for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
-                               if GikoSys.Setting.BoardColumnOrder[ i ] = gbcTitle then begin
-                                       TitleColumn.Tag := i;
-                                       idx := i;
-                               end else begin
-                                       id := Ord( GikoSys.Setting.BoardColumnOrder[ i ] );
-                                       if (Integer( Low( TGikoBoardColumnID ) ) <= id) and
-                                               (id <= Integer( High( TGikoBoardColumnID ) )) then begin
-                                               ListColumn := ListView.Columns.Add;
-                                               ListColumn.Caption := GikoBoardColumnCaption[ id ];
-       //                                      ListColumn.Tag := id;
-                                               ListColumn.Tag := i;
-                                               ListColumn.Width := GikoSys.Setting.BoardColumnWidth[ id ];
-                                               ListColumn.Alignment := GikoBoardColumnAlignment[ id ];
-                                       end;
-                               end;
-                       end;
-                       TitleColumn.Index := idx;
-               end;
-
-               ListView.Items.Count := 0;
-               ListView.Items.Clear;
-
-               {case GikoForm.ViewType of
-                       gvtAll: ListView.Items.Count := Board.Count;
-                       gvtLog: ListView.Items.Count := Board.GetLogThreadCount;
-                       gvtNew: ListView.Items.Count := Board.GetNewThreadCount;
-                       gvtUser: ListView.Items.Count := Board.GetUserThreadCount;
-               end;
-               }
-               case GikoForm.ViewType of
-                       gvtAll: ListView.Items.Count := Board.Count;
-                       gvtLog:
-                       begin
-                               Board.LogThreadCount := Board.GetLogThreadCount;
-                               ListView.Items.Count := Board.LogThreadCount;
-                       end;
-                       gvtNew:
-                       begin
-                               Board.NewThreadCount := Board.GetNewThreadCount;
-                               ListView.Items.Count := Board.NewThreadCount;
-                       end;
-                       gvtUser:
-                       begin
-                               Board.UserThreadCount:= Board.GetUserThreadCount;
-                               ListView.Items.Count := Board.UserThreadCount;
-                       end;
-               end;
-
-               ListNameLabel.Caption := Board.Title;
-               FolderImage.Picture := nil;
-               ItemIcon16.GetBitmap(5, FolderImage.Picture.Bitmap);
-
-               FSortIndex := GikoSys.Setting.BoardSortIndex;
-               FSortOrder := GikoSys.Setting.BoardSortOrder;
-               for i := ListView.Columns.Count - 1 downto 0 do begin
-                       idx := ListView.Column[ i ].Tag;
-                       if FSortIndex = Ord( GikoSys.Setting.BoardColumnOrder[ idx ] ) then
-                               ListViewSort( nil, ListView.Column[ i ] );
-               end;
-
-               Result := Board.Count;
-       finally
-               Screen.Cursor := crDefault;
-               ListView.Items.EndUpdate;
-       end;
-end;
-
-procedure TGikoForm.ListViewData(Sender: TObject; Item: TListItem);
-var
-//     FileName: string;
-//     DateTime: TDateTime;
-       BoardCnt: Integer;
-       BBS: TBBS;
-       Category: TCategory;
-       Board: TBoard;
-       ThreadItem: TThreadItem;
-       RepStr: string;
-               ActivListObj : TObject;
-       i, idx : Integer;
-begin
-       ActivListObj := ActiveList;
-       if ActivListObj is TBBS then begin
-               //===== \83J\83e\83S\83\8a\83\8a\83X\83g =====
-               BBS := TBBS(ActivListObj);
-
-               ListView.StateImages := nil;
-
-               if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
-                       or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
-                       or (not (BBS.Items[Item.index] is TCategory)) then Exit;
-               //if BBS.Count <= 0 then Exit;
-               //if Item = nil then Exit;
-               //if Item.Index >= BBS.Count then Exit;
-               //if ListView.Items.Count = 0 then Exit;
-
-               //if not (BBS.Items[Item.index] is TCategory) then Exit;
-               Category := TCategory(BBS.Items[Item.index]);
-
-               if Category = nil then Exit;
-
-               if ListNumberVisibleAction.Checked then
-                       Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
-               else
-                       Item.Caption := Category.Title;
-
-               Item.ImageIndex := ITEM_ICON_CATEGORY1;
-               Item.Data := Category;
-
-       end else if ActivListObj is TCategory then begin
-
-               //===== \94Â\83\8a\83X\83g =====
-               Category := TCategory(ActivListObj);
-
-               ListView.StateImages := nil;
-
-               if (Category = nil) or (Category.Count <= 0) or (Item = nil)
-                       or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
-                       or (not (Category.Items[Item.Index] is TBoard))  then Exit;
-               //if Category.Count <= 0 then Exit;
-               //if Item = nil then Exit;
-               //if Item.Index >= Category.Count then Exit;
-               //if ListView.Items.Count = 0 then Exit;
-
-               //if not (Category.Items[Item.Index] is TBoard) then Exit;
-               Board := TBoard(Category.Items[Item.Index]);
-
-               if Board = nil then Exit;
-
-               if ListNumberVisibleAction.Checked then
-                       Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
-                       //Item.Caption := IntToStr(Item.Index + 1) + ': ' + Board.Title
-               else
-                       Item.Caption := Board.Title;
-
-               if Item.SubItems.Count <> ListView.Columns.Count then begin
-                       Item.SubItems.Clear;
-                       Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
-                       for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
-                               Item.SubItems.Add('');
-               end;
-
-               Item.ImageIndex := ITEM_ICON_BOARD1;
-               idx := 0;
-               for i := 0 to ListView.Columns.Count - 1 do begin
-                       if GikoSys.Setting.CategoryColumnOrder.Count <= i then
-                               Break;
-//                             case TGikoCategoryColumnID( ListView.Column[ i ].Tag ) of
-                       case GikoSys.Setting.CategoryColumnOrder[ i ] of
-                       gccTitle:
-                               // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
-                               Dec( idx );
-
-                       gccRoundName:
-                               if Board.Round then
-                                       Item.SubItems[ idx ] := Board.RoundName // '\97\\96ñ'
-                               else
-                                       Item.SubItems[ idx ] := '';
-
-                       gccLastModified:
-                               if Board.RoundDate = ZERO_DATE then begin
-                                       Item.SubItems[ idx ] := '';
-                               end else
-                                       Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
-                       end;
-                       Inc( idx );
-               end;
-
-               Item.Data := Board;
-
-       end else if ActivListObj is TBoard then begin
-
-               //===== \83X\83\8c\83\8a\83X\83g =====
-               Board := TBoard(ActivListObj);
-
-               if GikoSys.Setting.ListIconVisible then
-                       ListView.StateImages := StateIconImageList
-               else
-                       ListView.StateImages := nil;
-
-
-               case GikoForm.ViewType of
-                       gvtAll: BoardCnt := Board.Count;
-                       gvtLog: BoardCnt := Board.LogThreadCount;
-                       gvtNew: BoardCnt := Board.NewThreadCount;
-                       gvtUser: BoardCnt := Board.UserThreadCount;
-                       else
-                               BoardCnt := 0;
-               end;
-               {
-               case GikoForm.ViewType of
-                       gvtAll: BoardCnt := Board.Count;
-                       gvtLog: BoardCnt := Board.GetLogThreadCount;
-                       gvtNew: BoardCnt := Board.GetNewThreadCount;
-                       gvtUser: BoardCnt := Board.GetUserThreadCount;
-                       else
-                               BoardCnt := 0;
-               end;
-               }
-//             if Board = nil then Exit;
-               if (BoardCnt <= 0) or (Item = nil) or (Item.Index > BoardCnt)
-                       or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
-
-               //\89ü\91P\82·\82×\82«\83u\83\8d\83b\83N/////////////////////////////////////////////////////
-               ThreadItem := nil;
-               case GikoForm.ViewType of
-                       gvtAll: if Item.Index >= Board.Count then Exit else
-                                                               ThreadItem := TThreadItem(Board.Items[Item.Index]);
-                       gvtLog:         ThreadItem := Board.GetLogThread(Item.Index);
-                       gvtNew:         ThreadItem := Board.GetNewThread(Item.Index);
-                       gvtUser:        ThreadItem := Board.GetUserThread(Item.Index);
-               end;
-               //////////////////////////////////////////////////////////////////////////
-               
-               if ThreadItem = nil then Exit;
-
-               RepStr := CustomStringReplace(ThreadItem.Title, '&lt;', '<' );
-               RepStr := CustomStringReplace(RepStr, '&gt;', '>' );
-               RepStr := CustomStringReplace(RepStr, '&quot;', '"' );
-               RepStr := CustomStringReplace(RepStr, '&amp;', '&' );
-               //RepStr := StringReplace(RepStr, '\81\97\81M', ',', [rfReplaceAll]);
-               if Item.SubItems.Count <> ListView.Columns.Count then begin
-                       Item.SubItems.Clear;
-                       Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
-                       for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
-                               Item.SubItems.Add('');
-               end;
-
-               if ListNumberVisibleAction.Checked then
-                       Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
-               else
-                       Item.Caption := RepStr;
-
-               case ThreadItem.AgeSage of
-                       gasNone: Item.StateIndex := -1;
-                       gasNew: Item.StateIndex := 0;
-                       gasAge: Item.StateIndex := 1;
-                       gasSage: Item.StateIndex := 2;
-               end;
-
-               if ThreadItem.IsLogFile then begin
-                       idx := 0;
-                       for i := 0 to ListView.Columns.Count - 1 do begin
-                       if GikoSys.Setting.BoardColumnOrder.Count <= i then
-                               Break;
-//                             case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
-                               case GikoSys.Setting.BoardColumnOrder[ i ] of
-                               gbcTitle:
-                                       // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
-                                       Dec( idx );
-
-                               gbcAllCount:
-                                       Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
-
-                               gbcLocalCount:
-                                       Item.SubItems[ idx ] := IntToStr(ThreadItem.Count);
-
-                               gbcNonAcqCount:
-                                       Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount - ThreadItem.Count);
-
-                               gbcNewCount:
-                                       if ThreadItem.NewResCount = 0 then
-                                               Item.SubItems[ idx ] := ''
-                                       else
-                                               Item.SubItems[ idx ] := IntToStr(ThreadItem.NewResCount);
-
-                               gbcUnReadCount:
-                                       Item.SubItems[ idx ] := '';
-
-                               gbcRoundName:
-                                       if ThreadItem.Round then
-                                               Item.SubItems[ idx ] := ThreadItem.RoundName
-                                       else
-                                               Item.SubItems[ idx ] := '';
-
-                               gbcRoundDate://gbcLastModified:
-                                       if (ThreadItem.RoundDate = ZERO_DATE)  then begin
-                                               Item.SubItems[ idx ] := '';
-                                       end else
-                                               Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
-
-                               gbcCreated:
-                                       if ThreadItem.CreateDate = ZERO_DATE then begin
-                                               Item.SubItems[ idx ] := '';
-                                       end else
-                                               Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
-
-                               gbcLastModified:
-                                       if (ThreadItem.LastModified = ZERO_DATE)  then begin
-                                               Item.SubItems[ idx ] := '';
-                                       end else
-                                               Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.LastModified);
-
-
-                               end;
-                               Inc( idx );
-                       end;
-
-                       if ThreadItem.NewArrival then
-                               Item.ImageIndex := ITEM_ICON_THREADNEW1
-                       else
-                               Item.ImageIndex := ITEM_ICON_THREADLOG1;
-
-
-               end else begin
-                       idx := 0;
-                       for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
-//                             case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
-                               case GikoSys.Setting.BoardColumnOrder[ i ] of
-                               gbcTitle:
-                                       // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
-                                       Dec( idx );
-
-                               gbcAllCount:
-                                       Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
-
-                               gbcRoundDate://gbcLastModified:
-                                       Item.SubItems[ idx ] := '';
-
-                               gbcCreated:
-                                       if ThreadItem.CreateDate = ZERO_DATE then begin
-                                               Item.SubItems[ idx ] := '';
-                                       end else
-                                               Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
-
-                               gbcLastModified:
-                                       Item.SubItems[ idx ] := '';
-
-                               else
-                                       Item.SubItems[ idx ] := '';
-                               end;
-                               Inc( idx );
-                       end;
-                       if ThreadItem.NewArrival then
-                               Item.ImageIndex := ITEM_ICON_THREADNEW1
-                       else
-                               Item.ImageIndex := ITEM_ICON_THREAD1;
-               end;
-
-               Item.Data := ThreadItem;
-
-       end;
-end;
-
-procedure TGikoForm.ListViewDataFind(Sender: TObject; Find: TItemFind;
-       const FindString: String; const FindPosition: TPoint; FindData: Pointer;
-       StartIndex: Integer; Direction: TSearchDirection; Wrap: Boolean;
-       var Index: Integer);
-begin
-
-//
-end;
-
-procedure TGikoForm.ListViewDataHint(Sender: TObject; StartIndex,
-       EndIndex: Integer);
-begin
-//
-end;
-
-procedure TGikoForm.ListViewDataStateChange(Sender: TObject; StartIndex,
-       EndIndex: Integer; OldState, NewState: TItemStates);
-begin
-//
-end;
 
 procedure TGikoForm.BrowserStatusTextChange(Sender: TObject; const Text: WideString);
 var
@@ -3221,69 +2584,7 @@ begin
                FSortOrder := id = 0;
        end;
 
-       ListViewSort(Sender, Column);
-end;
-
-procedure TGikoForm.ListViewSort(Sender: TObject; Column: TListColumn);
-var
-       i, id, idx      : Integer;
-       orderList               : TList;
-       wkBBS: TBBS;
-       wkCategory: TCategory;
-       wkBoard: TBoard;
-begin
-       idx := ActiveListTrueColumn( Column ).Tag;
-
-       for i := 0 to ListView.Columns.Count - 1 do begin
-               ListView.Column[i].ImageIndex := -1;
-       end;
-
-       if FSortOrder then
-               ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT1
-       else
-               ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
-
-       Sort.SortNoFlag := ListNumberVisibleAction.Checked;
-
-       //if TObject(TreeView.Selected.Data) is TBBS then begin
-       if TObject( FActiveList ) is TBBS then begin
-               //wkBBS := TBBS(TreeView.Selected.Data);
-               wkBBS := TBBS( FActiveList );
-               orderList := GikoSys.Setting.BBSColumnOrder;
-               id := Integer( orderList[ idx ] );
-               Sort.SortOrder := FSortOrder;
-               Sort.SortIndex := id;
-               GikoSys.Setting.BBSSortIndex := id;
-               GikoSys.Setting.BBSSortOrder := FSortOrder;
-               wkBBS.Sort(CategorySortProc);
-       //end else if TObject(TreeView.Selected.Data) is TCategory then begin
-       end else if TObject( FActiveList ) is TCategory then begin
-               //wkCategory := TCategory(TreeView.Selected.Data);
-               wkCategory := TCategory( FActiveList );
-               orderList := GikoSys.Setting.CategoryColumnOrder;
-               id := Integer( orderList[ idx ] );
-               Sort.SortOrder := FSortOrder;
-               Sort.SortIndex := id;
-               GikoSys.Setting.CategorySortIndex := id;
-               GikoSys.Setting.CategorySortOrder := FSortOrder;
-               wkCategory.CustomSort(BoardSortProc);
-       //end else if TObject(TreeView.Selected.Data) is TBoard then begin
-       end else if TObject( FActiveList ) is TBoard then begin
-               //wkBoard := TBoard(TreeView.Selected.Data);
-               wkBoard := TBoard( FActiveList );
-               orderList := GikoSys.Setting.BoardColumnOrder;
-               id := Integer( orderList[ idx ] );
-               Sort.SortOrder := FSortOrder;
-               Sort.SortIndex := id;
-               GikoSys.Setting.BoardSortIndex := id;
-               GikoSys.Setting.BoardSortOrder := FSortOrder;
-               wkBoard.CustomSort(ThreadItemSortProc);
-       end else begin
-               id := 0;
-       end;
-
-       ListView.Refresh;
-       FSortIndex := id;
+       TListViewUtils.ListViewSort(Sender, ListView, Column, ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
 end;
 
 procedure TGikoForm.MenuToolBarCustomDrawButton(Sender: TToolBar;
@@ -4039,12 +3340,20 @@ begin
 
 //             ActiveListColumnSave;
 
-               if Obj is TBBS then begin
-                       SetCategoryListItem(TBBS(Obj));
-               end else if Obj is TCategory then begin
-                       SetBoardListItem(TCategory(Obj));
-               end else if Obj is TBoard then begin
-                       SetThreadListItem(TBoard(Obj));
+               Screen.Cursor := crHourGlass;
+               try
+                       if Obj is TBBS then begin
+                               TListViewUtils.SetCategoryListItem(TBBS(obj), ListView, ListNumberVisibleAction.Checked,
+                                                               FSortIndex, FSortOrder);
+                       end else if Obj is TCategory then begin
+                               TListViewUtils.SetBoardListItem(TCategory(Obj), ListView, ListNumberVisibleAction.Checked,
+                                                               FSortIndex, FSortOrder);
+                       end else if Obj is TBoard then begin
+                               TListViewUtils.SetThreadListItem(TBoard(Obj), ListView,  ListNumberVisibleAction.Checked,
+                                                               FSortIndex, FSortOrder);
+                       end;
+               finally
+                       Screen.Cursor := crDefault;
                end;
 
                if idx >= 0  then begin
@@ -4089,8 +3398,6 @@ begin
                end;
 
                SetActiveList(Board);
-               //
-               //SetThreadListItem(Board); //SetActiveList\93à\82Å\8cÄ\82Î\82ê\82é\82©\82ç2\8fd\82É\8cÄ\82Ñ\8fo\82·\95K\97v\82È\82µ
        end;
 end;
 
@@ -4420,7 +3727,7 @@ begin
                if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
                        FTreeType := gtt2ch;
                        HistoryToolBar.Hide;
-                       SetBoardTreeNode( inBBS );
+                       TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
                        TreeView.Items.GetFirstNode.Expanded := True;                           //?c???[?g?b?v???????J??
                        //?c???[??g?b?v?????I????
                        if GetActiveList = nil then
@@ -4477,7 +3784,7 @@ begin
                if (FTreeType <> gtt2ch) or (FActiveBBS <> inBBS) then begin
                        FTreeType := gtt2ch;
                        HistoryToolBar.Hide;
-                       SetBoardTreeNode( inBBS );
+                       TListViewUtils.SetBoardTreeNode(inBBS, TreeView);
                        TreeView.Items.GetFirstNode.Expanded := True;                           //\83c\83\8a\81[\83g\83b\83v\8d\80\96Ú\82¾\82¯\82ð\8aJ\82­
                        //\83c\83\8a\81[\82Ì\83g\83b\83v\8d\80\96Ú\82ð\91I\91ð\82·\82é
                        if GetActiveList = nil then begin
@@ -9749,13 +9056,6 @@ begin
 
 end;
 
-procedure TGikoForm.ToolButton19Click(Sender: TObject);
-begin
-
-       FavoriteArrangeActionExecute( nil );
-       
-end;
-
 procedure TGikoForm.FavoriteBrowseFolder( node: TTreeNode );
 var
        i: Integer;
@@ -11997,7 +11297,7 @@ begin
                if (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT1) or
                        (ListView.Column[ i ].ImageIndex = ITEM_ICON_SORT2) then begin
                        FSortOrder := not FSortOrder;
-                       ListViewSort( nil, ListView.Column[ i ] );
+                       TListViewUtils.ListViewSort( nil, ListView, ListView.Column[ i ], ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
                        break;
                end;
        end;
@@ -12014,7 +11314,7 @@ begin
                        if id > ListView.Columns.Count - 1 then
                                id := 0;
                        FSortOrder := id = 0;
-                       ListViewSort( nil, ListView.Column[ id ] );
+                       TListViewUtils.ListViewSort( nil, ListView, ListView.Column[ id ], ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
                        break;
                end;
        end;
@@ -12031,7 +11331,7 @@ begin
                        if id < 0 then
                                id := ListView.Columns.Count - 1;
                        FSortOrder := id = 0;
-                       ListViewSort( nil, ListView.Column[ id ] );
+                       TListViewUtils.ListViewSort( nil, ListView, ListView.Column[ id ], ListNumberVisibleAction.Checked, FSortOrder, FSortIndex );
                        break;
                end;
        end;
diff --git a/ListViewUtils.pas b/ListViewUtils.pas
new file mode 100644 (file)
index 0000000..b44d089
--- /dev/null
@@ -0,0 +1,760 @@
+unit ListViewUtils;
+
+interface
+
+uses
+       Windows, Messages, SysUtils, Classes, Graphics, Controls,
+       BoardGroup, StdCtrls, ComCtrls;
+
+type
+       TListViewUtils = class(TObject)
+       private
+               {Private \90é\8c¾}
+       public
+               {Public \90é\8c¾}
+               class procedure SetBoardTreeNode(inBBS : TBBS; treeView: TTreeView);
+               class function SetCategoryListItem(ABBS2ch: TBBS; ListView: TListView;
+                       NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
+               class procedure ListViewSort(Sender: TObject; ListView: TListView; Column: TListColumn;
+                       NumberVisible: Boolean; var vSortOrder: Boolean;        var vSortIndex: Integer);
+               class function  ActiveListTrueColumn( column : TListColumn ) : TListColumn;
+               class function SetBoardListItem(Category: TCategory; ListView: TListView;
+                       NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
+               class function SetThreadListItem(Board: TBoard; ListView: TListView;
+                       NumberVisible: Boolean; var vSortIndex: Integer; var vSortOrder: Boolean): Integer;
+               class procedure ListViewData(Sender: TObject; Item: TListItem);
+
+       end;
+
+
+implementation
+
+uses
+       GikoSystem, Sort, Setting, Giko, MojuUtils;
+
+const
+       //\83c\83\8a\81[\81E\83\8a\83X\83g\83A\83C\83R\83\93
+       ITEM_ICON_2CH1                                  = 0;            //2ch\83A\83C\83R\83\93
+       ITEM_ICON_2CH2                                  = 1;            //2ch\83A\83C\83R\83\93
+       ITEM_ICON_CATEGORY1                     = 2;            //\83J\83e\83S\83\8a\83A\83C\83R\83\93
+       ITEM_ICON_CATEGORY2                     = 3;            //\83J\83e\83S\83\8a\83A\83C\83R\83\93
+       ITEM_ICON_BOARD_NOSUBJECT       = 3;    //\93Ç\82Ý\8d\9e\82Ü\82ê\82Ä\82¢\82È\82¢\94Â\83A\83C\83R\83\93
+       ITEM_ICON_BOARD1                                = 4;            //\94Â\83A\83C\83R\83\93
+       ITEM_ICON_BOARD2                                = 5;            //\94Â\83A\83C\83R\83\93
+       ITEM_ICON_THREADLOG1            = 6;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82 \82è\81j
+       ITEM_ICON_THREADLOG2            = 7;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82 \82è\81j
+       ITEM_ICON_THREAD1                               = 8;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82È\82µ\81j
+       ITEM_ICON_THREAD2                               = 9;            //\83X\83\8c\83A\83C\83R\83\93\81i\83\8d\83O\82È\82µ\81j
+       ITEM_ICON_THREADNEW1            = 10;           //\83X\83\8c\83A\83C\83R\83\93\81i\90V\92\85\81j
+       ITEM_ICON_THREADNEW2            = 11;           //\83X\83\8c\83A\83C\83R\83\93\81i\90V\92\85\81j
+       ITEM_ICON_SORT1                                 = 12;           //\83\\81[\83g\83A\83C\83R\83\93
+       ITEM_ICON_SORT2                                 = 13;           //\83\\81[\83g\83A\83C\83R\83\93
+       ITEM_ICON_BOARD_LOG                     = 17;           //\83X\83\8c\83\8d\83O\82 \82è\94Â\83A\83C\83R\83\93
+       ITEM_ICON_BOARD_NEW                     = 18;           //\83X\83\8c\90V\92\85\94Â\83A\83C\83R\83\93
+
+
+//\83{\81[\83h\83c\83\8a\81[\90Ý\92è
+class procedure TListViewUtils.SetBoardTreeNode(
+       inBBS : TBBS;
+       treeView : TTreeView
+);
+var
+       i, j, k: integer;
+       Root: TTreeNode;
+       CategoryNode: TTreeNode;
+       BoardNode: TTreeNode;
+       Category: TCategory;
+       Board: TBoard;
+begin
+       // \94Â\83\8a\83X\83g\82Ì\90Ý\92è
+       //FActiveBBS := inBBS;
+       TreeView.Items.BeginUpdate;
+       TreeView.Items.Clear;
+       try
+               if not inBBS.IsBoardFileRead then
+                       GikoSys.ReadBoardFile( inBBS );
+
+               // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
+               if ( GikoSys.Setting.BBSSortIndex <> 0 ) or ( GikoSys.Setting.BBSSortOrder <> true ) then begin
+                       Sort.SortOrder := true;
+                       Sort.SortIndex := 0;
+                       Sort.SortNoFlag := true;
+                       inBBS.Sort(CategorySortProc);
+               end;
+
+               Root                                                            := TreeView.Items.Add( nil, inBBS.Title );
+               Root.ImageIndex                 := ITEM_ICON_2CH1;
+               Root.SelectedIndex      := ITEM_ICON_2CH2;
+               Root.Data                                               := inBBS;
+               for i := inBBS.Count - 1 downto 0 do begin
+                       Category := TCategory(inBBS.Items[i]);
+                       CategoryNode := TreeView.Items.AddChildFirst(Root, Category.Title);
+                       CategoryNode.Data := Category;
+                       CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
+                       CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
+
+                       // \83L\83\83\83r\83l\83b\83g\95\\8e¦\91O\82É\8dÄ\83\\81[\83g
+                       if ( GikoSys.Setting.CategorySortIndex <> 0 ) or ( GikoSys.Setting.CategorySortOrder <> true ) then begin
+                               Sort.SortOrder := true;
+                               Sort.SortIndex := 0;
+                               Sort.SortNoFlag := true;
+                               Category.CustomSort(BoardSortProc);
+                       end;
+
+                       for j := Category.Count - 1 downto 0 do begin
+                               Board := TBoard(Category.Items[j]);
+                               Board.BeginUpdate;
+                               BoardNode := TreeView.Items.AddChildFirst(CategoryNode, Board.Title);
+                               BoardNode.Data := Board;
+                               //if (Board.LastGetTime = 0) or (Board.LastGetTime = ZERO_DATE) then begin
+                               if not Board.IsLogFile then begin
+                                       BoardNode.ImageIndex := ITEM_ICON_BOARD_NOSUBJECT;
+                                       BoardNode.SelectedIndex := ITEM_ICON_BOARD_NOSUBJECT;
+                               end else begin
+                                       BoardNode.ImageIndex := ITEM_ICON_BOARD1;
+                                       BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
+                                       for k := 0 to Board.Count - 1 do begin
+                                               if Board.Items[ k ].IsLogFile then begin
+                                                       BoardNode.ImageIndex := ITEM_ICON_BOARD_LOG;
+                                                       BoardNode.SelectedIndex := ITEM_ICON_BOARD_LOG;
+
+                                                       Break;
+                                               end;
+                                       end;
+                               end;
+                               Board.EndUpdate;
+                       end;
+
+                       CategoryNode.Expanded := Category.NodeExpand;
+
+               end;
+       finally
+               TreeView.Items.EndUpdate;
+       end;
+end;
+
+//ListView\82É\83J\83e\83S\83\8a\82ð\90Ý\92è\82·\82é
+class function TListViewUtils.SetCategoryListItem(
+       ABBS2ch: TBBS;
+       ListView: TListView;
+       NumberVisible: Boolean;
+       var vSortIndex: Integer;
+       var vSortOrder: Boolean
+): Integer;
+var
+       TitleColumn     : TListColumn;
+       ListColumn      : TListColumn;
+       i, id, idx      : Integer;
+begin
+       ListView.Items.BeginUpdate;
+       try
+               ListView.Columns.Clear;
+               TitleColumn := ListView.Columns.Add;
+               TitleColumn.Caption := GikoBBSColumnCaption[ Ord( gbbscTitle ) ];
+               TitleColumn.Width := GikoSys.Setting.BBSColumnWidth[ Ord( gbbscTitle ) ];
+               idx := 0;
+               for i := 0 to GikoSys.Setting.BBSColumnOrder.Count - 1 do begin
+                       if GikoSys.Setting.BBSColumnOrder[ i ] = gbbscTitle then begin
+                               TitleColumn.Tag := i;
+                               idx := i;
+                       end else begin
+                               id := Ord( GikoSys.Setting.BBSColumnOrder[ i ] );
+                               if (Integer( Low( TGikoBBSColumnID ) ) <= id) and
+                                       (id <= Integer( High( TGikoBBSColumnID ) )) then begin
+                                       ListColumn := ListView.Columns.Add;
+       //                                      ListColumn.Tag := id;
+                                               ListColumn.Tag := i;
+                                       ListColumn.Caption := GikoBBSColumnCaption[ id ];
+                                       ListColumn.Width := GikoSys.Setting.BBSColumnWidth[ id ];
+                               end;
+                       end;
+               end;
+               TitleColumn.Index := idx;
+
+               ListView.Items.Count := 0;
+               ListView.Items.Clear;
+               ListView.Items.Count := ABBS2ch.Count;
+
+               GikoForm.ListNameLabel.Caption := ABBS2ch.Title;
+               GikoForm.FolderImage.Picture := nil;
+               GikoForm.ItemIcon16.GetBitmap(1, GikoForm.FolderImage.Picture.Bitmap);
+
+               vSortIndex := GikoSys.Setting.BBSSortIndex;
+               vSortOrder := GikoSys.Setting.BBSSortOrder;
+               for i := ListView.Columns.Count - 1 downto 0 do begin
+                       idx := ListView.Column[ i ].Tag;
+                       if vSortIndex = Ord( GikoSys.Setting.BBSColumnOrder[ idx ] ) then
+                               ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
+               end;
+
+               Result := ABBS2ch.Count;
+       finally
+               ListView.Items.EndUpdate;
+       end;
+end;
+
+class procedure TListViewUtils.ListViewSort(
+       Sender: TObject;
+       ListView: TListView;
+       Column: TListColumn;
+       NumberVisible: Boolean;
+       var vSortOrder: Boolean;
+       var vSortIndex: Integer
+);
+var
+       i, id, idx      : Integer;
+       orderList               : TList;
+       wkBBS: TBBS;
+       wkCategory: TCategory;
+       wkBoard: TBoard;
+begin
+       idx := ActiveListTrueColumn( Column ).Tag;
+
+       for i := 0 to ListView.Columns.Count - 1 do begin
+               ListView.Column[i].ImageIndex := -1;
+       end;
+
+       if SortOrder then
+               ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT1
+       else
+               ListView.Column[ idx ].ImageIndex := ITEM_ICON_SORT2;
+
+       Sort.SortNoFlag := NumberVisible;
+
+       //if TObject(TreeView.Selected.Data) is TBBS then begin
+       if TObject( GikoForm.ActiveList ) is TBBS then begin
+               //wkBBS := TBBS(TreeView.Selected.Data);
+               wkBBS := TBBS( GikoForm.ActiveList );
+               orderList := GikoSys.Setting.BBSColumnOrder;
+               id := Integer( orderList[ idx ] );
+               Sort.SortOrder := vSortOrder;
+               Sort.SortIndex := id;
+               GikoSys.Setting.BBSSortIndex := id;
+               GikoSys.Setting.BBSSortOrder := vSortOrder;
+               wkBBS.Sort(Sort.CategorySortProc);
+       //end else if TObject(TreeView.Selected.Data) is TCategory then begin
+       end else if TObject( GikoForm.ActiveList ) is TCategory then begin
+               //wkCategory := TCategory(TreeView.Selected.Data);
+               wkCategory := TCategory( GikoForm.ActiveList );
+               orderList := GikoSys.Setting.CategoryColumnOrder;
+               id := Integer( orderList[ idx ] );
+               Sort.SortOrder := vSortOrder;
+               Sort.SortIndex := id;
+               GikoSys.Setting.CategorySortIndex := id;
+               GikoSys.Setting.CategorySortOrder := vSortOrder;
+               wkCategory.CustomSort(BoardSortProc);
+       //end else if TObject(TreeView.Selected.Data) is TBoard then begin
+       end else if TObject( GikoForm.ActiveList ) is TBoard then begin
+               //wkBoard := TBoard(TreeView.Selected.Data);
+               wkBoard := TBoard( GikoForm.ActiveList );
+               orderList := GikoSys.Setting.BoardColumnOrder;
+               id := Integer( orderList[ idx ] );
+               Sort.SortOrder := vSortOrder;
+               Sort.SortIndex := id;
+               GikoSys.Setting.BoardSortIndex := id;
+               GikoSys.Setting.BoardSortOrder := vSortOrder;
+               wkBoard.CustomSort(ThreadItemSortProc);
+       end else begin
+               id := 0;
+       end;
+
+       ListView.Refresh;
+       vSortIndex := id;
+end;
+
+{!
+\brief         ListView \82Ì Column \82ð\90^\82Ì\83J\83\89\83\80\82É\95Ï\8a·
+
+Delphi 6 Personal \82Å\82Ì ListView \82Å\82Í ListViewColumnClick \83C\83x\83\93\83g\82Å
+\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
+}
+class function TListViewUtils.ActiveListTrueColumn( column : TListColumn ) : TListColumn;
+{*
+var
+       i, idx          : Integer;
+       orderList       : TList;
+*}
+begin
+
+       // \90³\82µ\82­\95Ï\8a·\82·\82é\95û\96@\82ª\95ª\82©\82ç\82È\82¢\82Ì\82Å\95Û\97¯
+       Result := column;
+       Exit;
+{*
+       Result := column;
+
+       if TObject( FActiveList ) is TBBS then
+               orderList := GikoSys.Setting.BBSColumnOrder
+       else if TObject( FActiveList ) is TCategory then
+               orderList := GikoSys.Setting.CategoryColumnOrder
+       else if TObject( FActiveList ) is TBoard then
+               orderList := GikoSys.Setting.BoardColumnOrder
+       else
+               Exit;
+
+       idx := column.Tag;
+
+       for i := 0 to ListView.Columns.Count - 1 do begin
+               if Integer( orderList[ ListView.Column[ i ].Tag ] ) = 0 then begin
+                       if idx = 0 then
+                               Result := ListView.Column[ i ]
+                       else if idx <= i then
+                               Result := ListView.Column[ idx - 1 ];
+                       Exit;
+               end;
+       end;
+*}
+
+end;
+//ListView\82ÉBoardItem\82ð\90Ý\92è\82·\82é
+class function TListViewUtils.SetBoardListItem(
+       Category: TCategory;
+       ListView: TListView;
+       NumberVisible: Boolean;
+       var vSortIndex: Integer;
+       var vSortOrder: Boolean
+): Integer;
+var
+       TitleColumn     : TListColumn;
+       ListColumn      : TListColumn;
+       i, id, idx      : Integer;
+begin
+       ListView.Items.BeginUpdate;
+       try
+               ListView.Columns.Clear;
+               TitleColumn := ListView.Columns.Add;
+               TitleColumn.Caption := GikoCategoryColumnCaption[ Ord( gccTitle ) ];
+               TitleColumn.Width := GikoSys.Setting.CategoryColumnWidth[ Ord( gccTitle ) ];
+               idx := 0;
+               for i := 0 to GikoSys.Setting.CategoryColumnOrder.Count - 1 do begin
+                       if GikoSys.Setting.CategoryColumnOrder[ i ] = gccTitle then begin
+                               TitleColumn.Tag := i;
+                               idx := i;
+                       end else begin
+                               id := Ord( GikoSys.Setting.CategoryColumnOrder[ i ] );
+                               if (Integer( Low( TGikoCategoryColumnID ) ) <= id) and
+                                       (id <= Integer( High( TGikoCategoryColumnID ) )) then begin
+                                       ListColumn := ListView.Columns.Add;
+//                                             ListColumn.Tag := id;
+                                       ListColumn.Tag := i;
+                                       ListColumn.Caption := GikoCategoryColumnCaption[ id ];
+                                       ListColumn.Width := GikoSys.Setting.CategoryColumnWidth[ id ];
+                               end;
+                       end;
+               end;
+               TitleColumn.Index := idx;
+
+               ListView.Items.Count := 0;
+               ListView.Items.Clear;
+               ListView.Items.Count := Category.Count;
+
+               for i := Category.Count - 1 downto 0 do begin
+                       if( Category.Items[i].ParentCategory <> Category ) then begin
+                               Category.Items[i].ParentCategory        := Category;
+                               Category.Items[i].No                            := i + 1;
+                       end;
+               end;
+//             UpFolderAction.Enabled := True;
+//             AllItemAction.Enabled := False;
+//             LogItemAction.Enabled := False;
+//             NewItemAction.Enabled := False;
+//             SelectItemAction.Enabled := False;
+//             ListDownloadToolButton.Enabled := False;
+//             BoardReservToolButton.Enabled := False;
+//             ListThreadDownloadToolButton.Enabled := False;
+
+               GikoForm.ListNameLabel.Caption := Category.Title;
+               GikoForm.FolderImage.Picture := nil;
+               GikoForm.ItemIcon16.GetBitmap(3, GikoForm.FolderImage.Picture.Bitmap);
+
+               vSortIndex := GikoSys.Setting.CategorySortIndex;
+               vSortOrder := GikoSys.Setting.CategorySortOrder;
+               for i := ListView.Columns.Count - 1 downto 0 do begin
+                       idx := ListView.Column[ i ].Tag;
+                       if vSortIndex = Ord( GikoSys.Setting.CategoryColumnOrder[ idx ] ) then
+                               ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
+               end;
+
+               Result := Category.Count;
+       finally
+               ListView.Items.EndUpdate;
+       end;
+end;
+//ListView\82ÉThreadItem\82ð\90Ý\92è\82·\82é
+class function TListViewUtils.SetThreadListItem(
+       Board: TBoard;
+       ListView: TListView;
+       NumberVisible: Boolean;
+       var vSortIndex: Integer;
+       var vSortOrder: Boolean
+): Integer;
+var
+       TitleColumn     : TListColumn;
+       ListColumn      : TListColumn;
+       i, id, idx      : Integer;
+begin
+       ListView.Items.BeginUpdate;
+       try
+               //Screen.Cursor := crHourGlass;
+
+{*
+               // \83`\83\89\82Â\82«\96h\8e~\82Ì\82½\82ß\81A\95Ï\8dX\82³\82ê\82Ä\82¢\82é\8fê\8d\87\82Ì\82Ý
+               // \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Ó
+               if ListView.Columns.Count <> GikoSys.Setting.BoardColumnOrder.Count then
+*}
+               begin
+                       ListView.Columns.Clear;
+                       TitleColumn := ListView.Columns.Add;
+                       TitleColumn.Caption := GikoBoardColumnCaption[ Ord( gbcTitle ) ];
+                       TitleColumn.Width := GikoSys.Setting.BoardColumnWidth[ Ord( gbcTitle ) ];
+                       idx := 0;
+                       for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
+                               if GikoSys.Setting.BoardColumnOrder[ i ] = gbcTitle then begin
+                                       TitleColumn.Tag := i;
+                                       idx := i;
+                               end else begin
+                                       id := Ord( GikoSys.Setting.BoardColumnOrder[ i ] );
+                                       if (Integer( Low( TGikoBoardColumnID ) ) <= id) and
+                                               (id <= Integer( High( TGikoBoardColumnID ) )) then begin
+                                               ListColumn := ListView.Columns.Add;
+                                               ListColumn.Caption := GikoBoardColumnCaption[ id ];
+       //                                      ListColumn.Tag := id;
+                                               ListColumn.Tag := i;
+                                               ListColumn.Width := GikoSys.Setting.BoardColumnWidth[ id ];
+                                               ListColumn.Alignment := GikoBoardColumnAlignment[ id ];
+                                       end;
+                               end;
+                       end;
+                       TitleColumn.Index := idx;
+               end;
+
+               ListView.Items.Count := 0;
+               ListView.Items.Clear;
+
+               {case GikoForm.ViewType of
+                       gvtAll: ListView.Items.Count := Board.Count;
+                       gvtLog: ListView.Items.Count := Board.GetLogThreadCount;
+                       gvtNew: ListView.Items.Count := Board.GetNewThreadCount;
+                       gvtUser: ListView.Items.Count := Board.GetUserThreadCount;
+               end;
+               }
+               case GikoForm.ViewType of
+                       gvtAll: ListView.Items.Count := Board.Count;
+                       gvtLog:
+                       begin
+                               Board.LogThreadCount := Board.GetLogThreadCount;
+                               ListView.Items.Count := Board.LogThreadCount;
+                       end;
+                       gvtNew:
+                       begin
+                               Board.NewThreadCount := Board.GetNewThreadCount;
+                               ListView.Items.Count := Board.NewThreadCount;
+                       end;
+                       gvtUser:
+                       begin
+                               Board.UserThreadCount:= Board.GetUserThreadCount;
+                               ListView.Items.Count := Board.UserThreadCount;
+                       end;
+               end;
+
+               GikoForm.ListNameLabel.Caption := Board.Title;
+               GikoForm.FolderImage.Picture := nil;
+               GikoForm.ItemIcon16.GetBitmap(5, GikoForm.FolderImage.Picture.Bitmap);
+
+               vSortIndex := GikoSys.Setting.BoardSortIndex;
+               vSortOrder := GikoSys.Setting.BoardSortOrder;
+               for i := ListView.Columns.Count - 1 downto 0 do begin
+                       idx := ListView.Column[ i ].Tag;
+                       if vSortIndex = Ord( GikoSys.Setting.BoardColumnOrder[ idx ] ) then
+                               ListViewSort( nil, ListView, ListView.Column[ i ], NumberVisible, vSortOrder, vSortIndex );
+               end;
+
+               Result := Board.Count;
+       finally
+               ListView.Items.EndUpdate;
+       end;
+end;
+
+class procedure TListViewUtils.ListViewData(Sender: TObject; Item: TListItem);
+var
+//     FileName: string;
+//     DateTime: TDateTime;
+       BoardCnt: Integer;
+       BBS: TBBS;
+       Category: TCategory;
+       Board: TBoard;
+       ThreadItem: TThreadItem;
+       RepStr: string;
+               ActivListObj : TObject;
+       i, idx : Integer;
+       ListView : TListView;
+begin
+       if (Sender <> nil) and (Sender is TListView) then begin
+               ListView := TListView(Sender)
+       end else begin
+               Exit;
+       end;
+
+       ActivListObj := GikoForm.ActiveList;
+       if ActivListObj is TBBS then begin
+               //===== \83J\83e\83S\83\8a\83\8a\83X\83g =====
+               BBS := TBBS(ActivListObj);
+
+               GikoForm.ListView.StateImages := nil;
+
+               if (BBS = nil) or (BBS.Count <= 0) or (Item = nil)
+                       or (Item.Index >= BBS.Count) or (ListView.Items.Count = 0)
+                       or (not (BBS.Items[Item.index] is TCategory)) then Exit;
+               //if BBS.Count <= 0 then Exit;
+               //if Item = nil then Exit;
+               //if Item.Index >= BBS.Count then Exit;
+               //if ListView.Items.Count = 0 then Exit;
+
+               //if not (BBS.Items[Item.index] is TCategory) then Exit;
+               Category := TCategory(BBS.Items[Item.index]);
+
+               if Category = nil then Exit;
+
+               if GikoForm.ListNumberVisibleAction.Checked then
+                       Item.Caption := IntToStr(Category.No) + ': ' + Category.Title
+               else
+                       Item.Caption := Category.Title;
+
+               Item.ImageIndex := ITEM_ICON_CATEGORY1;
+               Item.Data := Category;
+
+       end else if ActivListObj is TCategory then begin
+
+               //===== \94Â\83\8a\83X\83g =====
+               Category := TCategory(ActivListObj);
+
+               ListView.StateImages := nil;
+
+               if (Category = nil) or (Category.Count <= 0) or (Item = nil)
+                       or (Item.Index >= Category.Count) or (ListView.Items.Count = 0)
+                       or (not (Category.Items[Item.Index] is TBoard))  then Exit;
+               //if Category.Count <= 0 then Exit;
+               //if Item = nil then Exit;
+               //if Item.Index >= Category.Count then Exit;
+               //if ListView.Items.Count = 0 then Exit;
+
+               //if not (Category.Items[Item.Index] is TBoard) then Exit;
+               Board := TBoard(Category.Items[Item.Index]);
+
+               if Board = nil then Exit;
+
+               if GikoForm.ListNumberVisibleAction.Checked then
+                       Item.Caption := IntToStr(Board.No) + ': ' + Board.Title
+                       //Item.Caption := IntToStr(Item.Index + 1) + ': ' + Board.Title
+               else
+                       Item.Caption := Board.Title;
+
+               if Item.SubItems.Count <> ListView.Columns.Count then begin
+                       Item.SubItems.Clear;
+                       Item.SubItems.Capacity := GikoSys.Setting.CategoryColumnOrder.Count;
+                       for i := GikoSys.Setting.CategoryColumnOrder.Count - 1 downto 1 do
+                               Item.SubItems.Add('');
+               end;
+
+               Item.ImageIndex := ITEM_ICON_BOARD1;
+               idx := 0;
+               for i := 0 to ListView.Columns.Count - 1 do begin
+                       if GikoSys.Setting.CategoryColumnOrder.Count <= i then
+                               Break;
+//                             case TGikoCategoryColumnID( ListView.Column[ i ].Tag ) of
+                       case GikoSys.Setting.CategoryColumnOrder[ i ] of
+                       gccTitle:
+                               // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
+                               Dec( idx );
+
+                       gccRoundName:
+                               if Board.Round then
+                                       Item.SubItems[ idx ] := Board.RoundName // '\97\\96ñ'
+                               else
+                                       Item.SubItems[ idx ] := '';
+
+                       gccLastModified:
+                               if Board.RoundDate = ZERO_DATE then begin
+                                       Item.SubItems[ idx ] := '';
+                               end else
+                                       Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', Board.RoundDate);
+                       end;
+                       Inc( idx );
+               end;
+
+               Item.Data := Board;
+
+       end else if ActivListObj is TBoard then begin
+
+               //===== \83X\83\8c\83\8a\83X\83g =====
+               Board := TBoard(ActivListObj);
+
+               if GikoSys.Setting.ListIconVisible then
+                       ListView.StateImages := GikoForm.StateIconImageList
+               else
+                       ListView.StateImages := nil;
+
+
+               case GikoForm.ViewType of
+                       gvtAll: BoardCnt := Board.Count;
+                       gvtLog: BoardCnt := Board.LogThreadCount;
+                       gvtNew: BoardCnt := Board.NewThreadCount;
+                       gvtUser: BoardCnt := Board.UserThreadCount;
+                       else
+                               BoardCnt := 0;
+               end;
+               {
+               case GikoForm.ViewType of
+                       gvtAll: BoardCnt := Board.Count;
+                       gvtLog: BoardCnt := Board.GetLogThreadCount;
+                       gvtNew: BoardCnt := Board.GetNewThreadCount;
+                       gvtUser: BoardCnt := Board.GetUserThreadCount;
+                       else
+                               BoardCnt := 0;
+               end;
+               }
+//             if Board = nil then Exit;
+               if (BoardCnt <= 0) or (Item = nil) or (Item.Index > BoardCnt)
+                       or (ListView.Items.Count = 0) or (not (Board.Items[Item.Index] is TThreadItem)) then Exit;
+
+               //\89ü\91P\82·\82×\82«\83u\83\8d\83b\83N/////////////////////////////////////////////////////
+               ThreadItem := nil;
+               case GikoForm.ViewType of
+                       gvtAll: if Item.Index >= Board.Count then Exit else
+                                                               ThreadItem := TThreadItem(Board.Items[Item.Index]);
+                       gvtLog:         ThreadItem := Board.GetLogThread(Item.Index);
+                       gvtNew:         ThreadItem := Board.GetNewThread(Item.Index);
+                       gvtUser:        ThreadItem := Board.GetUserThread(Item.Index);
+               end;
+               //////////////////////////////////////////////////////////////////////////
+               
+               if ThreadItem = nil then Exit;
+
+               RepStr := CustomStringReplace(ThreadItem.Title, '&lt;', '<' );
+               RepStr := CustomStringReplace(RepStr, '&gt;', '>' );
+               RepStr := CustomStringReplace(RepStr, '&quot;', '"' );
+               RepStr := CustomStringReplace(RepStr, '&amp;', '&' );
+               //RepStr := StringReplace(RepStr, '\81\97\81M', ',', [rfReplaceAll]);
+               if Item.SubItems.Count <> ListView.Columns.Count then begin
+                       Item.SubItems.Clear;
+                       Item.SubItems.Capacity := GikoSys.Setting.BoardColumnOrder.Count;
+                       for i := GikoSys.Setting.BoardColumnOrder.Count - 1 downto 1 do
+                               Item.SubItems.Add('');
+               end;
+
+               if GikoForm.ListNumberVisibleAction.Checked then
+                       Item.Caption := IntToStr(ThreadItem.No) + ': ' + RepStr
+               else
+                       Item.Caption := RepStr;
+
+               case ThreadItem.AgeSage of
+                       gasNone: Item.StateIndex := -1;
+                       gasNew: Item.StateIndex := 0;
+                       gasAge: Item.StateIndex := 1;
+                       gasSage: Item.StateIndex := 2;
+               end;
+
+               if ThreadItem.IsLogFile then begin
+                       idx := 0;
+                       for i := 0 to ListView.Columns.Count - 1 do begin
+                       if GikoSys.Setting.BoardColumnOrder.Count <= i then
+                               Break;
+//                             case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
+                               case GikoSys.Setting.BoardColumnOrder[ i ] of
+                               gbcTitle:
+                                       // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
+                                       Dec( idx );
+
+                               gbcAllCount:
+                                       Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
+
+                               gbcLocalCount:
+                                       Item.SubItems[ idx ] := IntToStr(ThreadItem.Count);
+
+                               gbcNonAcqCount:
+                                       Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount - ThreadItem.Count);
+
+                               gbcNewCount:
+                                       if ThreadItem.NewResCount = 0 then
+                                               Item.SubItems[ idx ] := ''
+                                       else
+                                               Item.SubItems[ idx ] := IntToStr(ThreadItem.NewResCount);
+
+                               gbcUnReadCount:
+                                       Item.SubItems[ idx ] := '';
+
+                               gbcRoundName:
+                                       if ThreadItem.Round then
+                                               Item.SubItems[ idx ] := ThreadItem.RoundName
+                                       else
+                                               Item.SubItems[ idx ] := '';
+
+                               gbcRoundDate://gbcLastModified:
+                                       if (ThreadItem.RoundDate = ZERO_DATE)  then begin
+                                               Item.SubItems[ idx ] := '';
+                                       end else
+                                               Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.RoundDate);
+
+                               gbcCreated:
+                                       if ThreadItem.CreateDate = ZERO_DATE then begin
+                                               Item.SubItems[ idx ] := '';
+                                       end else
+                                               Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
+
+                               gbcLastModified:
+                                       if (ThreadItem.LastModified = ZERO_DATE)  then begin
+                                               Item.SubItems[ idx ] := '';
+                                       end else
+                                               Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.LastModified);
+
+
+                               end;
+                               Inc( idx );
+                       end;
+
+                       if ThreadItem.NewArrival then
+                               Item.ImageIndex := ITEM_ICON_THREADNEW1
+                       else
+                               Item.ImageIndex := ITEM_ICON_THREADLOG1;
+
+
+               end else begin
+                       idx := 0;
+                       for i := 0 to GikoSys.Setting.BoardColumnOrder.Count - 1 do begin
+//                             case TGikoBoardColumnID( ListView.Column[ i ].Tag ) of
+                               case GikoSys.Setting.BoardColumnOrder[ i ] of
+                               gbcTitle:
+                                       // Item.Caption \82Í SubItems \82É\8aÜ\82Ü\82ê\96³\82¢\82Ì\82Å
+                                       Dec( idx );
+
+                               gbcAllCount:
+                                       Item.SubItems[ idx ] := IntToStr(ThreadItem.AllResCount);
+
+                               gbcRoundDate://gbcLastModified:
+                                       Item.SubItems[ idx ] := '';
+
+                               gbcCreated:
+                                       if ThreadItem.CreateDate = ZERO_DATE then begin
+                                               Item.SubItems[ idx ] := '';
+                                       end else
+                                               Item.SubItems[ idx ] := FormatDateTime('yyyy/mm/dd hh:mm:ss', ThreadItem.CreateDate);
+
+                               gbcLastModified:
+                                       Item.SubItems[ idx ] := '';
+
+                               else
+                                       Item.SubItems[ idx ] := '';
+                               end;
+                               Inc( idx );
+                       end;
+                       if ThreadItem.NewArrival then
+                               Item.ImageIndex := ITEM_ICON_THREADNEW1
+                       else
+                               Item.ImageIndex := ITEM_ICON_THREAD1;
+               end;
+
+               Item.Data := ThreadItem;
+
+       end;
+end;
+
+end.
index 57c85e4..6077980 100644 (file)
@@ -67,7 +67,8 @@ uses
   Gesture in 'Gesture.pas',
   GikoBayesian in 'GikoBayesian.pas',
   Y_TextConverter in 'res\ExternalBoardPlugIn\Y_TextConverter.pas',
-  HTMLCreate in 'HTMLCreate.pas';
+  HTMLCreate in 'HTMLCreate.pas',
+  ListViewUtils in 'ListViewUtils.pas';
 
 {$R *.RES}
 {$R gikoResource.res}
index 08da7f0..1f437c2 100644 (file)
Binary files a/gikoNavi.res and b/gikoNavi.res differ