Much improved wxHelpControllerHtml, works under Solaris, too now.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3069 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Karsten Ballüder
1999-07-21 13:32:08 +00:00
parent 2508212677
commit 8dd71e2b51
4 changed files with 131 additions and 10 deletions

View File

@@ -32,7 +32,7 @@
// define this to 1 to use HTML help even under Windows (by default, Windows // define this to 1 to use HTML help even under Windows (by default, Windows
// version will HLP-based help) // version will HLP-based help)
#define USE_HTML_HELP 1 //#define USE_HTML_HELP 1
#if USE_HTML_HELP #if USE_HTML_HELP
# include "wx/helpbase.h" # include "wx/helpbase.h"
#else #else

View File

@@ -197,8 +197,12 @@ wxHTMLHelpControllerBase::DisplayContents()
{ {
if(! m_NumOfEntries) if(! m_NumOfEntries)
return FALSE; return FALSE;
wxBusyCursor b; // display a busy cursor
return KeywordSearch(""); // use ID 0 for contents
if(! DisplaySection(0))
return KeywordSearch("");
else
return TRUE;
} }
bool bool

View File

@@ -44,16 +44,49 @@
IMPLEMENT_CLASS(wxHelpControllerHtml, wxHTMLHelpControllerBase) IMPLEMENT_CLASS(wxHelpControllerHtml, wxHTMLHelpControllerBase)
/** /**
This class implements help via an external browser. This class implements help via wxHTML.
It requires the name of a directory containing the documentation It requires the name of a directory containing the documentation
and a file mapping numerical Section numbers to relative URLS. and a file mapping numerical Section numbers to relative URLS.
*/ */
#define FRAME_WIDTH 400 class wxForceHtmlFilter : public wxHtmlFilter
{
public:
virtual wxString ReadFile(const wxFSFile& file)
{
wxInputStream *s = file.GetStream();
char *src;
wxString doc;
if (s == NULL) return wxEmptyString;
src = new char[s -> StreamSize()+1];
src[s -> StreamSize()] = 0;
s -> Read(src, s -> StreamSize());
doc = src;
delete [] src;
return doc;
}
virtual bool CanRead(const wxFSFile& file)
{
wxString filename = file.GetLocation();
if(filename.Length() >= 5 &&
(
filename.Right(4).MakeUpper() == ".HTM" ||
filename.Right(5).MakeUpper() == ".HTML"))
return TRUE;
else
return FALSE;
}
};
#define FRAME_WIDTH 500
#define FRAME_HEIGHT 400 #define FRAME_HEIGHT 400
#define LAYOUT_X_MARGIN 2 #define LAYOUT_X_MARGIN 2
#define LAYOUT_Y_MARGIN 2 #define LAYOUT_Y_MARGIN 2
#define OFFSET 10 #define OFFSET 10
#define BUTTON_WIDTH 70
#define MAX_COMBO_ENTRIES 25
class wxHelpFrame : public wxFrame class wxHelpFrame : public wxFrame
{ {
@@ -63,17 +96,43 @@ public:
wxHelpControllerHtml *controller); wxHelpControllerHtml *controller);
~wxHelpFrame(); ~wxHelpFrame();
void OnClose(wxCloseEvent &ev); void OnClose(wxCloseEvent &ev);
void OnButton(wxCommandEvent &ev);
bool LoadPage(const wxString &url) { return m_htmlwin->LoadPage(url); } bool LoadPage(const wxString &url) { return m_htmlwin->LoadPage(url); }
private: private:
wxHelpControllerHtml *m_controller; wxHelpControllerHtml *m_controller;
wxHtmlWindow *m_htmlwin; wxHtmlWindow *m_htmlwin;
wxHtmlFilter *m_filter;
wxComboBox *m_combo;
long m_IdBack, m_IdFwd, m_IdContents, m_IdCombo, m_IdSearch;
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
BEGIN_EVENT_TABLE(wxHelpFrame, wxFrame) BEGIN_EVENT_TABLE(wxHelpFrame, wxFrame)
EVT_CLOSE(wxHelpFrame::OnClose) EVT_CLOSE(wxHelpFrame::OnClose)
EVT_BUTTON(-1, wxHelpFrame::OnButton)
END_EVENT_TABLE() END_EVENT_TABLE()
void
wxHelpFrame::OnButton(wxCommandEvent &ev)
{
long id =ev.GetId();
if(id == m_IdBack)
m_htmlwin->HistoryBack();
else if(id == m_IdFwd)
m_htmlwin->HistoryForward();
else if(id == m_IdContents)
m_controller->DisplayContents();
else if(id == m_IdSearch)
{
wxString str = m_combo->GetValue();
if(m_combo->FindString(str) == -1 && m_combo->Number() < MAX_COMBO_ENTRIES)
m_combo->Append(str);
m_controller->KeywordSearch(str);
}
}
wxHelpFrame::wxHelpFrame(wxWindow *parent, int id, wxHelpFrame::wxHelpFrame(wxWindow *parent, int id,
const wxString &title, const wxString &title,
const wxPoint &pos, const wxSize &size, const wxPoint &pos, const wxSize &size,
@@ -85,20 +144,77 @@ wxHelpFrame::wxHelpFrame(wxWindow *parent, int id,
m_htmlwin = new wxHtmlWindow(this,-1,wxDefaultPosition,wxSize(FRAME_WIDTH, m_htmlwin = new wxHtmlWindow(this,-1,wxDefaultPosition,wxSize(FRAME_WIDTH,
FRAME_HEIGHT)); FRAME_HEIGHT));
m_IdBack = wxWindow::NewControlId();
m_IdFwd = wxWindow::NewControlId();
m_IdContents = wxWindow::NewControlId();
m_IdCombo = wxWindow::NewControlId();
m_IdSearch = wxWindow::NewControlId();
wxButton *btn_back = new wxButton(this, m_IdBack, _("Back"));
wxButton *btn_fwd = new wxButton(this, m_IdFwd, _("Forward"));
wxButton *btn_contents = new wxButton(this, m_IdContents, _("Contents"));
m_combo = new wxComboBox(this, m_IdCombo);
wxButton *btn_search = new wxButton(this, m_IdSearch, _("Search"));
m_filter = new wxForceHtmlFilter;
wxLayoutConstraints *c; wxLayoutConstraints *c;
c = new wxLayoutConstraints; c = new wxLayoutConstraints;
c->left.SameAs(this, wxLeft, 2*LAYOUT_X_MARGIN); c->left.SameAs(this, wxLeft, 2*LAYOUT_X_MARGIN);
c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN); c->width.Absolute(BUTTON_WIDTH);
c->top.SameAs(this, wxTop, 2*LAYOUT_Y_MARGIN); c->top.SameAs(this, wxTop, 2*LAYOUT_Y_MARGIN);
c->height.AsIs();
btn_back->SetConstraints(c);
c = new wxLayoutConstraints;
c->left.SameAs(btn_back, wxRight, 2*LAYOUT_X_MARGIN);
c->width.Absolute(BUTTON_WIDTH);
c->top.SameAs(this, wxTop, 2*LAYOUT_Y_MARGIN);
c->height.AsIs();
btn_fwd->SetConstraints(c);
c = new wxLayoutConstraints;
c->left.SameAs(btn_fwd, wxRight, 2*LAYOUT_X_MARGIN);
c->width.Absolute(BUTTON_WIDTH);
c->top.SameAs(this, wxTop, 2*LAYOUT_Y_MARGIN);
c->height.AsIs();
btn_contents->SetConstraints(c);
c = new wxLayoutConstraints;
c->left.SameAs(btn_contents, wxRight, 2*LAYOUT_X_MARGIN);
c->width.Absolute(3*BUTTON_WIDTH);
c->top.SameAs(this, wxTop, 2*LAYOUT_Y_MARGIN);
c->height.AsIs();
m_combo->SetConstraints(c);
c = new wxLayoutConstraints;
c->left.SameAs(m_combo, wxRight, 2*LAYOUT_X_MARGIN);
c->width.Absolute(BUTTON_WIDTH);
c->top.SameAs(this, wxTop, 2*LAYOUT_Y_MARGIN);
c->height.AsIs();
btn_search->SetConstraints(c);
c = new wxLayoutConstraints;
c->left.SameAs(this, wxLeft, 2*LAYOUT_X_MARGIN);
c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
c->top.SameAs(btn_back, wxBottom, 2*LAYOUT_Y_MARGIN);
c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN); c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
m_htmlwin->SetConstraints(c); m_htmlwin->SetConstraints(c);
SetAutoLayout(TRUE); SetAutoLayout(TRUE);
CreateStatusBar();
m_htmlwin->SetRelatedFrame(this, title);
m_htmlwin->SetRelatedStatusBar(0);
m_htmlwin->AddFilter(m_filter);
Show(TRUE); Show(TRUE);
} }
wxHelpFrame::~wxHelpFrame() wxHelpFrame::~wxHelpFrame()
{ {
// delete m_filter;
} }
void void
@@ -122,7 +238,7 @@ wxHelpControllerHtml::wxHelpControllerHtml(void)
m_Frame = NULL; m_Frame = NULL;
m_offset = 0; m_offset = 0;
SetFrameParameters(_("Help"), SetFrameParameters(_("Help: %s"),
wxSize(FRAME_WIDTH, FRAME_HEIGHT), wxSize(FRAME_WIDTH, FRAME_HEIGHT),
wxDefaultPosition); wxDefaultPosition);
} }
@@ -161,6 +277,7 @@ wxHelpControllerHtml::DisplayHelp(wxString const &relativeURL)
} }
} }
m_Frame->Raise();
return m_Frame->LoadPage(url); return m_Frame->LoadPage(url);
} }

View File

@@ -57,11 +57,11 @@ wxString wxHtmlFilterPlainText::ReadFile(const wxFSFile& file)
wxString doc, doc2; wxString doc, doc2;
if (s == NULL) return wxEmptyString; if (s == NULL) return wxEmptyString;
src = (char*) malloc(s -> StreamSize()); src = new char[s -> StreamSize()+1];
src[s -> StreamSize()] = 0; src[s -> StreamSize()] = 0;
s -> Read(src, s -> StreamSize()); s -> Read(src, s -> StreamSize());
doc = src; doc = src;
free(src); delete [] src;
doc.Replace("<", "&lt;", TRUE); doc.Replace("<", "&lt;", TRUE);
doc.Replace(">", "&gt;", TRUE); doc.Replace(">", "&gt;", TRUE);