HTML help: index panel now displays only part of index matching given substring (similar to search panel; ==> 1) faster startup 2) no more problems with incomplete index due to GTK+ limitations). Intelligent behaviour: displays indexes with size <= 100 items in full (= matching empty substring)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5032 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Václav Slavík
1999-12-20 12:49:35 +00:00
parent 336e2d4424
commit f0b6a33f4c
2 changed files with 115 additions and 17 deletions

View File

@@ -54,6 +54,9 @@ enum
wxID_HTML_TREECTRL, wxID_HTML_TREECTRL,
wxID_HTML_INDEXPAGE, wxID_HTML_INDEXPAGE,
wxID_HTML_INDEXLIST, wxID_HTML_INDEXLIST,
wxID_HTML_INDEXTEXT,
wxID_HTML_INDEXBUTTON,
wxID_HTML_INDEXBUTTONALL,
wxID_HTML_NOTEBOOK, wxID_HTML_NOTEBOOK,
wxID_HTML_SEARCHPAGE, wxID_HTML_SEARCHPAGE,
wxID_HTML_SEARCHTEXT, wxID_HTML_SEARCHTEXT,
@@ -159,6 +162,8 @@ class WXDLLEXPORT wxHtmlHelpFrame : public wxFrame
void OnToolbar(wxCommandEvent& event); void OnToolbar(wxCommandEvent& event);
void OnContentsSel(wxTreeEvent& event); void OnContentsSel(wxTreeEvent& event);
void OnIndexSel(wxCommandEvent& event); void OnIndexSel(wxCommandEvent& event);
void OnIndexFind(wxCommandEvent& event);
void OnIndexAll(wxCommandEvent& event);
void OnSearchSel(wxCommandEvent& event); void OnSearchSel(wxCommandEvent& event);
void OnSearch(wxCommandEvent& event); void OnSearch(wxCommandEvent& event);
void OnBookmarksSel(wxCommandEvent& event); void OnBookmarksSel(wxCommandEvent& event);
@@ -182,7 +187,10 @@ class WXDLLEXPORT wxHtmlHelpFrame : public wxFrame
wxNotebook *m_NavigPan; wxNotebook *m_NavigPan;
wxTreeCtrl *m_ContentsBox; wxTreeCtrl *m_ContentsBox;
wxImageList *m_ContentsImageList; wxImageList *m_ContentsImageList;
wxListBox *m_IndexBox; wxTextCtrl *m_IndexText;
wxButton *m_IndexButton;
wxButton *m_IndexButtonAll;
wxListBox *m_IndexList;
wxTextCtrl *m_SearchText; wxTextCtrl *m_SearchText;
wxButton *m_SearchButton; wxButton *m_SearchButton;
wxListBox *m_SearchList; wxListBox *m_SearchList;

View File

@@ -62,6 +62,10 @@
// is updated. // is updated.
#define PROGRESS_STEP 40 #define PROGRESS_STEP 40
// what is considered "small index"?
#define INDEX_IS_SMALL 100
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
// wxHtmlHelpTreeItemData (private) // wxHtmlHelpTreeItemData (private)
//-------------------------------------------------------------------------- //--------------------------------------------------------------------------
@@ -112,7 +116,10 @@ void wxHtmlHelpFrame::Init(wxHtmlHelpData* data)
m_ContentsImageList -> Add(wxICON(whlproot)); m_ContentsImageList -> Add(wxICON(whlproot));
m_ContentsBox = NULL; m_ContentsBox = NULL;
m_IndexBox = NULL; m_IndexList = NULL;
m_IndexButton = NULL;
m_IndexButtonAll = NULL;
m_IndexText = NULL;
m_SearchList = NULL; m_SearchList = NULL;
m_SearchButton = NULL; m_SearchButton = NULL;
m_SearchText = NULL; m_SearchText = NULL;
@@ -140,7 +147,7 @@ void wxHtmlHelpFrame::Init(wxHtmlHelpData* data)
// with the style flag it's possible to toggle the toolbar, contents, index and search // with the style flag it's possible to toggle the toolbar, contents, index and search
// controls. // controls.
// m_HtmlWin will *always* be created, but it's important to realize that // 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_ContentsBox, m_IndexList, m_SearchList, m_SearchButton, m_SearchText and
// m_SearchButton may be NULL. // m_SearchButton may be NULL.
// moreover, if no contents, index or searchpage is needed, m_Splitter and // 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) // m_NavigPan will be NULL too (with m_HtmlWin directly connected to the frame)
@@ -237,15 +244,44 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, const wxString& ti
// index listbox panel? // index listbox panel?
if (style & wxHF_INDEX) { if (style & wxHF_INDEX) {
wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_INDEXPAGE); wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_INDEXPAGE);
wxLayoutConstraints *b1 = new wxLayoutConstraints; wxLayoutConstraints *b1 = new wxLayoutConstraints;
b1 -> top.SameAs (dummy, wxTop, 0); m_IndexText = new wxTextCtrl(dummy, wxID_HTML_INDEXTEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
b1 -> left.SameAs (dummy, wxLeft, 0); b1 -> top.SameAs (dummy, wxTop, 10);
b1 -> width.PercentOf (dummy, wxWidth, 100); b1 -> left.SameAs (dummy, wxLeft, 10);
b1 -> bottom.SameAs (dummy, wxBottom, 0); b1 -> right.SameAs (dummy, wxRight, 10);
m_IndexBox = new wxListBox(dummy, wxID_HTML_INDEXLIST, wxDefaultPosition, b1 -> height.AsIs();
wxDefaultSize, 0, NULL, wxLB_SINGLE | wxLB_ALWAYS_SB); m_IndexText -> SetConstraints(b1);
m_IndexBox -> SetConstraints(b1);
wxLayoutConstraints *b4 = new wxLayoutConstraints;
m_IndexButtonAll = new wxButton(dummy, wxID_HTML_INDEXBUTTONALL, _("Show all"));
m_IndexButtonAll -> SetToolTip(_("Show all items in index"));
b4 -> top.Below (m_IndexText, 10);
b4 -> right.SameAs (dummy, wxRight, 10);
b4 -> width.AsIs();
b4 -> height.AsIs();
m_IndexButtonAll -> SetConstraints(b4);
wxLayoutConstraints *b2 = new wxLayoutConstraints;
m_IndexButton = new wxButton(dummy, wxID_HTML_INDEXBUTTON, _("Find"));
m_IndexButton -> SetToolTip(_("Display all index items that contain given substring. Note that this is case sensitive, so 'window' and 'Window' is something else!"));
b2 -> top.Below (m_IndexText, 10);
b2 -> right.LeftOf (m_IndexButtonAll, 10);
b2 -> width.AsIs();
b2 -> height.AsIs();
m_IndexButton -> SetConstraints(b2);
wxLayoutConstraints *b3 = new wxLayoutConstraints;
m_IndexList = new wxListBox(dummy, wxID_HTML_INDEXLIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE | wxLB_ALWAYS_SB);
b3 -> top.Below (m_IndexButton, 10);
b3 -> left.SameAs (dummy, wxLeft, 0);
b3 -> right.SameAs (dummy, wxRight, 0);
b3 -> bottom.SameAs (dummy, wxBottom, 0);
m_IndexList -> SetConstraints(b3);
dummy -> SetAutoLayout(TRUE); dummy -> SetAutoLayout(TRUE);
dummy -> Layout();
m_NavigPan -> AddPage(dummy, _("Index")); m_NavigPan -> AddPage(dummy, _("Index"));
m_IndexPage = notebook_page++; m_IndexPage = notebook_page++;
} }
@@ -255,7 +291,7 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, const wxString& ti
wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_SEARCHPAGE); wxWindow *dummy = new wxPanel(m_NavigPan, wxID_HTML_SEARCHPAGE);
wxLayoutConstraints *b1 = new wxLayoutConstraints; wxLayoutConstraints *b1 = new wxLayoutConstraints;
m_SearchText = new wxTextCtrl(dummy, wxID_HTML_SEARCHTEXT); m_SearchText = new wxTextCtrl(dummy, wxID_HTML_SEARCHTEXT, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_PROCESS_ENTER);
b1 -> top.SameAs (dummy, wxTop, 10); b1 -> top.SameAs (dummy, wxTop, 10);
b1 -> left.SameAs (dummy, wxLeft, 10); b1 -> left.SameAs (dummy, wxLeft, 10);
b1 -> right.SameAs (dummy, wxRight, 10); b1 -> right.SameAs (dummy, wxRight, 10);
@@ -264,6 +300,7 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, const wxString& ti
wxLayoutConstraints *b2 = new wxLayoutConstraints; wxLayoutConstraints *b2 = new wxLayoutConstraints;
m_SearchButton = new wxButton(dummy, wxID_HTML_SEARCHBUTTON, _("Search")); m_SearchButton = new wxButton(dummy, wxID_HTML_SEARCHBUTTON, _("Search"));
m_SearchButton -> SetToolTip(_("Search contents of help book(s) for all occurences of the text you typed above"));
b2 -> top.Below (m_SearchText, 10); b2 -> top.Below (m_SearchText, 10);
b2 -> left.SameAs (dummy, wxLeft, 10); b2 -> left.SameAs (dummy, wxLeft, 10);
b2 -> width.AsIs(); b2 -> width.AsIs();
@@ -280,7 +317,7 @@ bool wxHtmlHelpFrame::Create(wxWindow* parent, wxWindowID id, const wxString& ti
m_SearchChoice -> SetConstraints(b4); m_SearchChoice -> SetConstraints(b4);
wxLayoutConstraints *b3 = new wxLayoutConstraints; wxLayoutConstraints *b3 = new wxLayoutConstraints;
m_SearchList = new wxListBox(dummy, wxID_HTML_SEARCHLIST, wxDefaultPosition, wxDefaultSize, 0); m_SearchList = new wxListBox(dummy, wxID_HTML_SEARCHLIST, wxDefaultPosition, wxDefaultSize, 0, NULL, wxLB_SINGLE | wxLB_ALWAYS_SB);
b3 -> top.Below (m_SearchButton, 10); b3 -> top.Below (m_SearchButton, 10);
b3 -> left.SameAs (dummy, wxLeft, 0); b3 -> left.SameAs (dummy, wxLeft, 0);
b3 -> right.SameAs (dummy, wxRight, 0); b3 -> right.SameAs (dummy, wxRight, 0);
@@ -366,7 +403,7 @@ bool wxHtmlHelpFrame::DisplayContents()
bool wxHtmlHelpFrame::DisplayIndex() bool wxHtmlHelpFrame::DisplayIndex()
{ {
if (! m_IndexBox) if (! m_IndexList)
return FALSE; return FALSE;
if (!m_Splitter -> IsSplit()) { if (!m_Splitter -> IsSplit()) {
m_NavigPan -> Show(TRUE); m_NavigPan -> Show(TRUE);
@@ -490,15 +527,18 @@ void wxHtmlHelpFrame::CreateContents(bool show_progress)
void wxHtmlHelpFrame::CreateIndex(bool show_progress) void wxHtmlHelpFrame::CreateIndex(bool show_progress)
{ {
if (! m_IndexBox) if (! m_IndexList)
return ; return ;
wxProgressDialog *progress = NULL; wxProgressDialog *progress = NULL;
wxString proginfo; wxString proginfo;
m_IndexBox->Clear(); m_IndexList->Clear();
int cnt = m_Data->GetIndexCnt(); int cnt = m_Data->GetIndexCnt();
if (cnt > INDEX_IS_SMALL) return;
int div = (cnt / PROGRESS_STEP) + 1; int div = (cnt / PROGRESS_STEP) + 1;
wxHtmlContentsItem* index = m_Data->GetIndex(); wxHtmlContentsItem* index = m_Data->GetIndex();
@@ -514,7 +554,7 @@ void wxHtmlHelpFrame::CreateIndex(bool show_progress)
break; break;
wxYield(); wxYield();
} }
m_IndexBox -> Append(index[i].m_Name, (char*)(index + i)); m_IndexList -> Append(index[i].m_Name, (char*)(index + i));
} }
if (show_progress) if (show_progress)
@@ -911,11 +951,58 @@ void wxHtmlHelpFrame::OnContentsSel(wxTreeEvent& event)
void wxHtmlHelpFrame::OnIndexSel(wxCommandEvent& WXUNUSED(event)) void wxHtmlHelpFrame::OnIndexSel(wxCommandEvent& WXUNUSED(event))
{ {
wxHtmlContentsItem *it = (wxHtmlContentsItem*) m_IndexBox -> GetClientData(m_IndexBox -> GetSelection()); wxHtmlContentsItem *it = (wxHtmlContentsItem*) m_IndexList -> GetClientData(m_IndexList -> GetSelection());
m_HtmlWin -> LoadPage(it -> m_Book -> GetBasePath() + it -> m_Page); m_HtmlWin -> LoadPage(it -> m_Book -> GetBasePath() + it -> m_Page);
} }
void wxHtmlHelpFrame::OnIndexFind(wxCommandEvent& event)
{
wxString sr = m_IndexText -> GetLineText(0);
if (sr == wxEmptyString)
OnIndexAll(event);
else {
wxBusyCursor bcur;
const wxChar *cstr = sr.c_str();
bool first = TRUE;
m_IndexList->Clear();
int cnt = m_Data->GetIndexCnt();
wxHtmlContentsItem* index = m_Data->GetIndex();
for (int i = 0; i < cnt; i++)
if (wxStrstr(index[i].m_Name, cstr) != NULL) {
m_IndexList -> Append(index[i].m_Name, (char*)(index + i));
if (first) {
m_HtmlWin -> LoadPage(index[i].m_Book -> GetBasePath() + index[i].m_Page);
first = FALSE;
}
}
m_IndexText -> SetSelection(0, sr.Length());
m_IndexText -> SetFocus();
}
}
void wxHtmlHelpFrame::OnIndexAll(wxCommandEvent& WXUNUSED(event))
{
wxBusyCursor bcur;
m_IndexList->Clear();
int cnt = m_Data->GetIndexCnt();
bool first = TRUE;
wxHtmlContentsItem* index = m_Data->GetIndex();
for (int i = 0; i < cnt; i++) {
m_IndexList -> Append(index[i].m_Name, (char*)(index + i));
if (first) {
m_HtmlWin -> LoadPage(index[i].m_Book -> GetBasePath() + index[i].m_Page);
first = FALSE;
}
}
}
void wxHtmlHelpFrame::OnSearchSel(wxCommandEvent& WXUNUSED(event)) void wxHtmlHelpFrame::OnSearchSel(wxCommandEvent& WXUNUSED(event))
{ {
@@ -958,6 +1045,9 @@ BEGIN_EVENT_TABLE(wxHtmlHelpFrame, wxFrame)
EVT_LISTBOX(wxID_HTML_SEARCHLIST, wxHtmlHelpFrame::OnSearchSel) EVT_LISTBOX(wxID_HTML_SEARCHLIST, wxHtmlHelpFrame::OnSearchSel)
EVT_BUTTON(wxID_HTML_SEARCHBUTTON, wxHtmlHelpFrame::OnSearch) EVT_BUTTON(wxID_HTML_SEARCHBUTTON, wxHtmlHelpFrame::OnSearch)
EVT_TEXT_ENTER(wxID_HTML_SEARCHTEXT, wxHtmlHelpFrame::OnSearch) EVT_TEXT_ENTER(wxID_HTML_SEARCHTEXT, wxHtmlHelpFrame::OnSearch)
EVT_BUTTON(wxID_HTML_INDEXBUTTON, wxHtmlHelpFrame::OnIndexFind)
EVT_TEXT_ENTER(wxID_HTML_INDEXTEXT, wxHtmlHelpFrame::OnIndexFind)
EVT_BUTTON(wxID_HTML_INDEXBUTTONALL, wxHtmlHelpFrame::OnIndexAll)
EVT_COMBOBOX(wxID_HTML_BOOKMARKSLIST, wxHtmlHelpFrame::OnBookmarksSel) EVT_COMBOBOX(wxID_HTML_BOOKMARKSLIST, wxHtmlHelpFrame::OnBookmarksSel)
EVT_CLOSE(wxHtmlHelpFrame::OnCloseWindow) EVT_CLOSE(wxHtmlHelpFrame::OnCloseWindow)
END_EVENT_TABLE() END_EVENT_TABLE()