1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        wx/html/helpdata.h 
   3 // Purpose:     wxHtmlHelpData 
   4 // Notes:       Based on htmlhelp.cpp, implementing a monolithic 
   5 //              HTML Help controller class,  by Vaclav Slavik 
   6 // Author:      Harm van der Heijden and Vaclav Slavik 
   8 // Copyright:   (c) Harm van der Heijden and Vaclav Slavik 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 #ifndef _WX_HELPDATA_H_ 
  13 #define _WX_HELPDATA_H_ 
  19 #include "wx/object.h" 
  20 #include "wx/string.h" 
  21 #include "wx/filesys.h" 
  22 #include "wx/dynarray.h" 
  25 class WXDLLIMPEXP_FWD_HTML wxHtmlHelpData
; 
  27 //-------------------------------------------------------------------------------- 
  28 // helper classes & structs 
  29 //-------------------------------------------------------------------------------- 
  31 class WXDLLIMPEXP_HTML wxHtmlBookRecord
 
  34     wxHtmlBookRecord(const wxString
& bookfile
, const wxString
& basepath
, 
  35                      const wxString
& title
, const wxString
& start
) 
  37         m_BookFile 
= bookfile
; 
  38         m_BasePath 
= basepath
; 
  41         // for debugging, give the contents index obvious default values 
  42         m_ContentsStart 
= m_ContentsEnd 
= -1; 
  44     wxString 
GetBookFile() const { return m_BookFile
; } 
  45     wxString 
GetTitle() const { return m_Title
; } 
  46     wxString 
GetStart() const { return m_Start
; } 
  47     wxString 
GetBasePath() const { return m_BasePath
; } 
  48     /* SetContentsRange: store in the bookrecord where in the index/contents lists the 
  49      * book's records are stored. This to facilitate searching in a specific book. 
  50      * This code will have to be revised when loading/removing books becomes dynamic. 
  51      * (as opposed to appending only) 
  52      * Note that storing index range is pointless, because the index is alphab. sorted. */ 
  53     void SetContentsRange(int start
, int end
) { m_ContentsStart 
= start
; m_ContentsEnd 
= end
; } 
  54     int GetContentsStart() const { return m_ContentsStart
; } 
  55     int GetContentsEnd() const { return m_ContentsEnd
; } 
  57     void SetTitle(const wxString
& title
) { m_Title 
= title
; } 
  58     void SetBasePath(const wxString
& path
) { m_BasePath 
= path
; } 
  59     void SetStart(const wxString
& start
) { m_Start 
= start
; } 
  61     // returns full filename of page (which is part of the book), 
  62     // i.e. with book's basePath prepended. If page is already absolute 
  63     // path, basePath is _not_ prepended. 
  64     wxString 
GetFullPath(const wxString 
&page
) const; 
  76 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxHtmlBookRecord
, wxHtmlBookRecArray
, 
  79 struct WXDLLIMPEXP_HTML wxHtmlHelpDataItem
 
  81     wxHtmlHelpDataItem() : level(0), parent(NULL
), id(wxID_ANY
), book(NULL
) {} 
  84     wxHtmlHelpDataItem 
*parent
; 
  88     wxHtmlBookRecord 
*book
; 
  90     // returns full filename of m_Page, i.e. with book's basePath prepended 
  91     wxString 
GetFullPath() const { return book
->GetFullPath(page
); } 
  93     // returns item indented with spaces if it has level>1: 
  94     wxString 
GetIndentedName() const; 
  97 WX_DECLARE_USER_EXPORTED_OBJARRAY(wxHtmlHelpDataItem
, wxHtmlHelpDataItems
, 
 101 //------------------------------------------------------------------------------ 
 102 // wxHtmlSearchEngine 
 103 //                  This class takes input streams and scans them for occurrence 
 105 //------------------------------------------------------------------------------ 
 107 class WXDLLIMPEXP_HTML wxHtmlSearchEngine 
: public wxObject
 
 110     wxHtmlSearchEngine() : wxObject() {} 
 111     virtual ~wxHtmlSearchEngine() {} 
 113     // Sets the keyword we will be searching for 
 114     virtual void LookFor(const wxString
& keyword
, bool case_sensitive
, bool whole_words_only
); 
 116     // Scans the stream for the keyword. 
 117     // Returns true if the stream contains keyword, fALSE otherwise 
 118     virtual bool Scan(const wxFSFile
& file
); 
 122     bool m_CaseSensitive
; 
 125     wxDECLARE_NO_COPY_CLASS(wxHtmlSearchEngine
); 
 129 // State information of a search action. I'd have preferred to make this a 
 130 // nested class inside wxHtmlHelpData, but that's against coding standards :-( 
 131 // Never construct this class yourself, obtain a copy from 
 132 // wxHtmlHelpData::PrepareKeywordSearch(const wxString& key) 
 133 class WXDLLIMPEXP_HTML wxHtmlSearchStatus
 
 136     // constructor; supply wxHtmlHelpData ptr, the keyword and (optionally) the 
 137     // title of the book to search. By default, all books are searched. 
 138     wxHtmlSearchStatus(wxHtmlHelpData
* base
, const wxString
& keyword
, 
 139                        bool case_sensitive
, bool whole_words_only
, 
 140                        const wxString
& book 
= wxEmptyString
); 
 141     bool Search();  // do the next iteration 
 142     bool IsActive() { return m_Active
; } 
 143     int GetCurIndex() { return m_CurIndex
; } 
 144     int GetMaxIndex() { return m_MaxIndex
; } 
 145     const wxString
& GetName() { return m_Name
; } 
 147     const wxHtmlHelpDataItem 
*GetCurItem() const { return m_CurItem
; } 
 150     wxHtmlHelpData
* m_Data
; 
 151     wxHtmlSearchEngine m_Engine
; 
 152     wxString m_Keyword
, m_Name
; 
 154     wxHtmlHelpDataItem
* m_CurItem
; 
 155     bool m_Active
;   // search is not finished 
 156     int m_CurIndex
;  // where we are now 
 157     int m_MaxIndex
;  // number of files we search 
 158     // For progress bar: 100*curindex/maxindex = % complete 
 160     wxDECLARE_NO_COPY_CLASS(wxHtmlSearchStatus
); 
 163 class WXDLLIMPEXP_HTML wxHtmlHelpData 
: public wxObject
 
 165     DECLARE_DYNAMIC_CLASS(wxHtmlHelpData
) 
 166     friend class wxHtmlSearchStatus
; 
 170     virtual ~wxHtmlHelpData(); 
 172     // Sets directory where temporary files are stored. 
 173     // These temp files are index & contents file in binary (much faster to read) 
 174     // form. These files are NOT deleted on program's exit. 
 175     void SetTempDir(const wxString
& path
); 
 177     // Adds new book. 'book' is location of .htb file (stands for "html book"). 
 178     // See documentation for details on its format. 
 180     bool AddBook(const wxString
& book
); 
 181     bool AddBookParam(const wxFSFile
& bookfile
, 
 182                       wxFontEncoding encoding
, 
 183                       const wxString
& title
, const wxString
& contfile
, 
 184                       const wxString
& indexfile 
= wxEmptyString
, 
 185                       const wxString
& deftopic 
= wxEmptyString
, 
 186                       const wxString
& path 
= wxEmptyString
); 
 188     // Some accessing stuff: 
 190     // returns URL of page on basis of (file)name 
 191     wxString 
FindPageByName(const wxString
& page
); 
 192     // returns URL of page on basis of MS id 
 193     wxString 
FindPageById(int id
); 
 195     const wxHtmlBookRecArray
& GetBookRecArray() const { return m_bookRecords
; } 
 197     const wxHtmlHelpDataItems
& GetContentsArray() const { return m_contents
; } 
 198     const wxHtmlHelpDataItems
& GetIndexArray() const { return m_index
; } 
 203     // each book has one record in this array: 
 204     wxHtmlBookRecArray m_bookRecords
; 
 206     wxHtmlHelpDataItems m_contents
; // list of all available books and pages 
 207     wxHtmlHelpDataItems m_index
; // list of index itesm 
 210     // Imports .hhp files (MS HTML Help Workshop) 
 211     bool LoadMSProject(wxHtmlBookRecord 
*book
, wxFileSystem
& fsys
, 
 212                        const wxString
& indexfile
, const wxString
& contentsfile
); 
 214     bool LoadCachedBook(wxHtmlBookRecord 
*book
, wxInputStream 
*f
); 
 215     // Writes binary book 
 216     bool SaveCachedBook(wxHtmlBookRecord 
*book
, wxOutputStream 
*f
); 
 218     wxDECLARE_NO_COPY_CLASS(wxHtmlHelpData
);