From d5bb85a0a4f28df1b966481de9a320806bbb1471 Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Wed, 27 Oct 1999 23:26:24 +0000 Subject: [PATCH 1/1] cleaned Harm's new wxHTML help code git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@4227 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/html/helpctrl.h | 100 +++--- include/wx/html/helpdata.h | 234 ++++++------- include/wx/html/helpfrm.h | 258 ++++++++------- samples/html/help/helpfiles/another.hhp | 3 - src/html/helpctrl.cpp | 31 +- src/html/helpdata.cpp | 154 ++++++--- src/html/helpfrm.cpp | 420 ++++++++++++------------ src/html/search.cpp | 74 ----- 8 files changed, 632 insertions(+), 642 deletions(-) delete mode 100644 src/html/search.cpp diff --git a/include/wx/html/helpctrl.h b/include/wx/html/helpctrl.h index acb0b04d7f..30dcac00de 100644 --- a/include/wx/html/helpctrl.h +++ b/include/wx/html/helpctrl.h @@ -24,53 +24,63 @@ class WXDLLEXPORT wxHtmlHelpController : public wxEvtHandler { - DECLARE_DYNAMIC_CLASS(wxHtmlHelpController) + DECLARE_DYNAMIC_CLASS(wxHtmlHelpController) -public: - wxHtmlHelpController(); - virtual ~wxHtmlHelpController(); + public: + wxHtmlHelpController(int style = wxHF_DEFAULTSTYLE); + virtual ~wxHtmlHelpController(); - void SetTitleFormat(const wxString& format); - void SetTempDir(const wxString& path) { m_helpData.SetTempDir(path); } - bool AddBook(const wxString& book, bool show_wait_msg = FALSE); - bool Display(const wxString& x) { - CreateHelpWindow(); return m_helpFrame->Display(x); - } - bool Display(int id) { - CreateHelpWindow(); return m_helpFrame->Display(id); - } - bool DisplayContents() { - CreateHelpWindow(); return m_helpFrame->DisplayContents(); - } - bool DisplayIndex() { - CreateHelpWindow(); return m_helpFrame->DisplayIndex(); - } - bool KeywordSearch(const wxString& keyword) { - CreateHelpWindow(); return KeywordSearch(keyword); - } - wxHtmlHelpFrame* GetFrame() { return m_helpFrame; } - void UseConfig(wxConfigBase *config, const wxString& rootpath = wxEmptyString) { - m_Config = config; m_ConfigRoot = rootpath; - ReadCustomization(config, rootpath); - } - // Assigns config object to the Ctrl. This config is then - // used in subsequent calls to Read/WriteCustomization of both help - // Ctrl and it's wxHtmlWindow - virtual void ReadCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); - virtual void WriteCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); - virtual void CreateHelpWindow(bool show_progress = FALSE); - virtual void DestroyHelpWindow() { - //if (m_Config) WriteCustomization(m_Config, m_ConfigRoot); - if (m_helpFrame) m_helpFrame->Destroy(); - } -protected: - void OnCloseFrame(wxCloseEvent& evt) { m_helpFrame = NULL; evt.Skip(); } - wxHtmlHelpData m_helpData; - wxHtmlHelpFrame* m_helpFrame; - wxConfigBase *m_Config; - wxString m_ConfigRoot; - wxString m_titleFormat; - DECLARE_EVENT_TABLE() + void SetTitleFormat(const wxString& format); + void SetTempDir(const wxString& path) { m_helpData.SetTempDir(path); } + bool AddBook(const wxString& book, bool show_wait_msg = FALSE); + bool Display(const wxString& x) + { + CreateHelpWindow(); return m_helpFrame->Display(x); + } + bool Display(int id) + { + CreateHelpWindow(); return m_helpFrame->Display(id); + } + bool DisplayContents() + { + CreateHelpWindow(); return m_helpFrame->DisplayContents(); + } + bool DisplayIndex() + { + CreateHelpWindow(); return m_helpFrame->DisplayIndex(); + } + bool KeywordSearch(const wxString& keyword) + { + CreateHelpWindow(); return KeywordSearch(keyword); + } + wxHtmlHelpFrame* GetFrame() { return m_helpFrame; } + void UseConfig(wxConfigBase *config, const wxString& rootpath = wxEmptyString) + { + m_Config = config; + m_ConfigRoot = rootpath; + ReadCustomization(config, rootpath); + } + // Assigns config object to the Ctrl. This config is then + // used in subsequent calls to Read/WriteCustomization of both help + // Ctrl and it's wxHtmlWindow + virtual void ReadCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); + virtual void WriteCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); + virtual void CreateHelpWindow(bool show_progress = FALSE); + virtual void DestroyHelpWindow() + { + //if (m_Config) WriteCustomization(m_Config, m_ConfigRoot); + if (m_helpFrame) m_helpFrame->Destroy(); + } + + protected: + void OnCloseFrame(wxCloseEvent& evt) { m_helpFrame = NULL; evt.Skip(); } + wxHtmlHelpData m_helpData; + wxHtmlHelpFrame* m_helpFrame; + wxConfigBase *m_Config; + wxString m_ConfigRoot; + wxString m_titleFormat; + int m_FrameStyle; + DECLARE_EVENT_TABLE() }; #endif diff --git a/include/wx/html/helpdata.h b/include/wx/html/helpdata.h index abc04b35ed..02214510c9 100644 --- a/include/wx/html/helpdata.h +++ b/include/wx/html/helpdata.h @@ -31,30 +31,34 @@ class WXDLLEXPORT wxHtmlBookRecord : public wxObject { -public: - wxHtmlBookRecord(const wxString& basepath, const wxString& title, - const wxString& start) { - m_BasePath = basepath; m_Title = title; m_Start = start; - // for debugging, give the contents index obvious default values - contents_start = contents_end = -1; - } - wxString GetTitle() const {return m_Title;} - wxString GetStart() const {return m_Start;} - wxString GetBasePath() const {return m_BasePath;} - /* SetContentsRange: store in the bookrecord where in the index/contents lists the - * book's records are stored. This to facilitate searching in a specific book. - * This code will have to be revised when loading/removing books becomes dynamic. - * (as opposed to appending only) - * Note that storing index range is pointless, because the index is alphab. sorted. */ - void SetContentsRange(int start, int end) { contents_start = start; contents_end = end; } - int GetContentsStart() const { return contents_start; } - int GetContentsEnd() const { return contents_end; } -protected: - wxString m_BasePath; - wxString m_Title; - wxString m_Start; - int contents_start; - int contents_end; + public: + wxHtmlBookRecord(const wxString& basepath, const wxString& title, + const wxString& start) + { + m_BasePath = basepath; + m_Title = title; + m_Start = start; + // for debugging, give the contents index obvious default values + m_ContentsStart = m_ContentsEnd = -1; + } + wxString GetTitle() const { return m_Title; } + wxString GetStart() const { return m_Start; } + wxString GetBasePath() const { return m_BasePath; } + /* SetContentsRange: store in the bookrecord where in the index/contents lists the + * book's records are stored. This to facilitate searching in a specific book. + * This code will have to be revised when loading/removing books becomes dynamic. + * (as opposed to appending only) + * Note that storing index range is pointless, because the index is alphab. sorted. */ + void SetContentsRange(int start, int end) { m_ContentsStart = start; m_ContentsEnd = end; } + int GetContentsStart() const { return m_ContentsStart; } + int GetContentsEnd() const { return m_ContentsEnd; } + + protected: + wxString m_BasePath; + wxString m_Title; + wxString m_Start; + int m_ContentsStart; + int m_ContentsEnd; }; @@ -68,7 +72,8 @@ typedef struct char* m_Name; char* m_Page; wxHtmlBookRecord *m_Book; -} wxHtmlContentsItem; +} +wxHtmlContentsItem; //------------------------------------------------------------------------------ // wxSearchEngine @@ -77,20 +82,21 @@ typedef struct //------------------------------------------------------------------------------ class WXDLLEXPORT wxSearchEngine : public wxObject { -private: - char *m_Keyword; + private: + char *m_Keyword; -public: - wxSearchEngine() : wxObject() {m_Keyword = NULL;} - ~wxSearchEngine() {if (m_Keyword) free(m_Keyword);} + public: + wxSearchEngine() : wxObject() {m_Keyword = NULL; } + ~wxSearchEngine() {if (m_Keyword) free(m_Keyword); } - virtual void LookFor(const wxString& keyword); - // Sets the keyword we will be searching for + virtual void LookFor(const wxString& keyword); + // Sets the keyword we will be searching for - virtual bool Scan(wxInputStream *stream); - // Scans the stream for the keyword. - // Returns TRUE if the stream contains keyword, fALSE otherwise -}; + virtual bool Scan(wxInputStream *stream); + // Scans the stream for the keyword. + // Returns TRUE if the stream contains keyword, fALSE otherwise +} +; class wxHtmlHelpData; @@ -100,85 +106,89 @@ class wxHtmlHelpData; // wxHtmlHelpData::PrepareKeywordSearch(const wxString& key) class WXDLLEXPORT wxHtmlSearchStatus { -public: - // constructor; supply wxHtmlHelpData ptr, the keyword and (optionally) the - // title of the book to search. By default, all books are searched. - wxHtmlSearchStatus(wxHtmlHelpData* base, const wxString& keyword, - const wxString& book = wxEmptyString); - bool Search(); // do the next iteration - bool IsActive() { return m_Active; } - int GetCurIndex() { return m_CurIndex; } - int GetMaxIndex() { return m_MaxIndex; } - const wxString& GetName() { return m_Name; } - wxHtmlContentsItem* GetContentsItem() { return m_ContentsItem; } -private: - wxHtmlHelpData* m_Data; - wxSearchEngine m_Engine; - wxString m_Keyword, m_Name, m_LastPage; - wxHtmlContentsItem* m_ContentsItem; - bool m_Active; // search is not finished - int m_CurIndex; // where we are now - int m_MaxIndex; // number of files we search - // For progress bar: 100*curindex/maxindex = % complete -}; + public: + // constructor; supply wxHtmlHelpData ptr, the keyword and (optionally) the + // title of the book to search. By default, all books are searched. + + wxHtmlSearchStatus(wxHtmlHelpData* base, const wxString& keyword, + const wxString& book = wxEmptyString); + bool Search(); // do the next iteration + bool IsActive() { return m_Active; } + int GetCurIndex() { return m_CurIndex; } + int GetMaxIndex() { return m_MaxIndex; } + const wxString& GetName() { return m_Name; } + wxHtmlContentsItem* GetContentsItem() { return m_ContentsItem; } + + private: + wxHtmlHelpData* m_Data; + wxSearchEngine m_Engine; + wxString m_Keyword, m_Name, m_LastPage; + wxHtmlContentsItem* m_ContentsItem; + bool m_Active; // search is not finished + int m_CurIndex; // where we are now + int m_MaxIndex; // number of files we search + // For progress bar: 100*curindex/maxindex = % complete +} +; class WXDLLEXPORT wxHtmlHelpData : public wxObject { - DECLARE_DYNAMIC_CLASS(wxHtmlHelpData) - - friend class wxHtmlSearchStatus; - -public: - wxHtmlHelpData(); - ~wxHtmlHelpData(); - - void SetTempDir(const wxString& path); - // Sets directory where temporary files are stored. - // These temp files are index & contents file in binary (much faster to read) - // form. These files are NOT deleted on program's exit. - - bool AddBook(const wxString& book); - // Adds new book. 'book' is location of .htb file (stands for "html book"). - // See documentation for details on its format. - // Returns success. - bool AddBookParam(const wxString& title, const wxString& contfile, - const wxString& indexfile=wxEmptyString, - const wxString& deftopic=wxEmptyString, - const wxString& path=wxEmptyString); - - // Some accessing stuff - wxString FindPageByName(const wxString& page); - // returns URL of page on basis of (file)name - wxString FindPageById(int id); - // returns URL of page on basis of MS id - - const wxHtmlBookRecArray& GetBookRecArray() { return m_BookRecords; } - wxHtmlContentsItem* GetContents() { return m_Contents; } - int GetContentsCnt() { return m_ContentsCnt; } - wxHtmlContentsItem* GetIndex() { return m_Index; } - int GetIndexCnt() { return m_IndexCnt; } - -protected: - wxString m_TempPath; - - wxHtmlBookRecArray m_BookRecords; - // each book has one record in this array - wxHtmlContentsItem* m_Contents; - int m_ContentsCnt; - // list of all available books and pages. - wxHtmlContentsItem* m_Index; - int m_IndexCnt; - // list of index items - -protected: - bool LoadMSProject(wxHtmlBookRecord *book, wxFileSystem& fsys, - const wxString& indexfile, const wxString& contentsfile); - // Imports .hhp files (MS HTML Help Workshop) - bool LoadCachedBook(wxHtmlBookRecord *book, wxInputStream *f); - // Reads binary book - bool SaveCachedBook(wxHtmlBookRecord *book, wxOutputStream *f); - // Writes binary book -}; + DECLARE_DYNAMIC_CLASS(wxHtmlHelpData) + + friend class wxHtmlSearchStatus; + + public: + wxHtmlHelpData(); + ~wxHtmlHelpData(); + + void SetTempDir(const wxString& path); + // Sets directory where temporary files are stored. + // These temp files are index & contents file in binary (much faster to read) + // form. These files are NOT deleted on program's exit. + + bool AddBook(const wxString& book); + // Adds new book. 'book' is location of .htb file (stands for "html book"). + // See documentation for details on its format. + // Returns success. + bool AddBookParam(const wxString& title, const wxString& contfile, + const wxString& indexfile = wxEmptyString, + const wxString& deftopic = wxEmptyString, + const wxString& path = wxEmptyString); + + // Some accessing stuff + wxString FindPageByName(const wxString& page); + // returns URL of page on basis of (file)name + wxString FindPageById(int id); + // returns URL of page on basis of MS id + + const wxHtmlBookRecArray& GetBookRecArray() { return m_BookRecords; } + wxHtmlContentsItem* GetContents() { return m_Contents; } + int GetContentsCnt() { return m_ContentsCnt; } + wxHtmlContentsItem* GetIndex() { return m_Index; } + int GetIndexCnt() { return m_IndexCnt; } + + protected: + wxString m_TempPath; + + wxHtmlBookRecArray m_BookRecords; + // each book has one record in this array + wxHtmlContentsItem* m_Contents; + int m_ContentsCnt; + // list of all available books and pages. + wxHtmlContentsItem* m_Index; + int m_IndexCnt; + // list of index items + + protected: + bool LoadMSProject(wxHtmlBookRecord *book, wxFileSystem& fsys, + const wxString& indexfile, const wxString& contentsfile); + // Imports .hhp files (MS HTML Help Workshop) + bool LoadCachedBook(wxHtmlBookRecord *book, wxInputStream *f); + // Reads binary book + bool SaveCachedBook(wxHtmlBookRecord *book, wxOutputStream *f); + // Writes binary book +} +; #endif diff --git a/include/wx/html/helpfrm.h b/include/wx/html/helpfrm.h index b523856ce9..b227572e2b 100644 --- a/include/wx/html/helpfrm.h +++ b/include/wx/html/helpfrm.h @@ -30,15 +30,18 @@ #include "wx/choice.h" #include "wx/html/htmlwin.h" + // style flags for the Help Frame -const int wxHF_TOOLBAR = 1; -const int wxHF_CONTENTS = 2; -const int wxHF_INDEX = 4; -const int wxHF_SEARCH = 8; -const int wxHF_DEFAULTSTYLE = -1; +#define wxHF_TOOLBAR 0x0001 +#define wxHF_CONTENTS 0x0002 +#define wxHF_INDEX 0x0004 +#define wxHF_SEARCH 0x0008 +#define wxHF_DEFAULTSTYLE (wxHF_TOOLBAR | wxHF_CONTENTS | wxHF_INDEX | wxHF_SEARCH) + // Command IDs : -enum { +enum +{ wxID_HTML_PANEL = wxID_HIGHEST + 1, wxID_HTML_BACK, wxID_HTML_FORWARD, @@ -52,130 +55,135 @@ enum { wxID_HTML_SEARCHBUTTON, wxID_HTML_SEARCHCHOICE, wxID_HTML_HELPFRAME // the id of wxHtmlHelpController's helpframe -}; +} +; -class WXDLLEXPORT wxHtmlHelpFrameCfg + +typedef struct { -public: - wxHtmlHelpFrameCfg() {}; - long x, y, w, h; - long sashpos; - bool navig_on; - int style; // flags given to wxHtmlHelpFrame ctor - wxString titleformat; -}; + long x, y, w, h; + long sashpos; + bool navig_on; +} +wxHtmlHelpFrameCfg; + + class WXDLLEXPORT wxHtmlHelpFrame : public wxFrame { - DECLARE_DYNAMIC_CLASS(wxHtmlHelpFrame) - -public: - wxHtmlHelpFrame(wxHtmlHelpData* data = NULL) { Init(data); } - wxHtmlHelpFrame(wxWindow* parent, int wxWindowID, - const wxString& title = wxEmptyString, - int style = wxHF_DEFAULTSTYLE, wxHtmlHelpData* data = NULL); - bool Create(wxWindow* parent, wxWindowID id, const wxString& title = wxEmptyString, - int style = wxHF_DEFAULTSTYLE); - ~wxHtmlHelpFrame(); - - wxHtmlHelpData* GetData() { return m_Data; } - - void SetTitleFormat(const wxString& format) { - if (m_HtmlWin) - m_HtmlWin->SetRelatedFrame(this, format); - m_TitleFormat = format; - } - // Sets format of title of the frame. Must contain exactly one "%s" - // (for title of displayed HTML page) - - bool Display(const wxString& x); - // Displays page x. If not found it will offect the user a choice of - // searching books. - // Looking for the page runs in these steps: - // 1. try to locate file named x (if x is for example "doc/howto.htm") - // 2. try to open starting page of book x - // 3. try to find x in contents (if x is for example "How To ...") - // 4. try to find x in index (if x is for example "How To ...") - bool Display(const int id); - // Alternative version that works with numeric ID. - // (uses extension to MS format, , see docs) - - bool DisplayContents(); - // Displays help window and focuses contents. - - bool DisplayIndex(); - // Displays help window and focuses index. - - bool KeywordSearch(const wxString& keyword); - // Searches for keyword. Returns TRUE and display page if found, return - // FALSE otherwise - // Syntax of keyword is Altavista-like: - // * words are separated by spaces - // (but "\"hello world\"" is only one world "hello world") - // * word may be pretended by + or - - // (+ : page must contain the word ; - : page can't contain the word) - // * if there is no + or - before the word, + is default - void RefreshLists(bool show_progress = FALSE); - // Refreshes Contents and Index tabs - void CreateContents(bool show_progress = FALSE); - // Adds items to m_Contents tree control - void CreateIndex(bool show_progress = FALSE); - // Adds items to m_IndexList - void CreateSearch(); - // Add books to search choice panel - void UseConfig(wxConfigBase *config, const wxString& rootpath = wxEmptyString) { - m_Config = config; m_ConfigRoot = rootpath; - ReadCustomization(config, rootpath); - } - void ReadCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); - // saves custom settings into cfg config. it will use the path 'path' - // if given, otherwise it will save info into currently selected path. - // saved values : things set by SetFonts, SetBorders. - void WriteCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); - // ... - void OnToolbar(wxCommandEvent& event); - void OnContentsSel(wxTreeEvent& event); - void OnIndexSel(wxCommandEvent& event); - void OnSearchSel(wxCommandEvent& event); - void OnSearch(wxCommandEvent& event); - void OnCloseWindow(wxCloseEvent& event); - - // Images: - enum { - IMG_Book = 0, - IMG_Folder, - IMG_Page - }; - -protected: - wxHtmlHelpData* m_Data; - bool m_DataCreated; // m_Data created by frame, or supplied? - wxString m_TitleFormat; // title of the help frame - // below are various pointers to GUI components - wxHtmlWindow *m_HtmlWin; - wxSplitterWindow *m_Splitter; - wxNotebook *m_NavigPan; - wxTreeCtrl *m_ContentsBox; - wxImageList *m_ContentsImageList; - wxListBox *m_IndexBox; - wxTextCtrl *m_SearchText; - wxButton *m_SearchButton; - wxListBox *m_SearchList; - wxChoice *m_SearchChoice; - - wxHtmlHelpFrameCfg m_Cfg; - wxConfigBase *m_Config; - wxString m_ConfigRoot; - - // pagenumbers of controls in notebook (usually 0,1,2) - int m_ContentsPage; - int m_IndexPage; - int m_SearchPage; - -protected: - void Init(wxHtmlHelpData* data = NULL); - - DECLARE_EVENT_TABLE() + DECLARE_DYNAMIC_CLASS(wxHtmlHelpFrame) + + public: + wxHtmlHelpFrame(wxHtmlHelpData* data = NULL) { Init(data); } + wxHtmlHelpFrame(wxWindow* parent, int wxWindowID, + const wxString& title = wxEmptyString, + int style = wxHF_DEFAULTSTYLE, wxHtmlHelpData* data = NULL); + bool Create(wxWindow* parent, wxWindowID id, const wxString& title = wxEmptyString, + int style = wxHF_DEFAULTSTYLE); + ~wxHtmlHelpFrame(); + + wxHtmlHelpData* GetData() { return m_Data; } + + void SetTitleFormat(const wxString& format) + { + if (m_HtmlWin) + m_HtmlWin->SetRelatedFrame(this, format); + m_TitleFormat = format; + } + // Sets format of title of the frame. Must contain exactly one "%s" + // (for title of displayed HTML page) + + bool Display(const wxString& x); + // Displays page x. If not found it will offect the user a choice of + // searching books. + // Looking for the page runs in these steps: + // 1. try to locate file named x (if x is for example "doc/howto.htm") + // 2. try to open starting page of book x + // 3. try to find x in contents (if x is for example "How To ...") + // 4. try to find x in index (if x is for example "How To ...") + bool Display(const int id); + // Alternative version that works with numeric ID. + // (uses extension to MS format, , see docs) + + bool DisplayContents(); + // Displays help window and focuses contents. + + bool DisplayIndex(); + // Displays help window and focuses index. + + bool KeywordSearch(const wxString& keyword); + // Searches for keyword. Returns TRUE and display page if found, return + // FALSE otherwise + // Syntax of keyword is Altavista-like: + // * words are separated by spaces + // (but "\"hello world\"" is only one world "hello world") + // * word may be pretended by + or - + // (+ : page must contain the word ; - : page can't contain the word) + // * if there is no + or - before the word, + is default + void RefreshLists(bool show_progress = FALSE); + // Refreshes Contents and Index tabs + void CreateContents(bool show_progress = FALSE); + // Adds items to m_Contents tree control + void CreateIndex(bool show_progress = FALSE); + // Adds items to m_IndexList + void CreateSearch(); + // Add books to search choice panel + void UseConfig(wxConfigBase *config, const wxString& rootpath = wxEmptyString) + { + m_Config = config; + m_ConfigRoot = rootpath; + ReadCustomization(config, rootpath); + } + void ReadCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); + // saves custom settings into cfg config. it will use the path 'path' + // if given, otherwise it will save info into currently selected path. + // saved values : things set by SetFonts, SetBorders. + void WriteCustomization(wxConfigBase *cfg, const wxString& path = wxEmptyString); + // ... + void OnToolbar(wxCommandEvent& event); + void OnContentsSel(wxTreeEvent& event); + void OnIndexSel(wxCommandEvent& event); + void OnSearchSel(wxCommandEvent& event); + void OnSearch(wxCommandEvent& event); + void OnCloseWindow(wxCloseEvent& event); + + // Images: + enum { + IMG_Book = 0, + IMG_Folder, + IMG_Page + }; + + protected: + wxHtmlHelpData* m_Data; + bool m_DataCreated; // m_Data created by frame, or supplied? + wxString m_TitleFormat; // title of the help frame + // below are various pointers to GUI components + wxHtmlWindow *m_HtmlWin; + wxSplitterWindow *m_Splitter; + wxNotebook *m_NavigPan; + wxTreeCtrl *m_ContentsBox; + wxImageList *m_ContentsImageList; + wxListBox *m_IndexBox; + wxTextCtrl *m_SearchText; + wxButton *m_SearchButton; + wxListBox *m_SearchList; + wxChoice *m_SearchChoice; + + wxHtmlHelpFrameCfg m_Cfg; + + wxConfigBase *m_Config; + wxString m_ConfigRoot; + + // pagenumbers of controls in notebook (usually 0,1,2) + int m_ContentsPage; + int m_IndexPage; + int m_SearchPage; + + protected: + void Init(wxHtmlHelpData* data = NULL); + + DECLARE_EVENT_TABLE() }; #endif diff --git a/samples/html/help/helpfiles/another.hhp b/samples/html/help/helpfiles/another.hhp index 7f808a5ea2..017ed2427c 100644 --- a/samples/html/help/helpfiles/another.hhp +++ b/samples/html/help/helpfiles/another.hhp @@ -4,6 +4,3 @@ Contents file=another.hhc Display compile progress=No Title=Another book Default topic=another.htm -Embarassment=extra line because project parsing is slightly buggy - - diff --git a/src/html/helpctrl.cpp b/src/html/helpctrl.cpp index e25e606060..51de63e771 100644 --- a/src/html/helpctrl.cpp +++ b/src/html/helpctrl.cpp @@ -31,31 +31,33 @@ IMPLEMENT_DYNAMIC_CLASS(wxHtmlHelpController, wxEvtHandler) BEGIN_EVENT_TABLE(wxHtmlHelpController, wxEvtHandler) - EVT_CLOSE(wxHtmlHelpController::OnCloseFrame) +EVT_CLOSE(wxHtmlHelpController::OnCloseFrame) END_EVENT_TABLE() -wxHtmlHelpController::wxHtmlHelpController() +wxHtmlHelpController::wxHtmlHelpController(int style) { m_helpFrame = NULL; m_Config = NULL; m_ConfigRoot = wxEmptyString; m_titleFormat = _("Help: %s"); + m_FrameStyle = style; } wxHtmlHelpController::~wxHtmlHelpController() { WriteCustomization(m_Config, m_ConfigRoot); if (m_helpFrame) - m_helpFrame->Close(); + m_helpFrame->Close(); } void wxHtmlHelpController::SetTitleFormat(const wxString& title) { m_titleFormat = title; if (m_helpFrame) - m_helpFrame->SetTitleFormat(title); + m_helpFrame->SetTitleFormat(title); } + bool wxHtmlHelpController::AddBook(const wxString& book, bool show_wait_msg) { wxBusyCursor cur; @@ -63,29 +65,30 @@ bool wxHtmlHelpController::AddBook(const wxString& book, bool show_wait_msg) wxBusyInfo* busy = NULL; wxString info; if (show_wait_msg) { - info.Printf(_("Adding book %s"), book.c_str()); - busy = new wxBusyInfo(info); + info.Printf(_("Adding book %s"), book.c_str()); + busy = new wxBusyInfo(info); } #endif bool retval = m_helpData.AddBook(book); #if wxUSE_BUSYINFO if (show_wait_msg) - delete busy; -#endif + delete busy; +#endif return retval; } void wxHtmlHelpController::CreateHelpWindow(bool show_progress) { if (m_helpFrame) { - m_helpFrame->Raise(); - return; + m_helpFrame->Raise(); + return ; } m_helpFrame = new wxHtmlHelpFrame(&m_helpData); + m_helpFrame->PushEventHandler(this); if (m_Config) - m_helpFrame->UseConfig(m_Config, m_ConfigRoot); - m_helpFrame->Create(NULL, wxID_HTML_HELPFRAME); + m_helpFrame->UseConfig(m_Config, m_ConfigRoot); + m_helpFrame->Create(NULL, wxID_HTML_HELPFRAME, wxEmptyString, m_FrameStyle); m_helpFrame->RefreshLists(show_progress); m_helpFrame->SetTitleFormat(m_titleFormat); m_helpFrame->Show(TRUE); @@ -96,14 +99,14 @@ void wxHtmlHelpController::ReadCustomization(wxConfigBase* cfg, const wxString& /* should not be called by the user; call UseConfig, and the controller * will do the rest */ if (m_helpFrame) - m_helpFrame->ReadCustomization(cfg, path); + m_helpFrame->ReadCustomization(cfg, path); } void wxHtmlHelpController::WriteCustomization(wxConfigBase* cfg, const wxString& path) { /* typically called by the controllers OnCloseFrame handler */ if (m_helpFrame) - m_helpFrame->WriteCustomization(cfg, path); + m_helpFrame->WriteCustomization(cfg, path); } #endif diff --git a/src/html/helpdata.cpp b/src/html/helpdata.cpp index 6c187b1327..966786542a 100644 --- a/src/html/helpdata.cpp +++ b/src/html/helpdata.cpp @@ -95,15 +95,15 @@ class HP_TagHandler : public wxHtmlTagHandler private: wxString m_Name, m_Page; int m_Level; - int m_ID; + int m_ID; int m_Index; wxHtmlContentsItem *m_Items; int m_ItemsCnt; wxHtmlBookRecord *m_Book; public: - HP_TagHandler(wxHtmlBookRecord *b) : wxHtmlTagHandler() {m_Book = b; m_Items = NULL; m_ItemsCnt = 0; m_Name = m_Page = wxEmptyString; m_Level = 0;} - wxString GetSupportedTags() {return "UL,OBJECT,PARAM";} + HP_TagHandler(wxHtmlBookRecord *b) : wxHtmlTagHandler() {m_Book = b; m_Items = NULL; m_ItemsCnt = 0; m_Name = m_Page = wxEmptyString; m_Level = 0; } + wxString GetSupportedTags() { return "UL,OBJECT,PARAM"; } bool HandleTag(const wxHtmlTag& tag); void WriteOut(wxHtmlContentsItem*& array, int& size); void ReadIn(wxHtmlContentsItem* array, int size); @@ -118,7 +118,6 @@ bool HP_TagHandler::HandleTag(const wxHtmlTag& tag) m_Level--; return TRUE; } - else if (tag.GetName() == "OBJECT") { m_Name = m_Page = wxEmptyString; ParseInner(tag); @@ -136,7 +135,6 @@ bool HP_TagHandler::HandleTag(const wxHtmlTag& tag) } return TRUE; } - else { // "PARAM" if (m_Name == wxEmptyString && tag.GetParam("NAME") == "Name") m_Name = tag.GetParam("VALUE"); if (tag.GetParam("NAME") == "Local") m_Page = tag.GetParam("VALUE"); @@ -161,6 +159,9 @@ void HP_TagHandler::ReadIn(wxHtmlContentsItem* array, int size) m_ItemsCnt = size; } + + + //----------------------------------------------------------------------------- // wxHtmlHelpData //----------------------------------------------------------------------------- @@ -212,7 +213,7 @@ bool wxHtmlHelpData::LoadMSProject(wxHtmlBookRecord *book, wxFileSystem& fsys, c f = ( contentsfile.IsEmpty() ? 0 : fsys.OpenFile(contentsfile) ); if (f) { sz = f -> GetStream() -> GetSize(); - buf = new char[sz+1]; + buf = new char[sz + 1]; buf[sz] = 0; f -> GetStream() -> Read(buf, sz); delete f; @@ -225,7 +226,7 @@ bool wxHtmlHelpData::LoadMSProject(wxHtmlBookRecord *book, wxFileSystem& fsys, c f = ( indexfile.IsEmpty() ? 0 : fsys.OpenFile(indexfile) ); if (f) { sz = f -> GetStream() -> GetSize(); - buf = new char[sz+1]; + buf = new char[sz + 1]; buf[sz] = 0; f -> GetStream() -> Read(buf, sz); delete f; @@ -328,18 +329,18 @@ void wxHtmlHelpData::SetTempDir(const wxString& path) { if (path == wxEmptyString) m_TempPath = path; else { - if (wxIsAbsolutePath(path)) m_TempPath = path; - else m_TempPath = wxGetCwd() + "/" + path; + if (wxIsAbsolutePath(path)) m_TempPath = path; + else m_TempPath = wxGetCwd() + "/" + path; - if (m_TempPath[m_TempPath.Length() - 1] != '/') + if (m_TempPath[m_TempPath.Length() - 1] != '/') m_TempPath << "/"; } } bool wxHtmlHelpData::AddBookParam(const wxString& title, const wxString& contfile, - const wxString& indexfile, const wxString& deftopic, - const wxString& path) + const wxString& indexfile, const wxString& deftopic, + const wxString& path) { wxFileSystem fsys; wxFSFile *fi; @@ -347,10 +348,9 @@ bool wxHtmlHelpData::AddBookParam(const wxString& title, const wxString& contfil wxString safetitle; if (! path.IsEmpty()) - // workaround for bug in ChangePathTo(name, TRUE) - fsys.ChangePathTo(path+"/gaga"); + fsys.ChangePathTo(path, TRUE); - bookr = new wxHtmlBookRecord(path+'/', title, deftopic); + bookr = new wxHtmlBookRecord(path + '/', title, deftopic); if (m_ContentsCnt % wxHTML_REALLOC_STEP == 0) m_Contents = (wxHtmlContentsItem*) realloc(m_Contents, (m_ContentsCnt + wxHTML_REALLOC_STEP) * sizeof(wxHtmlContentsItem)); @@ -372,12 +372,11 @@ bool wxHtmlHelpData::AddBookParam(const wxString& title, const wxString& contfil if ((fi == NULL) || (m_TempPath == wxEmptyString)) { LoadMSProject(bookr, fsys, indexfile, contfile); if (m_TempPath != wxEmptyString) { - wxFileOutputStream *outs = new wxFileOutputStream(m_TempPath + safetitle + ".cached"); + wxFileOutputStream *outs = new wxFileOutputStream(m_TempPath + safetitle + ".cached"); SaveCachedBook(bookr, outs); delete outs; - } - } - else { + } + } else { LoadCachedBook(bookr, fi -> GetStream()); delete fi; } @@ -405,9 +404,9 @@ bool wxHtmlHelpData::AddBook(const wxString& book) char linebuf[300]; wxString title = _("noname"), - safetitle, - start = wxEmptyString, - contents = wxEmptyString, index = wxEmptyString; + safetitle, + start = wxEmptyString, + contents = wxEmptyString, index = wxEmptyString; if (wxIsAbsolutePath(book)) bookFull = book; else bookFull = wxGetCwd() + "/" + book; @@ -417,13 +416,15 @@ bool wxHtmlHelpData::AddBook(const wxString& book) fsys.ChangePathTo(bookFull); s = fi -> GetStream(); sz = s -> GetSize(); - buff = new char[sz+1]; + buff = new char[sz + 1]; buff[sz] = 0; s -> Read(buff, sz); lineptr = buff; delete fi; - while ((lineptr = ReadLine(lineptr, linebuf)) != NULL) { + do { + lineptr = ReadLine(lineptr, linebuf); + if (strstr(linebuf, "Title=") == linebuf) title = linebuf + strlen("Title="); if (strstr(linebuf, "Default topic=") == linebuf) @@ -432,7 +433,7 @@ bool wxHtmlHelpData::AddBook(const wxString& book) index = linebuf + strlen("Index file="); if (strstr(linebuf, "Contents file=") == linebuf) contents = linebuf + strlen("Contents file="); - } + } while (lineptr != NULL); delete[] buff; return AddBookParam(title, contents, index, start, fsys.GetPath()); @@ -512,28 +513,28 @@ wxString wxHtmlHelpData::FindPageById(int id) //---------------------------------------------------------------------------------- wxHtmlSearchStatus::wxHtmlSearchStatus(wxHtmlHelpData* data, const wxString& keyword, - const wxString& book) + const wxString& book) { m_Data = data; m_Keyword = keyword; wxHtmlBookRecord* bookr = NULL; if (book != wxEmptyString) { - // we have to search in a specific book. Find it first - int i,cnt = data->m_BookRecords.GetCount(); - for (i=0; im_BookRecords[i].GetTitle() == book) { - bookr = &(data->m_BookRecords[i]); - m_CurIndex = bookr->GetContentsStart(); - m_MaxIndex = bookr->GetContentsEnd(); - break; - } - // check; we won't crash if the book doesn't exist, but it's Bad Anyway. - wxASSERT(bookr); + // we have to search in a specific book. Find it first + int i, cnt = data->m_BookRecords.GetCount(); + for (i = 0; i < cnt; i++) + if (data->m_BookRecords[i].GetTitle() == book) { + bookr = &(data->m_BookRecords[i]); + m_CurIndex = bookr->GetContentsStart(); + m_MaxIndex = bookr->GetContentsEnd(); + break; + } + // check; we won't crash if the book doesn't exist, but it's Bad Anyway. + wxASSERT(bookr); } if (! bookr) { - // no book specified; search all books - m_CurIndex = 0; - m_MaxIndex = m_Data->m_ContentsCnt; + // no book specified; search all books + m_CurIndex = 0; + m_MaxIndex = m_Data->m_ContentsCnt; } m_Engine.LookFor(keyword); m_Active = (m_CurIndex < m_MaxIndex); @@ -544,7 +545,7 @@ bool wxHtmlSearchStatus::Search() { wxFileSystem fsys; wxFSFile *file; - int i = m_CurIndex; // shortcut + int i = m_CurIndex; // shortcut bool found = FALSE; if (! m_Active) { @@ -561,20 +562,71 @@ wxASSERT(m_Active); m_Name = wxEmptyString; file = fsys.OpenFile(m_Data->m_Contents[i].m_Book -> GetBasePath() + - m_Data->m_Contents[i].m_Page); + m_Data->m_Contents[i].m_Page); if (file) { - if (m_LastPage != file->GetLocation()) { - m_LastPage = file->GetLocation(); - if (m_Engine.Scan(file -> GetStream())) { - m_Name = m_Data->m_Contents[i].m_Name; - m_ContentsItem = m_Data->m_Contents + i; - found = TRUE; - } - } - delete file; + if (m_LastPage != file->GetLocation()) { + m_LastPage = file->GetLocation(); + if (m_Engine.Scan(file -> GetStream())) { + m_Name = m_Data->m_Contents[i].m_Name; + m_ContentsItem = m_Data->m_Contents + i; + found = TRUE; + } + } + delete file; } m_Active = (++m_CurIndex < m_MaxIndex); return found; } + + + + + + + +//-------------------------------------------------------------------------------- +// wxSearchEngine +//-------------------------------------------------------------------------------- + +void wxSearchEngine::LookFor(const wxString& keyword) +{ + if (m_Keyword) delete[] m_Keyword; + m_Keyword = new char[keyword.Length() + 1]; + strcpy(m_Keyword, keyword.c_str()); + for (int i = strlen(m_Keyword) - 1; i >= 0; i--) + if ((m_Keyword[i] >= 'A') && (m_Keyword[i] <= 'Z')) + m_Keyword[i] += 'a' - 'A'; +} + + + +bool wxSearchEngine::Scan(wxInputStream *stream) +{ + wxASSERT_MSG(m_Keyword != NULL, _("wxSearchEngine::LookFor must be called before scanning!")); + + int i, j; + int lng = stream ->GetSize(); + int wrd = strlen(m_Keyword); + bool found = FALSE; + char *buf = new char[lng + 1]; + stream -> Read(buf, lng); + buf[lng] = 0; + + for (i = 0; i < lng; i++) + if ((buf[i] >= 'A') && (buf[i] <= 'Z')) buf[i] += 'a' - 'A'; + + for (i = 0; i < lng - wrd; i++) { + j = 0; + while ((j < wrd) && (buf[i + j] == m_Keyword[j])) j++; + if (j == wrd) {found = TRUE; break; } + } + + delete[] buf; + return found; +} + + + + #endif diff --git a/src/html/helpfrm.cpp b/src/html/helpfrm.cpp index 4c69ea484e..d99173552d 100644 --- a/src/html/helpfrm.cpp +++ b/src/html/helpfrm.cpp @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// // Name: helpfrm.cpp // Purpose: wxHtmlHelpFrame -// Notes: Based on htmlhelp.cpp, implementing a monolithic +// Notes: Based on htmlhelp.cpp, implementing a monolithic // HTML Help controller class, by Vaclav Slavik // Author: Harm van der Heijden and Vaclav Slavik // RCS-ID: $Id$ @@ -53,7 +53,7 @@ // number of times that the contents/index creation progress dialog // is updated. -static const int PROGRESS_STEP = 40; +#define PROGRESS_STEP 40 //-------------------------------------------------------------------------- // wxHtmlHelpTreeItemData @@ -65,11 +65,11 @@ class wxHtmlHelpTreeItemData : public wxTreeItemData wxString m_Page; public: - wxHtmlHelpTreeItemData(wxHtmlContentsItem *it) : wxTreeItemData() - { - m_Page = it -> m_Book -> GetBasePath() + it -> m_Page; - } - const wxString& GetPage() {return m_Page;} + wxHtmlHelpTreeItemData(wxHtmlContentsItem *it) : wxTreeItemData() + { + m_Page = it -> m_Book -> GetBasePath() + it -> m_Page; + } + const wxString& GetPage() { return m_Page; } }; //--------------------------------------------------------------------------- @@ -79,21 +79,20 @@ class wxHtmlHelpTreeItemData : public wxTreeItemData IMPLEMENT_DYNAMIC_CLASS(wxHtmlHelpFrame, wxFrame) wxHtmlHelpFrame::wxHtmlHelpFrame(wxWindow* parent, wxWindowID id, const wxString& title, - int style, wxHtmlHelpData* data) + int style, wxHtmlHelpData* data) { Init(data); Create(parent, id, title, style); } - + void wxHtmlHelpFrame::Init(wxHtmlHelpData* data) { if (data) { - m_Data = data; - m_DataCreated = FALSE; - } - else { - m_Data = new wxHtmlHelpData(); - m_DataCreated = TRUE; + m_Data = data; + m_DataCreated = FALSE; + } else { + m_Data = new wxHtmlHelpData(); + m_DataCreated = TRUE; } m_ContentsImageList = new wxImageList(12, 12); @@ -114,179 +113,171 @@ void wxHtmlHelpFrame::Init(wxHtmlHelpData* data) m_ConfigRoot = wxEmptyString; m_Cfg.x = m_Cfg.y = 0; - m_Cfg.w = 700; m_Cfg.h = 480; + m_Cfg.w = 700; + m_Cfg.h = 480; m_Cfg.sashpos = 240; m_Cfg.navig_on = TRUE; - m_Cfg.titleformat = _("Help: %s"); - m_Cfg.style = wxHF_TOOLBAR | wxHF_CONTENTS | wxHF_INDEX | wxHF_SEARCH; } -/* Create: builds the GUI components. - * with the style flag it's possible to toggle the toolbar, contents, index and search - * controls. - * m_HtmlWin will *always* be created, but it's important to realize that - * m_ContentsBox, m_IndexBox, m_SearchList, m_SearchButton, m_SearchText and - * m_SearchButton may be NULL. - * moreover, if no contents, index or searchpage is needed, m_Splitter and - * m_NavigPan will be NULL too (with m_HtmlWin directly connected to the frame) - */ +// Create: builds the GUI components. +// with the style flag it's possible to toggle the toolbar, contents, index and search +// controls. +// m_HtmlWin will *always* be created, but it's important to realize that +// m_ContentsBox, m_IndexBox, m_SearchList, m_SearchButton, m_SearchText and +// m_SearchButton may be NULL. +// moreover, if no contents, index or searchpage is needed, m_Splitter and +// m_NavigPan will be NULL too (with m_HtmlWin directly connected to the frame) + bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, const wxString& title, - int style) + int style) { // Do the config in two steps. We read the HtmlWindow customization after we // create the window. - if (m_Config) - ReadCustomization(m_Config, m_ConfigRoot); + if (m_Config) + ReadCustomization(m_Config, m_ConfigRoot); wxFrame::Create(parent, id, "", wxPoint(m_Cfg.x, m_Cfg.y), wxSize(m_Cfg.w, m_Cfg.h)); - if (style == wxHF_DEFAULTSTYLE) - style = m_Cfg.style; - - if (! title.IsEmpty()) // overridden? - m_Cfg.titleformat = title; - int notebook_page = 0; CreateStatusBar(); // toolbar? if (style & wxHF_TOOLBAR) { - wxToolBar *toolBar = CreateToolBar(wxNO_BORDER | wxTB_HORIZONTAL | wxTB_FLAT | - wxTB_DOCKABLE); - toolBar -> SetMargins(2, 2); - wxBitmap* toolBarBitmaps[3]; + wxToolBar *toolBar = CreateToolBar(wxNO_BORDER | wxTB_HORIZONTAL | /*wxTB_FLAT | */ + wxTB_DOCKABLE); + toolBar -> SetMargins(2, 2); + wxBitmap* toolBarBitmaps[3]; #ifdef __WXMSW__ - toolBarBitmaps[0] = new wxBitmap("panel"); - toolBarBitmaps[1] = new wxBitmap("back"); - toolBarBitmaps[2] = new wxBitmap("forward"); - int width = 24; + toolBarBitmaps[0] = new wxBitmap("panel"); + toolBarBitmaps[1] = new wxBitmap("back"); + toolBarBitmaps[2] = new wxBitmap("forward"); + int width = 24; #else - toolBarBitmaps[0] = new wxBitmap(panel_xpm); - toolBarBitmaps[1] = new wxBitmap(back_xpm); - toolBarBitmaps[2] = new wxBitmap(forward_xpm); - int width = 16; +toolBarBitmaps[0] = new wxBitmap(panel_xpm); + toolBarBitmaps[1] = new wxBitmap(back_xpm); + toolBarBitmaps[2] = new wxBitmap(forward_xpm); + int width = 16; #endif - int currentX = 5; - - toolBar -> AddTool(wxID_HTML_PANEL, *(toolBarBitmaps[0]), wxNullBitmap, - FALSE, currentX, -1, (wxObject *) NULL, - _("Show/hide navigation panel")); - currentX += width + 5; - toolBar -> AddSeparator(); - toolBar -> AddTool(wxID_HTML_BACK, *(toolBarBitmaps[1]), wxNullBitmap, - FALSE, currentX, -1, (wxObject *) NULL, - _("Go back to the previous HTML page")); - currentX += width + 5; - toolBar -> AddTool(wxID_HTML_FORWARD, *(toolBarBitmaps[2]), wxNullBitmap, - FALSE, currentX, -1, (wxObject *) NULL, - _("Go forward to the next HTML page")); - currentX += width + 5; - - toolBar -> Realize(); - - // Can delete the bitmaps since they're reference counted - for (int i = 0; i < 3; i++) - delete toolBarBitmaps[i]; + int currentX = 5; + + toolBar -> AddTool(wxID_HTML_PANEL, *(toolBarBitmaps[0]), wxNullBitmap, + FALSE, currentX, -1, (wxObject *) NULL, + _("Show/hide navigation panel")); + currentX += width + 5; + toolBar -> AddSeparator(); + toolBar -> AddTool(wxID_HTML_BACK, *(toolBarBitmaps[1]), wxNullBitmap, + FALSE, currentX, -1, (wxObject *) NULL, + _("Go back to the previous HTML page")); + currentX += width + 5; + toolBar -> AddTool(wxID_HTML_FORWARD, *(toolBarBitmaps[2]), wxNullBitmap, + FALSE, currentX, -1, (wxObject *) NULL, + _("Go forward to the next HTML page")); + currentX += width + 5; + + toolBar -> Realize(); + + // Can delete the bitmaps since they're reference counted + for (int i = 0; i < 3; i++) + delete toolBarBitmaps[i]; } - + if (style & (wxHF_CONTENTS | wxHF_INDEX | wxHF_SEARCH)) { - // traditional help controller; splitter window with html page on the - // right and a notebook containing various pages on the left - m_Splitter = new wxSplitterWindow(this); - - m_HtmlWin = new wxHtmlWindow(m_Splitter); - m_NavigPan = new wxNotebook(m_Splitter, wxID_HTML_NOTEBOOK, - wxDefaultPosition, wxDefaultSize); - } - else { // only html window, no notebook with index,contents etc - m_HtmlWin = new wxHtmlWindow(this); + // traditional help controller; splitter window with html page on the + // right and a notebook containing various pages on the left + m_Splitter = new wxSplitterWindow(this); + + m_HtmlWin = new wxHtmlWindow(m_Splitter); + m_NavigPan = new wxNotebook(m_Splitter, wxID_HTML_NOTEBOOK, + wxDefaultPosition, wxDefaultSize); + } else { // only html window, no notebook with index,contents etc + m_HtmlWin = new wxHtmlWindow(this); } m_HtmlWin -> SetRelatedFrame(this, m_TitleFormat); m_HtmlWin -> SetRelatedStatusBar(0); - if (m_Config) - m_HtmlWin -> ReadCustomization(m_Config, m_ConfigRoot); + if (m_Config) + m_HtmlWin -> ReadCustomization(m_Config, m_ConfigRoot); // contents tree panel? if (style & wxHF_CONTENTS) { - m_ContentsBox = new wxTreeCtrl(m_NavigPan, wxID_HTML_TREECTRL, - wxDefaultPosition, wxDefaultSize, - wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); - m_ContentsBox -> SetImageList(m_ContentsImageList); - m_NavigPan -> AddPage(m_ContentsBox, _("Contents")); - m_ContentsPage = notebook_page++; + m_ContentsBox = new wxTreeCtrl(m_NavigPan, wxID_HTML_TREECTRL, + wxDefaultPosition, wxDefaultSize, + wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); + m_ContentsBox -> SetImageList(m_ContentsImageList); + m_NavigPan -> AddPage(m_ContentsBox, _("Contents")); + m_ContentsPage = notebook_page++; } // index listbox panel? if (style & wxHF_INDEX) { - wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_INDEXPAGE); - wxLayoutConstraints *b1 = new wxLayoutConstraints; - b1 -> top.SameAs (dummy, wxTop, 0); - b1 -> left.SameAs (dummy, wxLeft, 0); - b1 -> width.PercentOf (dummy, wxWidth, 100); - b1 -> bottom.SameAs (dummy, wxBottom, 0); - m_IndexBox = new wxListBox(dummy, wxID_HTML_INDEXLIST, wxDefaultPosition, - wxDefaultSize, 0, NULL, wxLB_SINGLE |wxLB_ALWAYS_SB); - m_IndexBox -> SetConstraints(b1); - dummy -> SetAutoLayout(TRUE); - m_NavigPan -> AddPage(dummy, _("Index")); - m_IndexPage = notebook_page++; + wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_INDEXPAGE); + wxLayoutConstraints *b1 = new wxLayoutConstraints; + b1 -> top.SameAs (dummy, wxTop, 0); + b1 -> left.SameAs (dummy, wxLeft, 0); + b1 -> width.PercentOf (dummy, wxWidth, 100); + b1 -> bottom.SameAs (dummy, wxBottom, 0); + m_IndexBox = new wxListBox(dummy, wxID_HTML_INDEXLIST, wxDefaultPosition, + wxDefaultSize, 0, NULL, wxLB_SINGLE | wxLB_ALWAYS_SB); + m_IndexBox -> SetConstraints(b1); + dummy -> SetAutoLayout(TRUE); + m_NavigPan -> AddPage(dummy, _("Index")); + m_IndexPage = notebook_page++; } // search list panel? if (style & wxHF_SEARCH) { - wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_SEARCHPAGE); - - wxLayoutConstraints *b1 = new wxLayoutConstraints; - m_SearchText = new wxTextCtrl(dummy, wxID_HTML_SEARCHTEXT); - b1 -> top.SameAs (dummy, wxTop, 10); - b1 -> left.SameAs (dummy, wxLeft, 10); - b1 -> right.SameAs (dummy, wxRight, 10); - b1 -> height.AsIs(); - m_SearchText -> SetConstraints(b1); - - wxLayoutConstraints *b2 = new wxLayoutConstraints; - m_SearchButton = new wxButton(dummy, wxID_HTML_SEARCHBUTTON, _("Search")); - b2 -> top.Below (m_SearchText, 10); - b2 -> left.SameAs (dummy, wxLeft, 10); - b2 -> width.AsIs(); - b2 -> height.AsIs(); - m_SearchButton -> SetConstraints(b2); - - wxLayoutConstraints *b3 = new wxLayoutConstraints; - m_SearchList = new wxListBox(dummy, wxID_HTML_SEARCHLIST, wxDefaultPosition, wxDefaultSize, 0); - b3 -> top.Below (m_SearchButton, 10); - b3 -> left.SameAs (dummy, wxLeft, 0); - b3 -> right.SameAs (dummy, wxRight, 0); - b3 -> bottom.SameAs (dummy, wxBottom, 0); - m_SearchList -> SetConstraints(b3); - - wxLayoutConstraints *b4 = new wxLayoutConstraints; - m_SearchChoice = new wxChoice(dummy, wxID_HTML_SEARCHCHOICE, wxDefaultPosition, - wxDefaultSize); - b4 -> top.Below (m_SearchText, 10); - b4 -> left.SameAs (m_SearchButton, wxRight, 10); - b4 -> right.SameAs (dummy, wxRight, 10); - b4 -> height.AsIs(); - m_SearchChoice -> SetConstraints(b4); - - dummy -> SetAutoLayout(TRUE); - dummy -> Layout(); - m_NavigPan -> AddPage(dummy, _("Search")); - m_SearchPage = notebook_page++; + wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_SEARCHPAGE); + + wxLayoutConstraints *b1 = new wxLayoutConstraints; + m_SearchText = new wxTextCtrl(dummy, wxID_HTML_SEARCHTEXT); + b1 -> top.SameAs (dummy, wxTop, 10); + b1 -> left.SameAs (dummy, wxLeft, 10); + b1 -> right.SameAs (dummy, wxRight, 10); + b1 -> height.AsIs(); + m_SearchText -> SetConstraints(b1); + + wxLayoutConstraints *b2 = new wxLayoutConstraints; + m_SearchButton = new wxButton(dummy, wxID_HTML_SEARCHBUTTON, _("Search")); + b2 -> top.Below (m_SearchText, 10); + b2 -> left.SameAs (dummy, wxLeft, 10); + b2 -> width.AsIs(); + b2 -> height.AsIs(); + m_SearchButton -> SetConstraints(b2); + + wxLayoutConstraints *b3 = new wxLayoutConstraints; + m_SearchList = new wxListBox(dummy, wxID_HTML_SEARCHLIST, wxDefaultPosition, wxDefaultSize, 0); + b3 -> top.Below (m_SearchButton, 10); + b3 -> left.SameAs (dummy, wxLeft, 0); + b3 -> right.SameAs (dummy, wxRight, 0); + b3 -> bottom.SameAs (dummy, wxBottom, 0); + m_SearchList -> SetConstraints(b3); + + wxLayoutConstraints *b4 = new wxLayoutConstraints; + m_SearchChoice = new wxChoice(dummy, wxID_HTML_SEARCHCHOICE, wxDefaultPosition, + wxDefaultSize); + b4 -> top.Below (m_SearchText, 10); + b4 -> left.SameAs (m_SearchButton, wxRight, 10); + b4 -> right.SameAs (dummy, wxRight, 10); + b4 -> height.AsIs(); + m_SearchChoice -> SetConstraints(b4); + + dummy -> SetAutoLayout(TRUE); + dummy -> Layout(); + m_NavigPan -> AddPage(dummy, _("Search")); + m_SearchPage = notebook_page++; } //RefreshLists(); // showtime if (m_NavigPan && m_Splitter) { - m_NavigPan -> Show(TRUE); - m_Splitter -> SetMinimumPaneSize(20); - if (m_Cfg.navig_on) - m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); + m_NavigPan -> Show(TRUE); + m_Splitter -> SetMinimumPaneSize(20); + if (m_Cfg.navig_on) + m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); } m_HtmlWin -> Show(TRUE); return TRUE; @@ -296,15 +287,15 @@ wxHtmlHelpFrame::~wxHtmlHelpFrame() { delete m_ContentsImageList; if (m_DataCreated) - delete m_Data; + delete m_Data; } bool wxHtmlHelpFrame::Display(const wxString& x) { wxString url = m_Data->FindPageByName(x); if (! url.IsEmpty()) { - m_HtmlWin->LoadPage(url); - return TRUE; + m_HtmlWin->LoadPage(url); + return TRUE; } return FALSE; } @@ -313,8 +304,8 @@ bool wxHtmlHelpFrame::Display(const int id) { wxString url = m_Data->FindPageById(id); if (! url.IsEmpty()) { - m_HtmlWin->LoadPage(url); - return TRUE; + m_HtmlWin->LoadPage(url); + return TRUE; } return FALSE; } @@ -324,11 +315,11 @@ bool wxHtmlHelpFrame::Display(const int id) bool wxHtmlHelpFrame::DisplayContents() { if (! m_ContentsBox) - return FALSE; + return FALSE; if (!m_Splitter -> IsSplit()) { - m_NavigPan -> Show(TRUE); - m_HtmlWin -> Show(TRUE); - m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); + m_NavigPan -> Show(TRUE); + m_HtmlWin -> Show(TRUE); + m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); } m_NavigPan -> SetSelection(0); return TRUE; @@ -339,11 +330,11 @@ bool wxHtmlHelpFrame::DisplayContents() bool wxHtmlHelpFrame::DisplayIndex() { if (! m_IndexBox) - return FALSE; + return FALSE; if (!m_Splitter -> IsSplit()) { - m_NavigPan -> Show(TRUE); - m_HtmlWin -> Show(TRUE); - m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); + m_NavigPan -> Show(TRUE); + m_HtmlWin -> Show(TRUE); + m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); } m_NavigPan -> SetSelection(1); return TRUE; @@ -352,16 +343,16 @@ bool wxHtmlHelpFrame::DisplayIndex() bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword) { if (! (m_SearchList && m_SearchButton && m_SearchText && m_SearchChoice)) - return FALSE; + return FALSE; int foundcnt = 0; wxString foundstr; wxString book = wxEmptyString; if (!m_Splitter -> IsSplit()) { - m_NavigPan -> Show(TRUE); - m_HtmlWin -> Show(TRUE); - m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); + m_NavigPan -> Show(TRUE); + m_HtmlWin -> Show(TRUE); + m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); } m_NavigPan -> SetSelection(m_SearchPage); m_SearchList -> Clear(); @@ -369,23 +360,23 @@ bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword) m_SearchButton -> Enable(FALSE); if (m_SearchChoice->GetSelection() != 0) - book = m_SearchChoice->GetStringSelection(); + book = m_SearchChoice->GetStringSelection(); wxHtmlSearchStatus status(m_Data, keyword, book); - wxProgressDialog progress(_("Searching..."), _("No matching page found yet"), - status.GetMaxIndex(), this, - wxPD_APP_MODAL | wxPD_CAN_ABORT | wxPD_AUTO_HIDE); + wxProgressDialog progress(_("Searching..."), _("No matching page found yet"), + status.GetMaxIndex(), this, + wxPD_APP_MODAL | wxPD_CAN_ABORT | wxPD_AUTO_HIDE); while (status.IsActive()) { - if (progress.Update(status.GetCurIndex()) == FALSE) - break; - if (status.Search()) { - foundstr.Printf(_("Found %i matches"), ++foundcnt); - progress.Update(status.GetCurIndex(), foundstr); - m_SearchList -> Append(status.GetName(), status.GetContentsItem()); - } - wxYield(); + if (progress.Update(status.GetCurIndex()) == FALSE) + break; + if (status.Search()) { + foundstr.Printf(_("Found %i matches"), ++foundcnt); + progress.Update(status.GetCurIndex(), foundstr); + m_SearchList -> Append(status.GetName(), status.GetContentsItem()); + } + wxYield(); } m_SearchButton -> Enable(TRUE); @@ -403,7 +394,7 @@ bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword) void wxHtmlHelpFrame::CreateContents(bool show_progress) { if (! m_ContentsBox) - return; + return ; wxProgressDialog *progress; wxString proginfo; @@ -415,12 +406,12 @@ void wxHtmlHelpFrame::CreateContents(bool show_progress) int i; wxHtmlContentsItem *it = m_Data->GetContents(); - - if (show_progress) - progress = new wxProgressDialog(_("Building contents tree..."), wxEmptyString, - cnt, this, wxPD_APP_MODAL | wxPD_CAN_ABORT | - wxPD_AUTO_HIDE); - + + if (show_progress) + progress = new wxProgressDialog(_("Building contents tree..."), wxEmptyString, + cnt, this, wxPD_APP_MODAL | wxPD_CAN_ABORT | + wxPD_AUTO_HIDE); + wxTreeItemId roots[MAX_ROOTS]; bool imaged[MAX_ROOTS]; @@ -429,23 +420,22 @@ void wxHtmlHelpFrame::CreateContents(bool show_progress) imaged[0] = TRUE; for (i = 0; i < cnt; i++, it++) { - if (show_progress && ((i % div) == 0)) { - proginfo.Printf("Added %d/%d items", i, cnt); - if (! progress->Update(i, proginfo)) - break; - wxYield(); - } + if (show_progress && ((i % div) == 0)) { + proginfo.Printf(_("Added %d/%d items"), i, cnt); + if (! progress->Update(i, proginfo)) + break; + wxYield(); + } roots[it -> m_Level + 1] = m_ContentsBox -> AppendItem( - roots[it -> m_Level], it -> m_Name, IMG_Page, -1, - new wxHtmlHelpTreeItemData(it)); + roots[it -> m_Level], it -> m_Name, IMG_Page, -1, + new wxHtmlHelpTreeItemData(it)); if (it -> m_Level == 0) { m_ContentsBox -> SetItemBold(roots[1], TRUE); m_ContentsBox -> SetItemImage(roots[1], IMG_Book); m_ContentsBox -> SetItemSelectedImage(roots[1], IMG_Book); imaged[1] = TRUE; - } - else imaged[it -> m_Level + 1] = FALSE; + } else imaged[it -> m_Level + 1] = FALSE; if (!imaged[it -> m_Level]) { m_ContentsBox -> SetItemImage(roots[it -> m_Level], IMG_Folder); @@ -454,7 +444,7 @@ void wxHtmlHelpFrame::CreateContents(bool show_progress) } } if (show_progress) - delete progress; + delete progress; m_ContentsBox -> Expand(roots[0]); } @@ -462,7 +452,7 @@ void wxHtmlHelpFrame::CreateContents(bool show_progress) void wxHtmlHelpFrame::CreateIndex(bool show_progress) { if (! m_IndexBox) - return; + return ; wxProgressDialog *progress; wxString proginfo; @@ -474,35 +464,35 @@ void wxHtmlHelpFrame::CreateIndex(bool show_progress) wxHtmlContentsItem* index = m_Data->GetIndex(); - if (show_progress) - progress = new wxProgressDialog(_("Building index list..."), wxEmptyString, - cnt, this, wxPD_APP_MODAL | wxPD_CAN_ABORT | - wxPD_AUTO_HIDE); + if (show_progress) + progress = new wxProgressDialog(_("Building index list..."), wxEmptyString, + cnt, this, wxPD_APP_MODAL | wxPD_CAN_ABORT | + wxPD_AUTO_HIDE); for (int i = 0; i < cnt; i++) { - if (show_progress && ((i % div) == 0)) { - proginfo.Printf("Added %d/%d items", i, cnt); - if (! progress->Update(i, proginfo)) - break; - wxYield(); - } + if (show_progress && ((i % div) == 0)) { + proginfo.Printf(_("Added %d/%d items"), i, cnt); + if (! progress->Update(i, proginfo)) + break; + wxYield(); + } m_IndexBox -> Append(index[i].m_Name, (char*)(index + i)); } if (show_progress) - delete progress; + delete progress; } void wxHtmlHelpFrame::CreateSearch() { if (! (m_SearchList && m_SearchChoice)) - return; + return ; m_SearchList -> Clear(); m_SearchChoice -> Clear(); m_SearchChoice -> Append(_("all books")); const wxHtmlBookRecArray& bookrec = m_Data->GetBookRecArray(); int i, cnt = bookrec.GetCount(); - for (i=0; iAppend(bookrec[i].GetTitle()); + for (i = 0; i < cnt; i++) + m_SearchChoice->Append(bookrec[i].GetTitle()); m_SearchChoice->SetSelection(0); } @@ -530,11 +520,9 @@ void wxHtmlHelpFrame::ReadCustomization(wxConfigBase *cfg, const wxString& path) m_Cfg.y = cfg -> Read("hcY", m_Cfg.y); m_Cfg.w = cfg -> Read("hcW", m_Cfg.w); m_Cfg.h = cfg -> Read("hcH", m_Cfg.h); - m_Cfg.titleformat = cfg -> Read("hcTitleFormat", m_Cfg.titleformat); - m_Cfg.style = (int)cfg -> Read("hcStyle", (long)m_Cfg.style); if (m_HtmlWin) - m_HtmlWin->ReadCustomization(cfg, path); + m_HtmlWin->ReadCustomization(cfg, path); if (path != wxEmptyString) cfg -> SetPath(oldpath); @@ -544,7 +532,6 @@ void wxHtmlHelpFrame::WriteCustomization(wxConfigBase *cfg, const wxString& path { wxString oldpath; wxString tmp; - //printf("wxHtmlHelpFrame. Writing config to %s\n", (const char*)path); if (path != wxEmptyString) { oldpath = cfg -> GetPath(); @@ -557,11 +544,9 @@ void wxHtmlHelpFrame::WriteCustomization(wxConfigBase *cfg, const wxString& path cfg -> Write("hcY", (long)m_Cfg.y); cfg -> Write("hcW", (long)m_Cfg.w); cfg -> Write("hcH", (long)m_Cfg.h); - cfg -> Write("hcTitleFormat", m_Cfg.titleformat); - cfg -> Write("hcStyle", (long)m_Cfg.style); if (m_HtmlWin) - m_HtmlWin->WriteCustomization(cfg, path); + m_HtmlWin->WriteCustomization(cfg, path); if (path != wxEmptyString) cfg -> SetPath(oldpath); @@ -583,13 +568,12 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) m_HtmlWin -> HistoryForward(); break; case wxID_HTML_PANEL : - if (! (m_Splitter && m_NavigPan)) - return; + if (! (m_Splitter && m_NavigPan)) + return ; if (m_Splitter -> IsSplit()) { m_Cfg.sashpos = m_Splitter -> GetSashPosition(); m_Splitter -> Unsplit(m_NavigPan); - } - else { + } else { m_NavigPan -> Show(TRUE); m_HtmlWin -> Show(TRUE); m_Splitter -> SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); @@ -633,8 +617,8 @@ void wxHtmlHelpFrame::OnSearch(wxCommandEvent& WXUNUSED(event)) void wxHtmlHelpFrame::OnCloseWindow(wxCloseEvent& evt) { - if (m_Config) - WriteCustomization(m_Config, m_ConfigRoot); + if (m_Config) + WriteCustomization(m_Config, m_ConfigRoot); evt.Skip(); } diff --git a/src/html/search.cpp b/src/html/search.cpp deleted file mode 100644 index 78df71a708..0000000000 --- a/src/html/search.cpp +++ /dev/null @@ -1,74 +0,0 @@ -///////////////////////////////////////////////////////////////////////////// -// Name: search.cpp -// Purpose: search engine -// Author: Vaclav Slavik -// RCS-ID: $Id$ -// Copyright: (c) 1999 Vaclav Slavik -// Licence: wxWindows Licence -///////////////////////////////////////////////////////////////////////////// - - - -#ifdef __GNUG__ -#pragma implementation -#endif - -#include "wx/wxprec.h" - -#include "wx/defs.h" -#if wxUSE_HTML - -#ifdef __BORDLANDC__ -#pragma hdrstop -#endif - -#ifndef WXPRECOMP -#include -#endif - -#include "wx/html/helpdata.h" - - - -//-------------------------------------------------------------------------------- -// wxSearchEngine -//-------------------------------------------------------------------------------- - -void wxSearchEngine::LookFor(const wxString& keyword) -{ - if (m_Keyword) delete[] m_Keyword; - m_Keyword = new char[keyword.Length() + 1]; - strcpy(m_Keyword, keyword.c_str()); - for (int i = strlen(m_Keyword) - 1; i >= 0; i--) - if ((m_Keyword[i] >= 'A') && (m_Keyword[i] <= 'Z')) - m_Keyword[i] += 'a' - 'A'; -} - - - -bool wxSearchEngine::Scan(wxInputStream *stream) -{ - wxASSERT_MSG(m_Keyword != NULL, _("wxSearchEngine::LookFor must be called before scanning!")); - - int i, j; - int lng = stream ->GetSize(); - int wrd = strlen(m_Keyword); - bool found = FALSE; - char *buf = new char[lng + 1]; - stream -> Read(buf, lng); - buf[lng] = 0; - - for (i = 0; i < lng; i++) - if ((buf[i] >= 'A') && (buf[i] <= 'Z')) buf[i] += 'a' - 'A'; - - for (i = 0; i < lng - wrd; i++) { - j = 0; - while ((j < wrd) && (buf[i + j] == m_Keyword[j])) j++; - if (j == wrd) {found = TRUE; break;} - } - - delete[] buf; - return found; -} - -#endif -- 2.47.2