From 957fb2456088cd3150dcccc5d34eea3021302a39 Mon Sep 17 00:00:00 2001 From: andrew Date: Fri, 30 Jul 2010 22:35:04 +0000 Subject: [PATCH] * lhelp title now shows the active chm title and the titles of all open chms git-svn-id: trunk@26915 - --- .../chmhelp/lhelp/basecontentprovider.pas | 6 ++- .../chmhelp/lhelp/chmcontentprovider.pas | 39 ++++++++++++++++--- components/chmhelp/lhelp/lhelpcore.pas | 10 +++++ 3 files changed, 49 insertions(+), 6 deletions(-) diff --git a/components/chmhelp/lhelp/basecontentprovider.pas b/components/chmhelp/lhelp/basecontentprovider.pas index fb177a63f2..20190fae24 100644 --- a/components/chmhelp/lhelp/basecontentprovider.pas +++ b/components/chmhelp/lhelp/basecontentprovider.pas @@ -14,6 +14,7 @@ type TBaseContentProviderClass = Class of TBaseContentProvider; TBaseContentProvider = class(TObject) private + FOnTitleChange: TNotifyEvent; fParent: TWinControl; FTitle: String; FConfig: TXMLConfig; @@ -36,6 +37,7 @@ type destructor Destroy; override; property Parent: TWinControl read fParent; property Title: String read GetTitle write SetTitle; + property OnTitleChange: TNotifyEvent read FOnTitleChange write FOnTitleChange; end; @@ -86,12 +88,14 @@ end; function TBaseContentProvider.GetTitle: String; begin - Result := ''; + Result := FTitle; end; procedure TBaseContentProvider.SetTitle(const AValue: String); begin FTitle := AValue; + if Assigned(FOnTitleChange) then + FOnTitleChange(Self); end; procedure TBaseContentProvider.LoadPreferences(ACfg: TXMLConfig); diff --git a/components/chmhelp/lhelp/chmcontentprovider.pas b/components/chmhelp/lhelp/chmcontentprovider.pas index b717c52b2a..e369de1ecf 100644 --- a/components/chmhelp/lhelp/chmcontentprovider.pas +++ b/components/chmhelp/lhelp/chmcontentprovider.pas @@ -56,6 +56,7 @@ type fHistoryIndex: Integer; fStopTimer: Boolean; fFillingToc: Boolean; + fActiveChmTitle: String; function MakeURI(AUrl: String; AChm: TChmReader): String; @@ -74,6 +75,7 @@ type procedure ContentsTreeSelectionChanged(Sender: TObject); procedure IndexViewDblClick(Sender: TObject); procedure ViewMenuContentsClick(Sender: TObject); + procedure UpdateTitle; procedure SetTitle(const AValue: String); override; procedure SearchEditChange(Sender: TObject); procedure TOCExpand(Sender: TObject; Node: TTreeNode); @@ -201,7 +203,7 @@ begin // Code Here has been moved to the OpenFile handler //FileMenuCloseItem.Enabled := True; - if fChms.Chm[0].Title <> '' then SetTitle(fChms.Chm[0].Title); + UpdateTitle; end; procedure TChmContentProvider.DoCloseChm; @@ -215,6 +217,7 @@ begin fChms.Chm[i].Free; end; FreeAndNil(fChms); + UpdateTitle; end; procedure TChmContentProvider.DoLoadContext(Context: THelpContext); @@ -314,6 +317,7 @@ begin {$ENDIF} if fChm <> nil then begin ParentNode := fContentsTree.Items.AddChildObject(nil, fChm.Title, fChm); + UpdateTitle; ParentNode.ImageIndex := 0; ParentNode.SelectedIndex := 0; {$IFDEF CHM_BINARY_INDEX_TOC} @@ -385,7 +389,7 @@ begin fSearchTab.TabVisible := HasSearchIndex; {$ENDIF} - + UpdateTitle; end; procedure TChmContentProvider.IpHtmlPanelDocumentOpen(Sender: TObject); @@ -417,7 +421,8 @@ begin if not(fContentsTree.Selected is TContentTreeNode) then begin fChm := TChmReader(fContentsTree.Selected.Data); - SetTitle(fChm.Title); + fActiveChmTitle:= fChm.Title; + UpdateTitle; if fChm.DefaultPage <> '' then DoLoadUri(MakeURI(fChm.DefaultPage, fChm)); Exit; @@ -464,6 +469,29 @@ begin //TabPanel.Visible := Splitter1.Visible; end; +procedure TChmContentProvider.UpdateTitle; +var + Item: TTreeNode; + NewTitle: String; +begin + Item := fContentsTree.Items.GetFirstNode; + NewTitle:=fActiveChmTitle +' ['; + while Item <> nil do + begin + if ITem.Text <> fActiveChmTitle then + begin + NewTitle:=NewTitle+Item.Text; + if (Item.GetNextSibling <> nil) + and ((Item.GetNextSibling.GetNextSibling <> nil) or (Item.GetNextSibling.Text <> fActiveChmTitle)) + then + NewTitle:=NewTitle+', '; + end; + Item := Item.GetNextSibling; + end; + NewTitle:=NewTitle+']'; + Title := NewTitle; +end; + procedure TChmContentProvider.SetTitle(const AValue: String); begin if fHtml.Parent = nil then exit; @@ -529,7 +557,8 @@ begin begin if FileName = ExtractFileName(fChms.FileName[i]) then begin - SetTitle(fChms.Chm[i].Title); + fActiveChmTitle:= fChms.Chm[i].Title; + UpdateTitle; RootNode := fContentsTree.Items.FindNodeWithData(fChms.Chm[i]); if URL = fChms.Chm[i].DefaultPage then @@ -806,7 +835,7 @@ begin if fURL <> '' then DoLoadUri(MakeURI(fURL, fChms.Chm[FileIndex])) else - GoHome; + DoLoadUri(MakeURI(fChms.Chm[FileIndex].DefaultPage, fChms.Chm[FileIndex])); Result := True; if LoadTOC and (FileIndex = 0) then diff --git a/components/chmhelp/lhelp/lhelpcore.pas b/components/chmhelp/lhelp/lhelpcore.pas index c2bc4c7219..53d726e641 100644 --- a/components/chmhelp/lhelp/lhelpcore.pas +++ b/components/chmhelp/lhelp/lhelpcore.pas @@ -99,6 +99,7 @@ type procedure LoadPreferences(AIPCName: String); procedure SavePreferences(AIPCName: String); procedure AddRecentFile(AFileName: String); + procedure ContentTitleChange(sender: TObject); procedure OpenRecentItemClick(Sender: TObject); procedure SendResponse(Response: DWord); procedure ServerMessage(Sender: TObject); @@ -348,6 +349,14 @@ begin end; +procedure THelpForm.ContentTitleChange(sender: TObject); +begin + //if ActivePage = nil then + // Exit; + + Caption := 'LHelp - ' + ActivePage.fContentProvider.Title; +end; + procedure THelpForm.OpenRecentItemClick(Sender: TObject); var Item: TRecentMenuItem absolute Sender; @@ -550,6 +559,7 @@ begin //no page was found already to handle this content so create one fPage := TContentTab.Create(PageControl); fPage.ContentProvider := fRealContentProvider.Create(fPage, ImageList1); + fPAge.ContentProvider.OnTitleChange:=@ContentTitleChange; fPage.Parent := PageControl; SetKeyUp(fPage); fPage.ContentProvider.LoadPreferences(fConfig);