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:
@@ -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;
|
||||||
|
@@ -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()
|
||||||
|
Reference in New Issue
Block a user