OSDN Git Service

タブのポップアップメニューに同じ板のスレッドを開くメニューを追加してみた。
authorh677 <h677>
Sun, 15 Apr 2007 16:21:29 +0000 (16:21 +0000)
committerh677 <h677>
Sun, 15 Apr 2007 16:21:29 +0000 (16:21 +0000)
履歴でキーボードのEnterでスレッドを開くとエラーが出る不具合の修正。

BrowserRecord.pas
Giko.dfm
Giko.pas
GikoSystem.pas
gikoNavi.res

index 8a1da49..cd8ced2 100644 (file)
@@ -114,9 +114,6 @@ end;
 //! \83u\83\89\83E\83U\82ð\83X\83N\83\8d\81[\83\8b\82³\82¹\82é
 // *************************************************************************
 procedure TBrowserRecord.Move(scroll: Integer);
-var
-       top: Integer;
-       item: OleVariant;
 begin
        //\83u\83\89\83E\83U\82ª\95t\82¢\82Ä\82é\82Æ\82«\82¾\82¯\8f\88\97\9d\82·\82é
        if (Self.Browser <> nil) then begin
index b167091..d0f0dae 100644 (file)
--- a/Giko.dfm
+++ b/Giko.dfm
@@ -5284,6 +5284,13 @@ object GikoForm: TGikoForm
     object N37: TMenuItem
       Caption = '-'
     end
+    object SameBoardThreadItem: TMenuItem
+      Caption = #21516#26495#12391#34920#31034#12375#12390#12356#12427#12473#12524#12483#12489
+      Hint = #21516#26495#12391#34920#31034#12375#12390#12427#12473#12524#12483#12489
+    end
+    object N81: TMenuItem
+      Caption = '-'
+    end
     object Close1: TMenuItem
       Action = GikoDM.BrowserTabCloseAction
     end
index b816db4..5de9270 100644 (file)
--- a/Giko.pas
+++ b/Giko.pas
@@ -417,6 +417,8 @@ type
     HTML1: TMenuItem;
     DAT4: TMenuItem;
     N80: TMenuItem;
+    SameBoardThreadItem: TMenuItem;
+    N81: TMenuItem;
                                procedure FormCreate(Sender: TObject);
                procedure FormDestroy(Sender: TObject);
                procedure BrowserStatusTextChange(Sender: TObject;
@@ -680,6 +682,10 @@ type
         procedure ShowEditors(nCmdShow: Integer);
         //! \82à\82Á\82Æ\82à\8cÃ\82¢Browser\82Ì\8aJ\95ú
         procedure ReleaseOldestBrowser;
+        //! \83A\83N\83e\83B\83u\82È\83^\83u\82Æ\93¯\82\94Â\82Ì\8aJ\82¢\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83\81\83j\83\85\81[\83A\83C\83e\83\80\82É\92Ç\89Á
+        procedure AddMenuSameBoardThread;
+        //!  \83A\83N\83e\83B\83u\82È\83^\83u\82Æ\93¯\82\94Â\82Ì\8aJ\82¢\82Ä\82¢\82é\83X\83\8c\83b\83h\83N\83\8a\83b\83N\83C\83x\83\93\83g
+        procedure SameBoardThreadSubItemOnClick(Sender: TObject);
        protected
                procedure CreateParams(var Params: TCreateParams); override;
                procedure WndProc(var Message: TMessage); override;
@@ -6231,8 +6237,61 @@ end;
 procedure TGikoForm.BrowserTabPopupMenuPopup(Sender: TObject);
 begin
        AddRoundNameMenu(dummy1);
+    AddMenuSameBoardThread;
+end;
+//! \83A\83N\83e\83B\83u\82È\83^\83u\82Æ\93¯\82\94Â\82Ì\8aJ\82¢\82Ä\82¢\82é\83X\83\8c\83b\83h\82ð\83\81\83j\83\85\81[\83A\83C\83e\83\80\82É\92Ç\89Á
+procedure TGikoForm.AddMenuSameBoardThread;
+var
+       i: Integer;
+       Item: TMenuItem;
+begin
+    SameBoardThreadItem.Clear;
+    for i := 0 to BrowserTab.Tabs.Count - 1 do begin
+        // \93¯\82\94Â\82©\82Ç\82¤\82©
+        if (FActiveContent.Thread.ParentBoard =
+            TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
+            // \8e©\95ª\82Í\8aO\82·
+            if FActiveContent.Thread <>
+                TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
+                Item := TMenuItem.Create(Self);
+                Item.Caption := TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.Title;
+                Item.OnClick := SameBoardThreadSubItemOnClick;
+                SameBoardThreadItem.Add(Item);
+            end;
+        end;
+    end;
+    // \89½\82à\96³\82¢\82È\82ç\8eg\97p\82Å\82«\82È\82¢\82æ\82¤\82É\82·\82é
+    SameBoardThreadItem.Enabled := SameBoardThreadItem.Count > 0;
+end;
+//!  \83A\83N\83e\83B\83u\82È\83^\83u\82Æ\93¯\82\94Â\82Ì\8aJ\82¢\82Ä\82¢\82é\83X\83\8c\83b\83h\83N\83\8a\83b\83N\83C\83x\83\93\83g
+procedure TGikoForm.SameBoardThreadSubItemOnClick(Sender: TObject);
+var
+       i, j: Integer;
+       MenuItem: TMenuItem;
+begin
+       if Sender is TMenuItem then begin
+        try
+            j := 0;
+            MenuItem := TMenuItem(Sender);
+            for i := 0 to BrowserTab.Tabs.Count - 1 do begin
+                // \93¯\82\94Â\82©\82Ç\82¤\82©
+                if (FActiveContent.Thread.ParentBoard =
+                    TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread.ParentBoard) then begin
+                    if FActiveContent.Thread <>
+                        TBrowserRecord(BrowserTab.Tabs.Objects[i]).Thread then begin
+                        if (SameBoardThreadItem.Items[j] = MenuItem) then begin
+                            MoveToURL( TBrowserRecord(BrowserTab.Tabs.Objects[i])
+                                .Thread.URL);
+                            Exit;
+                        end;
+                        Inc(j);
+                    end;
+                end;
+            end;
+        except
+        end;
+       end;
 end;
-
 procedure TGikoForm.FavoritesURLReplace(oldURLs: TStringList; newURLs: TStringList);
 begin
        FavoriteDM.URLReplace(oldURLs, newURLs);
@@ -6436,7 +6495,10 @@ begin
                TreeDoubleClick( TreeView.Selected );
        end else if Key = VK_RETURN then begin
                TreeClick( TreeView.Selected );
-               TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
+        // \97\9a\97ð\82Ì\8fê\8d\87\81A\8fÁ\82³\82ê\82Ä\82¢\82é\82Ì\82Å\83`\83F\83b\83N\82·\82é
+        if (TreeView.Selected <> nil) then begin
+               TreeView.Selected.Expanded := not TreeView.Selected.Expanded;
+        end;
        end;
 end;
 //! \82¨\8bC\82É\93ü\82è\82ÌMouseDown\83C\83x\83\93\83g
index edaa88f..185cc59 100644 (file)
@@ -116,6 +116,8 @@ type
                function ChooseString(const Text, Separator: string; Index: integer): string;
         //! \88ê\8e\9e\83t\83@\83C\83\8b\82©\82ç\82Ì\95\9c\8b\8c
         procedure RestoreThreadData(Board: TBoard);
+        //! \83C\83\93\83f\83b\83N\83X\82É\82È\82¢dat\81i\82Í\82®\82êdat\81j\82Ì\92Ç\89Á
+        procedure AddOutofIndexDat(Board: TBoard; DatList: TStringList);
        public
                { Public \90é\8c¾ }
                FAbon : TAbon;
@@ -567,10 +569,7 @@ var
        i: Integer;
        Rec: TIndexRec;
        UnRead: Integer;
-       ResRec: TResRec;
        usePlugIn : Boolean;
-       BoardPath : String;
-       server : String;
        islog : Boolean;
     urlHead: String;
        {*
@@ -583,7 +582,13 @@ begin
        Board.Clear;
        UnRead := 0;
        usePlugIn := Board.IsBoardPlugInAvailable;
-       server :=  UrlToServer( Board.URL );
+       //server :=  UrlToServer( Board.URL );
+    // \83X\83\8c\83b\83h\82Å\8b¤\92Ê\82ÌURL\95\94
+    if Board.is2ch then begin
+        urlHead := UrlToServer( Board.URL ) + 'test/read.cgi/' + Board.BBSID + '/';
+    end else begin
+        urlHead := UrlToServer( Board.URL ) + 'test/read.cgi?bbs=' + Board.BBSID + '&key=';
+    end;
 
        FileName := Board.GetFolderIndexFileName;
 
@@ -597,17 +602,10 @@ begin
        // \8fd\95¡\82ð\96h\82®
        Board.BeginUpdate;
        Board.Sorted := True;
-
        sl := TStringList.Create;
        try
                if FileExists(FileName) then begin
                        sl.LoadFromFile(FileName);
-            // \83X\83\8c\83b\83h\82Å\8b¤\92Ê\82ÌURL\95\94
-            if Board.is2ch then begin
-                urlHead := server + 'test/read.cgi/' + Board.BBSID + '/';
-            end else begin
-                urlHead := server + 'test/read.cgi?bbs=' + Board.BBSID + '&key=';
-            end;
                        //\82Q\8ds\96Ú\82©\82ç\81i\82P\8ds\96Ú\82Í\83o\81[\83W\83\87\83\93\81j
                        for i := sl.Count - 1 downto 1 do begin
                                Rec := ParseIndexLine(sl[i]);
@@ -665,7 +663,7 @@ begin
                                ThreadItem.EndUpdate;
                                Board.Add(ThreadItem);
 
-                               if (ThreadItem.IsLogFile) and (ThreadItem.UnRead) then
+                               if (ThreadItem.UnRead) and (ThreadItem.IsLogFile) then
                                        Inc(UnRead);
                        end;
                end;
@@ -673,50 +671,10 @@ begin
                if UnRead <> Board.UnRead then
                        Board.UnRead := UnRead;
 
-               Boardpath := ExtractFilePath(Board.GetFolderIndexFileName);
                //\83C\83\93\83f\83b\83N\83X\82É\96³\82©\82Á\82½\83\8d\83O\82ð\92Ç\89Á\81i\95\85\82ê\83C\83\93\83f\83b\83N\83X\91Î\89\9e\81j
-               for i := 0 to FileList.Count - 1 do begin
-                       FileName := Boardpath + FileList[i];
-
-                       //ResRec := DivideStrLine(ReadThreadFile(FileName, 1));
-                       if usePlugIn then begin
-                               ThreadItem := TThreadItem.Create(
-                                       Board.BoardPlugIn,
-                                       Board,
-                                       Board.BoardPlugIn.FileName2ThreadURL( DWORD( Board ), FileList[i] ) );
-                               THTMLCreate.DivideStrLine(Board.BoardPlugIn.GetDat( DWORD( ThreadItem ), 1 ), @ResRec);
-                       end else begin
-                               ThreadItem := TThreadItem.Create(
-                                       nil,
-                                       Board,
-                                       Get2chBoard2ThreadURL( Board, ChangeFileExt( FileList[i], '' ) ) );
-                               THTMLCreate.DivideStrLine(ReadThreadFile(FileName, 1), @ResRec);
-                       end;
-
-                       ThreadItem.BeginUpdate;
-                       ThreadItem.FileName := FileList[i];
-                       //ThreadItem.FilePath := FileName;
-                       ThreadItem.No := Board.Count + 1;
-                       ThreadItem.Title := ResRec.FTitle;
-                       ThreadItem.Count := GetFileLineCount(FileName);
-                       ThreadItem.AllResCount := ThreadItem.Count;
-                       ThreadItem.NewResCount := ThreadItem.Count;
-                       ThreadItem.Size := GetFileSize(FileName) - ThreadItem.Count;//1byte\82¸\82ê\82é\82Æ\82«\82ª\82 \82é\82¯\82Ç\82»\82ê\82Í\82 \82«\82ç\82ß\82é
-                       ThreadItem.RoundDate := FileDateToDateTime( FileAge( FileName ) );
-                       ThreadItem.LastModified := ThreadItem.RoundDate;
-                       ThreadItem.Kokomade := -1;
-                       ThreadItem.NewReceive := 0;
-                       ThreadItem.ParentBoard := Board;
-                       ThreadItem.IsLogFile := True;
-                       ThreadItem.Round := False;
-                       ThreadItem.UnRead := False;
-                       ThreadItem.ScrollTop := 0;
-                       ThreadItem.AgeSage := gasNone;
-                       ThreadItem.EndUpdate;
-                       Board.Add(ThreadItem);
-               end;
+        AddOutofIndexDat(Board, FileList);
                Board.EndUpdate;
-        
+
         //\91O\89ñ\88Ù\8fí\8fI\97¹\8e\9e\83`\83F\83b\83N
         RestoreThreadData( Board );
        finally
@@ -726,7 +684,61 @@ begin
        end;
        Board.IsThreadDatRead := True;
 end;
-
+{!
+\brief \83C\83\93\83f\83b\83N\83X\82É\82È\82¢dat\81i\82Í\82®\82êdat\81j\82Ì\92Ç\89Á
+\param Board \92Ç\89Á\82·\82é\94Â
+\param DatList  dat\83t\83@\83C\83\8b\96¼
+}
+procedure TGikoSys.AddOutofIndexDat(Board: TBoard; DatList: TStringList);
+var
+    i : Integer;
+    Boardpath,FileName : String;
+    ResRec: TResRec;
+    ThreadItem: TThreadItem;
+begin
+    Boardpath := ExtractFilePath(Board.GetFolderIndexFileName);
+    //\83C\83\93\83f\83b\83N\83X\82É\96³\82©\82Á\82½\83\8d\83O\82ð\92Ç\89Á\81i\95\85\82ê\83C\83\93\83f\83b\83N\83X\91Î\89\9e\81j
+    for i := 0 to DatList.Count - 1 do begin
+        FileName := Boardpath + DatList[i];
+
+        //ResRec := DivideStrLine(ReadThreadFile(FileName, 1));
+        if Board.IsBoardPlugInAvailable then begin
+            ThreadItem := TThreadItem.Create(
+                Board.BoardPlugIn,
+                Board,
+                Board.BoardPlugIn.FileName2ThreadURL( DWORD( Board ), DatList[i] ) );
+            THTMLCreate.DivideStrLine(Board.BoardPlugIn.GetDat( DWORD( ThreadItem ), 1 ), @ResRec);
+        end else begin
+            ThreadItem := TThreadItem.Create(
+                nil,
+                Board,
+                Get2chBoard2ThreadURL( Board, ChangeFileExt( DatList[i], '' ) ) );
+            THTMLCreate.DivideStrLine(ReadThreadFile(FileName, 1), @ResRec);
+        end;
+
+        ThreadItem.BeginUpdate;
+        ThreadItem.FileName := DatList[i];
+        //ThreadItem.FilePath := FileName;
+        ThreadItem.No := Board.Count + 1;
+        ThreadItem.Title := ResRec.FTitle;
+        ThreadItem.Count := GetFileLineCount(FileName);
+        ThreadItem.AllResCount := ThreadItem.Count;
+        ThreadItem.NewResCount := ThreadItem.Count;
+        ThreadItem.Size := GetFileSize(FileName) - ThreadItem.Count;//1byte\82¸\82ê\82é\82Æ\82«\82ª\82 \82é\82¯\82Ç\82»\82ê\82Í\82 \82«\82ç\82ß\82é
+        ThreadItem.RoundDate := FileDateToDateTime( FileAge( FileName ) );
+        ThreadItem.LastModified := ThreadItem.RoundDate;
+        ThreadItem.Kokomade := -1;
+        ThreadItem.NewReceive := 0;
+        ThreadItem.ParentBoard := Board;
+        ThreadItem.IsLogFile := True;
+        ThreadItem.Round := False;
+        ThreadItem.UnRead := False;
+        ThreadItem.ScrollTop := 0;
+        ThreadItem.AgeSage := gasNone;
+        ThreadItem.EndUpdate;
+        Board.Add(ThreadItem);
+    end;
+end;
 {!
 \brief \83X\83\8c\83b\83h\83C\83\93\83f\83b\83N\83X\83t\83@\83C\83\8b(Folder.idx)\8dì\90¬
 \param Board Folder.idx \82ð\8dì\90¬\82·\82é\94Â
@@ -885,21 +897,21 @@ end;
 }
 function TGikoSys.ParseIndexLine(Line: string): TIndexRec;
 begin
-       Result.FNo := StrToIntDef('$' + RemoveToken(Line, #1), 0);
-       Result.FFileName := RemoveToken(Line, #1);
-       Result.FTitle := MojuUtils.UnSanitize(RemoveToken(Line, #1));
-       Result.FCount := StrToIntDef('$' + RemoveToken(Line, #1), 0);
-       Result.FSize := StrToIntDef('$' + RemoveToken(Line, #1), 0);
-       Result.FRoundDate := IntToDateTime(StrToIntDef('$' + RemoveToken(Line, #1), ZERO_DATE));
-       Result.FLastModified := IntToDateTime(StrToIntDef('$' + RemoveToken(Line, #1), ZERO_DATE));
-       Result.FKokomade := StrToIntDef('$' + RemoveToken(Line, #1), -1);
-       Result.FNewReceive := StrToIntDef('$' + RemoveToken(Line, #1), 0);
+       Result.FNo := StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0);
+       Result.FFileName := MojuUtils.RemoveToken(Line, #1);
+       Result.FTitle := MojuUtils.UnSanitize(MojuUtils.RemoveToken(Line, #1));
+       Result.FCount := StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0);
+       Result.FSize := StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0);
+       Result.FRoundDate := IntToDateTime(StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), ZERO_DATE));
+       Result.FLastModified := IntToDateTime(StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), ZERO_DATE));
+       Result.FKokomade := StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), -1);
+       Result.FNewReceive := StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0);
        RemoveToken(Line, #1);//9: ;    //\96¢\8eg\97p
-       Result.FUnRead := IntToBool(StrToIntDef('$' + RemoveToken(Line, #1), 0));
-       Result.FScrollTop := StrToIntDef('$' + RemoveToken(Line, #1), 0);
-       Result.FAllResCount := StrToIntDef('$' + RemoveToken(Line, #1), 0);
-       Result.FNewResCount := StrToIntDef('$' + RemoveToken(Line, #1), 0);
-       Result.FAgeSage := TGikoAgeSage(StrToIntDef('$' + RemoveToken(Line, #1), 0));
+       Result.FUnRead := IntToBool(StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0));
+       Result.FScrollTop := StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0);
+       Result.FAllResCount := StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0);
+       Result.FNewResCount := StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0);
+       Result.FAgeSage := TGikoAgeSage(StrToIntDef('$' + MojuUtils.RemoveToken(Line, #1), 0));
 
 end;
 
index 1bc547e..149e1a4 100644 (file)
Binary files a/gikoNavi.res and b/gikoNavi.res differ