OSDN Git Service

・2ちゃんねるキャビネットのツリーをプラグインごとに分類するようになった。
authoryoffy <yoffy>
Wed, 19 Nov 2003 08:48:10 +0000 (08:48 +0000)
committeryoffy <yoffy>
Wed, 19 Nov 2003 08:48:10 +0000 (08:48 +0000)
 ※ただし、右上ペインに板リストを表示した場合に BBS 名が先頭に表示されてしまう問題がある。

BoardGroup.pas
Giko.pas

index 9ead564..149fef7 100644 (file)
@@ -504,9 +504,12 @@ end;
  *\97\9a\97ð\82P\81@\81@\81F\90V\8bK\8dì\90¬
  *************************************************************************)
 procedure TBBS2ch.ReadBoardFile;
+type
+       // \8dÅ\8f\89\82Ì\88ê\82Â(\93Y\82¦\8e\9a 0)\82ª BBS \96¼\82Å\81A\82»\82Ì\8cã\82É\83J\83e\83S\83\8a\82ª\91±\82­
+       TCategories = array of TCategory;
 var
        i, j, k: integer;
-       kbound: Integer;
+       jbound, kbound: Integer;
        idx: Integer;
        ini: TMemIniFile;
        CategoryList: TStringList;
@@ -517,18 +520,37 @@ var
        RoundItem: TRoundItem;
        BBSList: TStringList;
        CustomList: TStringList;
-  BoardFileList: TStringList;
+       BoardFileList: TStringList;
+
+       plugInBBSs                              : array of TCategories;
+       plugInCategories        : TCategories;
+       agent                           : string;
+       major                           : DWORD;
+       minor                           : DWORD;
+       release                 : string;
+       revision                : DWORD;
+       plugInIndex     : Integer;
+const
+       BBS_NAME_SIGNATURE = #$1B;      // \90â\91Î\82É\94Â\96¼\82Æ\82µ\82Ä\82 \82è\93¾\82È\82¢\8bL\8d\86\82ð\8eg\82¤
 begin
        ini := TMemIniFile.Create('');
        BBSList := TStringList.Create;
        CustomList := TStringList.Create;
        BoardFileList := TStringList.Create;
        try
+               // \94Â\83\8a\83X\83g\82Ì\93Ç\82Ý\8d\9e\82Ý
+               // \81¦\96{\93\96\82Í TBBS2ch \82ð\8cf\8e¦\94Â\82Ì\90\94\82¾\82¯\90\90¬\82·\82é\82×\82«\82¾\82ª
+               // \81@\8dÅ\8f\89\82©\82ç BBS2ch \82ª 1 \82Â\91O\92ñ\82Å\8dì\82ç\82ê\82Ä\82¢\82é\82½\82ß\81A
+               // \81@\83v\83\89\83O\83C\83\93\82ª\95Ï\82í\82é\82²\82Æ\82É\83_\83~\81[\82Ì TCategory \82ð\8b²\82ñ\82Å\91Î\8f\88\82·\82é
+
+               // \82Q\82¿\82á\82ñ\82Ë\82é
                if FileExists(GikoSys.GetBoardFileName) then
                        BBSList.LoadFromFile(GikoSys.GetBoardFileName);
+               // \83J\83X\83^\83\80
                if FileExists(GikoSys.GetCustomBoardFileName) then
                        CustomList.LoadFromFile(GikoSys.GetCustomBoardFileName);
                BBSList.AddStrings(CustomList);
+               // Board \83t\83H\83\8b\83_
                if DirectoryExists(GikoSys.Setting.GetBoardDir) then begin
                        GikoSys.GetFileList( GikoSys.Setting.GetBoardDir, '*', BoardFileList, True, True );
                        for i := BoardFileList.Count - 1 downto 0 do begin
@@ -539,6 +561,31 @@ begin
                end;
                ini.SetStrings(BBSList);
 
+               // \83v\83\89\83O\83C\83\93\97p\82Ì\83_\83~\81[\83J\83e\83S\83\8a\82ð\90\90¬
+               try
+                       k                               := Low( BoardPlugIns );
+                       kbound  := High( BoardPlugIns );
+                       SetLength(
+                               plugInBBSs,
+                               Max( 0, kbound - k + 1 ) );
+                       for k := k to kbound do begin
+                               SetLength( plugInBBSs[ k ], 1 );
+                               if Assigned( Pointer( BoardPlugIns[ k ].Module ) ) then begin
+                                       // BBS \96¼\82Ì\91ã\82í\82è\82É\82Æ\82è\82 \82¦\82¸\83v\83\89\83O\83C\83\93\96¼\82ð\93ü\82ê\82Ä\82¨\82­
+                                       // \81¦\8d¡\8cã BBS \96¼\82ð\93ü\82ê\82é\82æ\82¤\82É\89ü\97Ç\82·\82é\82±\82Æ
+                                       plugInBBSs[ k ][ 0 ] := TCategory.Create;
+                                       BoardPlugIns[ k ].VersionInfo( agent, major, minor, release, revision );
+                                       plugInBBSs[ k ][ 0 ].Title      := BBS_NAME_SIGNATURE + agent;
+                               end;
+                       end;
+               except
+               end;
+
+               // \82Q\82¿\82á\82ñ\82Ë\82é\82ð\92Ç\89Á
+               Category := TCategory.Create;
+               Category.Title := BBS_NAME_SIGNATURE + '\82Q\82¿\82á\82ñ\82Ë\82é';
+                BBS2ch.Add( Category );
+
                CategoryList := TStringList.Create;
                BoardList := TStringList.Create;
                try
@@ -549,6 +596,7 @@ begin
                                Category := TCategory.Create;
                                Category.No := i + 1;
                                Category.Title := CategoryList[i];
+                               plugInIndex := -1;
 
                                for j := 0 to BoardList.Count - 1 do begin
                                        Board := nil;
@@ -561,6 +609,7 @@ begin
                                                        if Assigned( Pointer( BoardPlugIns[ k ].Module ) ) then begin
                                                                if BoardPlugIns[ k ].AcceptURL( inistr ) then begin
                                                                        Board := TBoard.Create( BoardPlugIns[ k ], inistr );
+                                                                       plugInIndex := k;
 
                                                                        Break;
                                                                end;
@@ -589,12 +638,32 @@ begin
                                        Category.Add(Board);
                                        Board.EndUpdate;
                                end;
-                               BBS2ch.Add(Category);
+                               if plugInIndex >= 0 then begin
+                                       k := High( plugInBBSs[ plugInIndex ] ) + 1;
+                                       SetLength( plugInBBSs[ plugInIndex ], k + 1 );
+                                       plugInBBSs[ plugInIndex ][ k ] := Category;
+                               end else begin
+                                       BBS2ch.Add(Category);
+                               end;
                        end;
                finally
                        BoardList.Free;
                        CategoryList.Free;
                end;
+
+               // \83v\83\89\83O\83C\83\93\97p\82Ì\83_\83~\81[\83J\83e\83S\83\8a\82ð\96\96\94ö\82É\92Ç\89Á
+               try
+                       k                               := Low( plugInBBSs );
+                       kbound  := High( plugInBBSs );
+                       for k := k to kbound do begin
+                               j                               := Low( plugInBBSs[ k ] );
+                               jbound  := High( plugInBBSs[ k ] );
+                               for j := j to jbound do begin
+                                       BBS2ch.Add( plugInBBSs[ k ][ j ] );
+                               end;
+                       end;
+               except
+               end;
        finally
                BBSList.Free;
                CustomList.Free;
index df81558..b67dc3f 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -1816,42 +1816,53 @@ var
        BoardNode: TTreeNode;
        Category: TCategory;
        Board: TBoard;
+const
+       BBS_NAME_SIGNATURE = #$1B;      // \90â\91Î\82É\94Â\96¼\82Æ\82µ\82Ä\82 \82è\93¾\82È\82¢\8bL\8d\86\82ð\8eg\82¤
 begin
+       // \94Â\83\8a\83X\83g\82Ì\90Ý\92è
+       // \81¦\96{\93\96\82Í TBBS2ch \82ð\8cf\8e¦\94Â\82Ì\90\94\82¾\82¯\90\90¬\82·\82é\82×\82«\82¾\82ª
+       // \81@\8dÅ\8f\89\82©\82ç BBS2ch \82ª 1 \82Â\91O\92ñ\82Å\8dì\82ç\82ê\82Ä\82¢\82é\82½\82ß\81A
+       // \81@\83v\83\89\83O\83C\83\93\82ª\95Ï\82í\82é\82²\82Æ\82É\83_\83~\81[\82Ì TCategory \82ð\8b²\82ñ\82Å\91Î\8f\88\82·\82é
        TreeView.Items.BeginUpdate;
        TreeView.Items.Clear;
        try
-               Root := TreeView.Items.Add(nil, BBS2ch.Title);
-               Root.ImageIndex := ITEM_ICON_2CH1;
-               Root.SelectedIndex := ITEM_ICON_2CH2;
-               Root.Data := BBS2ch;
                if SplashWindow <> nil then
                        SplashWindow.ProgressBar.Max := BoardGroup.BBS2ch.Count;
 
                for i := 0 to BoardGroup.BBS2ch.Count - 1 do begin
-                       Category := TCategory(BoardGroup.BBS2ch.Items[i]);
-                       CategoryNode := TreeView.Items.AddChild(Root, Category.Title);
-                       CategoryNode.Data := Category;
-                       CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
-                       CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
-
-                       for j := 0 to Category.Count - 1 do begin
-                               Board := TBoard(Category.Items[j]);
-                               Board.BeginUpdate;
-                               BoardNode := TreeView.Items.AddChild(CategoryNode, Board.Title);
-                               BoardNode.Data := Board;
-                               BoardNode.ImageIndex := ITEM_ICON_BOARD1;
-                               BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
-                               Board.LoadSettings;
-                               Board.EndUpdate;
-                       end;
+                       if LeftStr( BoardGroup.BBS2ch.Items[ i ].Title, 1 ) = BBS_NAME_SIGNATURE then begin
+                               // \83_\83~\81[\82Ì\83J\83e\83S\83\8a\82ð\8c\9f\8fo\82µ\82½\82Ì\82Å BBS \82ð\92Ç\89Á\82·\82é
+                               Root := TreeView.Items.Add(
+                                       nil,
+                                       Copy( BBS2ch.Items[ i ].Title, 2, Length( BBS2ch.Items[ i ].Title ) ) );
+                               Root.ImageIndex := ITEM_ICON_2CH1;
+                               Root.SelectedIndex := ITEM_ICON_2CH2;
+                               Root.Data := BBS2ch;
+                       end else begin
+                               Category := TCategory(BoardGroup.BBS2ch.Items[i]);
+                               CategoryNode := TreeView.Items.AddChild(Root, Category.Title);
+                               CategoryNode.Data := Category;
+                               CategoryNode.ImageIndex := ITEM_ICON_CATEGORY1;
+                               CategoryNode.SelectedIndex := ITEM_ICON_CATEGORY2;
+
+                               for j := 0 to Category.Count - 1 do begin
+                                       Board := TBoard(Category.Items[j]);
+                                       Board.BeginUpdate;
+                                       BoardNode := TreeView.Items.AddChild(CategoryNode, Board.Title);
+                                       BoardNode.Data := Board;
+                                       BoardNode.ImageIndex := ITEM_ICON_BOARD1;
+                                       BoardNode.SelectedIndex := ITEM_ICON_BOARD2;
+                                       Board.LoadSettings;
+                                       Board.EndUpdate;
+                               end;
 
-                       CategoryNode.Expanded := Category.NodeExpand;
+                               CategoryNode.Expanded := Category.NodeExpand;
 
-                       if SplashWindow <> nil then begin
-                               SplashWindow.ProgressBar.StepIt;
-                               Application.ProcessMessages;
+                               if SplashWindow <> nil then begin
+                                       SplashWindow.ProgressBar.StepIt;
+                                       Application.ProcessMessages;
+                               end;
                        end;
-
                end;
        finally
                TreeView.Items.EndUpdate;