X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/576507e276a32bccda610ce0e45451e6a46e4d31..73ef393701bd6c2c689a05d5637cc701e2f5cc2f:/src/html/helpfrm.cpp?ds=sidebyside diff --git a/src/html/helpfrm.cpp b/src/html/helpfrm.cpp index 504dd005bd..a71bab2521 100644 --- a/src/html/helpfrm.cpp +++ b/src/html/helpfrm.cpp @@ -21,15 +21,24 @@ #pragma hdrstop #endif -#include "wx/defs.h" +#if wxUSE_WXHTML_HELP -#if wxUSE_HTML && wxUSE_STREAMS #ifndef WXPRECOMP -#include "wx/wx.h" -#endif + #include "wx/intl.h" + #include "wx/log.h" + + #include "wx/object.h" + #include "wx/layout.h" + #include "wx/sizer.h" + + #include "wx/bmpbuttn.h" + #include "wx/statbox.h" + #include "wx/radiobox.h" +#endif // WXPRECOMP #include "wx/html/helpfrm.h" #include "wx/html/helpctrl.h" +#include "wx/textctrl.h" #include "wx/notebook.h" #include "wx/imaglist.h" #include "wx/treectrl.h" @@ -46,28 +55,36 @@ // Bitmaps: #ifndef __WXMSW__ -#include "bitmaps/wpanel.xpm" -#include "bitmaps/wback.xpm" -#include "bitmaps/wforward.xpm" -#include "bitmaps/wbook.xpm" -#include "bitmaps/woptions.xpm" -#include "bitmaps/wfolder.xpm" -#include "bitmaps/wpage.xpm" -#include "bitmaps/whelp.xpm" -#include "bitmaps/whlproot.xpm" -#include "bitmaps/wbkadd.xpm" -#include "bitmaps/wbkdel.xpm" -#include "bitmaps/wup.xpm" -#include "bitmaps/wupnode.xpm" -#include "bitmaps/wdown.xpm" -#include "bitmaps/wopen.xpm" -#include "bitmaps/wprint.xpm" -#endif - + // XPM hack: make the arrays const + #define static static const + + #include "bitmaps/wpanel.xpm" + #include "bitmaps/wback.xpm" + #include "bitmaps/wforward.xpm" + #include "bitmaps/wbook.xpm" + #include "bitmaps/woptions.xpm" + #include "bitmaps/wfolder.xpm" + #include "bitmaps/wpage.xpm" + #include "bitmaps/whelp.xpm" + #include "bitmaps/whlproot.xpm" + #include "bitmaps/wbkadd.xpm" + #include "bitmaps/wbkdel.xpm" + #include "bitmaps/wup.xpm" + #include "bitmaps/wupnode.xpm" + #include "bitmaps/wdown.xpm" + #include "bitmaps/wopen.xpm" + #include "bitmaps/wprint.xpm" + + #undef static +#endif // __WXMSW__ // what is considered "small index"? #define INDEX_IS_SMALL 100 +/* Motif defines this as a macro */ +#ifdef Below +#undef Below +#endif //-------------------------------------------------------------------------- // wxHtmlHelpTreeItemData (private) @@ -230,7 +247,7 @@ void wxHtmlHelpFrame::Init(wxHtmlHelpData* data) // 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, +bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, const wxString& WXUNUSED(title), int style) { m_hfStyle = style; @@ -291,9 +308,14 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, if (style & wxHF_CONTENTS) { wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_INDEXPAGE); + + long treeStyle = wxSUNKEN_BORDER | wxTR_HAS_BUTTONS; + #ifndef __WXMSW__ // FIXME - temporary, till MSW supports wxTR_HIDE_ROOT + treeStyle |= wxTR_HIDE_ROOT; + #endif if (style & wxHF_BOOKMARKS) - { + { wxLayoutConstraints *b1 = new wxLayoutConstraints; wxBitmapButton *bmpbt = new wxBitmapButton(dummy, wxID_HTML_BOOKMARKSREMOVE, wxBITMAP(wbkdel), wxDefaultPosition, wxSize(20,20)); @@ -335,7 +357,7 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, wxLayoutConstraints *b4 = new wxLayoutConstraints; m_ContentsBox = new wxTreeCtrl(dummy, wxID_HTML_TREECTRL, wxDefaultPosition, wxDefaultSize, - wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); + treeStyle); m_ContentsBox->AssignImageList(ContentsImageList); b4->top.Below (m_Bookmarks, 10); @@ -354,7 +376,7 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, { m_ContentsBox = new wxTreeCtrl(m_NavigPan, wxID_HTML_TREECTRL, wxDefaultPosition, wxDefaultSize, - wxTR_HAS_BUTTONS | wxSUNKEN_BORDER); + treeStyle); m_ContentsBox->AssignImageList(ContentsImageList); m_NavigPan->AddPage(m_ContentsBox, _("Contents")); } @@ -494,18 +516,18 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, if (m_Cfg.navig_on) m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); else - { + { m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); m_Splitter->Unsplit(); } - if (m_Cfg.navig_on) - { + if (m_Cfg.navig_on) + { m_NavigPan->Show(TRUE); m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); } else - { + { m_NavigPan->Show(FALSE); m_Splitter->Initialize(m_HtmlWin); } @@ -705,7 +727,7 @@ bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword) if (curi % 32 == 0 && progress.Update(curi) == FALSE) break; if (status.Search()) - { + { foundstr.Printf(_("Found %i matches"), ++foundcnt); progress.Update(status.GetCurIndex(), foundstr); m_SearchList->Append(status.GetName(), status.GetContentsItem()); @@ -752,11 +774,15 @@ void wxHtmlHelpFrame::CreateContents() // We set the icon later: when we find an item with level=n, we know // that the last item with level=n-1 was folder with subitems, so we // set its icon accordingly - bool imaged[MAX_ROOTS]; + bool imaged[MAX_ROOTS]; m_ContentsBox->DeleteAllItems(); + // FIXME - will go away when wxMSW's wxTreeCtrl supports wxTR_HIDE_ROOT! + bool hasSuperRoot = (booksCnt > 1) || + (m_ContentsBox->GetWindowStyle() & wxTR_HIDE_ROOT); + // Don't show (Help) root if there's only one boook - if (booksCnt > 1) + if (hasSuperRoot) { roots[0] = m_ContentsBox->AddRoot(_("(Help)")); m_ContentsBox->SetItemImage(roots[0], IMG_RootFolder); @@ -770,11 +796,13 @@ void wxHtmlHelpFrame::CreateContents() if (it->m_Level == 0) { // special case, only one book, make it tree's root: - if (booksCnt == 1) + if (!hasSuperRoot) { roots[0] = roots[1] = m_ContentsBox->AddRoot( - it->m_Name, IMG_Page, -1, + it->m_Name, IMG_Book, -1, new wxHtmlHelpTreeItemData(i)); + imaged[0] = imaged[1] = TRUE; + m_ContentsBox->SetItemBold(roots[1], TRUE); } // multiple books: else @@ -789,7 +817,7 @@ void wxHtmlHelpFrame::CreateContents() else { roots[1] = m_ContentsBox->AppendItem(roots[0], - it->m_Name, IMG_Book, -1, + it->m_Name, IMG_Book, -1, new wxHtmlHelpTreeItemData(i)); m_ContentsBox->SetItemBold(roots[1], TRUE); } @@ -797,12 +825,12 @@ void wxHtmlHelpFrame::CreateContents() } } // ...and their contents: - else + else { roots[it->m_Level + 1] = m_ContentsBox->AppendItem( - roots[it->m_Level], it->m_Name, IMG_Page, + roots[it->m_Level], it->m_Name, IMG_Page, -1, new wxHtmlHelpTreeItemData(i)); - imaged[it->m_Level + 1] = FALSE; + imaged[it->m_Level + 1] = FALSE; } m_PagesHash->Put(it->GetFullPath(), @@ -811,7 +839,7 @@ void wxHtmlHelpFrame::CreateContents() // Set the icon for the node one level up in the hiearachy, // unless already done (see comment above imaged[] declaration) if (!imaged[it->m_Level]) - { + { int image = IMG_Folder; if (m_hfStyle & wxHF_ICONS_BOOK) image = IMG_Book; @@ -899,17 +927,17 @@ void wxHtmlHelpFrame::ReadCustomization(wxConfigBase *cfg, const wxString& path) cnt = cfg->Read(wxT("hcBookmarksCnt"), 0L); if (cnt != 0) - { + { m_BookmarksNames.Clear(); m_BookmarksPages.Clear(); if (m_Bookmarks) - { + { m_Bookmarks->Clear(); m_Bookmarks->Append(_("(bookmarks)")); } for (i = 0; i < cnt; i++) - { + { val.Printf(wxT("hcBookmark_%i"), i); s = cfg->Read(val); m_BookmarksNames.Add(s); @@ -957,7 +985,7 @@ void wxHtmlHelpFrame::WriteCustomization(wxConfigBase *cfg, const wxString& path cfg->Write(wxT("hcBookmarksCnt"), (long)cnt); for (i = 0; i < cnt; i++) - { + { val.Printf(wxT("hcBookmark_%i"), i); cfg->Write(val, m_BookmarksNames[i]); val.Printf(wxT("hcBookmark_%i_url"), i); @@ -1031,7 +1059,8 @@ class wxHtmlHelpFrameOptionsDialog : public wxDialog topsizer->Add(new wxStaticText(this, -1, _("Preview:")), 0, wxLEFT | wxTOP, 10); - topsizer->Add(TestWin = new wxHtmlWindow(this, -1, wxDefaultPosition, wxSize(-1, 150)), + topsizer->Add(TestWin = new wxHtmlWindow(this, -1, wxDefaultPosition, wxSize(-1, 150), + wxHW_SCROLLBAR_AUTO | wxSUNKEN_BORDER), 1, wxEXPAND | wxLEFT|wxTOP|wxRIGHT, 10); sizer = new wxBoxSizer(wxHORIZONTAL); @@ -1260,13 +1289,13 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) if (! (m_Splitter && m_NavigPan)) return ; if (m_Splitter->IsSplit()) - { + { m_Cfg.sashpos = m_Splitter->GetSashPosition(); m_Splitter->Unsplit(m_NavigPan); m_Cfg.navig_on = FALSE; } - else - { + else + { m_NavigPan->Show(TRUE); m_HtmlWin->Show(TRUE); m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos); @@ -1287,9 +1316,9 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) item = m_HtmlWin->GetOpenedPageTitle(); url = m_HtmlWin->GetOpenedPage(); if (item == wxEmptyString) - item = url.AfterLast(wxT('/')); + item = url.AfterLast(wxT('/')); if (m_BookmarksPages.Index(url) == wxNOT_FOUND) - { + { m_Bookmarks->Append(item); m_BookmarksNames.Add(item); m_BookmarksPages.Add(url); @@ -1305,7 +1334,7 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event) item = m_Bookmarks->GetStringSelection(); pos = m_BookmarksNames.Index(item); if (pos != wxNOT_FOUND) - { + { m_BookmarksNames.Remove(pos); m_BookmarksPages.Remove(pos); m_Bookmarks->Delete(m_Bookmarks->GetSelection()); @@ -1400,7 +1429,7 @@ void wxHtmlHelpFrame::OnIndexFind(wxCommandEvent& event) wxBusyCursor bcur; const wxChar *cstr = sr.c_str(); wxChar mybuff[512]; - wxChar *ptr; + wxChar *ptr; bool first = TRUE; m_IndexList->Clear(); @@ -1416,11 +1445,11 @@ void wxHtmlHelpFrame::OnIndexFind(wxCommandEvent& event) if (*ptr >= _T('A') && *ptr <= _T('Z')) *ptr -= (wxChar)(_T('A') - _T('a')); if (wxStrstr(mybuff, cstr) != NULL) - { + { m_IndexList->Append(index[i].m_Name, (char*)(index + i)); displ++; if (first) - { + { if (index[i].m_Page[0] != 0) m_HtmlWin->LoadPage(index[i].GetFullPath()); NotifyPageChanged(); @@ -1451,7 +1480,7 @@ void wxHtmlHelpFrame::OnIndexAll(wxCommandEvent& WXUNUSED(event)) { m_IndexList->Append(index[i].m_Name, (char*)(index + i)); if (first) - { + { if (index[i].m_Page[0] != 0) m_HtmlWin->LoadPage(index[i].GetFullPath()); NotifyPageChanged(); @@ -1528,4 +1557,5 @@ BEGIN_EVENT_TABLE(wxHtmlHelpFrame, wxFrame) EVT_CLOSE(wxHtmlHelpFrame::OnCloseWindow) END_EVENT_TABLE() -#endif +#endif // wxUSE_WXHTML_HELP +