Added wxHelpControllerHtml, derived from wxHtmlHelpControllerBase. API like
wxExtHelpController and fully backwards compatible with the "old" help controller. Docs follow tomorrow. Modified sample to use it if wxHTML is compiled in. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3035 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
187
src/generic/helpwxht.cpp
Normal file
187
src/generic/helpwxht.cpp
Normal file
@@ -0,0 +1,187 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: helpext.cpp
|
||||
// Purpose: an external help controller for wxWindows
|
||||
// Author: Karsten Ballueder
|
||||
// Modified by:
|
||||
// Created: 04/01/98
|
||||
// RCS-ID: $Id$
|
||||
// Copyright: (c) Karsten Ballueder
|
||||
// Licence: wxWindows licence
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifdef __GNUG__
|
||||
# pragma implementation "helpwxht.h"
|
||||
#endif
|
||||
|
||||
#include "wx/wxprec.h"
|
||||
|
||||
#ifdef __BORLANDC__
|
||||
# pragma hdrstop
|
||||
#endif
|
||||
|
||||
#ifndef WX_PRECOMP
|
||||
# include "wx/setup.h"
|
||||
# include "wx/string.h"
|
||||
# include "wx/utils.h"
|
||||
# include "wx/list.h"
|
||||
# include "wx/intl.h"
|
||||
# include "wx/layout.h"
|
||||
#endif
|
||||
|
||||
#include "wx/helpbase.h"
|
||||
#include "wx/generic/helpwxht.h"
|
||||
#include "wx/html/htmlwin.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ctype.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#ifndef __WINDOWS__
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
IMPLEMENT_CLASS(wxHelpControllerHtml, wxHTMLHelpControllerBase)
|
||||
|
||||
/**
|
||||
This class implements help via an external browser.
|
||||
It requires the name of a directory containing the documentation
|
||||
and a file mapping numerical Section numbers to relative URLS.
|
||||
*/
|
||||
|
||||
#define FRAME_WIDTH 400
|
||||
#define FRAME_HEIGHT 400
|
||||
#define LAYOUT_X_MARGIN 2
|
||||
#define LAYOUT_Y_MARGIN 2
|
||||
#define OFFSET 10
|
||||
|
||||
class wxHelpFrame : public wxFrame
|
||||
{
|
||||
public:
|
||||
wxHelpFrame(wxWindow *parent, int id, const wxString &title,
|
||||
const wxPoint &pos, const wxSize &size,
|
||||
wxHelpControllerHtml *controller);
|
||||
~wxHelpFrame();
|
||||
void OnClose(wxCloseEvent &ev);
|
||||
bool LoadPage(const wxString &url) { return m_htmlwin->LoadPage(url); }
|
||||
private:
|
||||
wxHelpControllerHtml *m_controller;
|
||||
wxHtmlWindow *m_htmlwin;
|
||||
DECLARE_EVENT_TABLE()
|
||||
};
|
||||
|
||||
BEGIN_EVENT_TABLE(wxHelpFrame, wxFrame)
|
||||
EVT_CLOSE(wxHelpFrame::OnClose)
|
||||
END_EVENT_TABLE()
|
||||
|
||||
wxHelpFrame::wxHelpFrame(wxWindow *parent, int id,
|
||||
const wxString &title,
|
||||
const wxPoint &pos, const wxSize &size,
|
||||
wxHelpControllerHtml *controller)
|
||||
: wxFrame(parent, id, title, pos, size)
|
||||
{
|
||||
|
||||
m_controller = controller;
|
||||
m_htmlwin = new wxHtmlWindow(this,-1,wxDefaultPosition,wxSize(FRAME_WIDTH,
|
||||
FRAME_HEIGHT));
|
||||
|
||||
wxLayoutConstraints *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(this, wxTop, 2*LAYOUT_Y_MARGIN);
|
||||
c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
|
||||
m_htmlwin->SetConstraints(c);
|
||||
SetAutoLayout(TRUE);
|
||||
Show(TRUE);
|
||||
}
|
||||
|
||||
wxHelpFrame::~wxHelpFrame()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
wxHelpFrame::OnClose(wxCloseEvent &ev)
|
||||
{
|
||||
wxASSERT(m_controller);
|
||||
m_controller->m_Frame = NULL;
|
||||
bool newFrame;
|
||||
int x,y;
|
||||
GetPosition(&x,&y);
|
||||
|
||||
m_controller->GetFrameParameters(NULL, NULL, &newFrame);
|
||||
m_controller->SetFrameParameters(GetTitle(), GetSize(),
|
||||
wxPoint(x,y),
|
||||
newFrame);
|
||||
Destroy();
|
||||
}
|
||||
|
||||
wxHelpControllerHtml::wxHelpControllerHtml(void)
|
||||
{
|
||||
m_Frame = NULL;
|
||||
m_offset = 0;
|
||||
|
||||
SetFrameParameters(_("Help"),
|
||||
wxSize(FRAME_WIDTH, FRAME_HEIGHT),
|
||||
wxDefaultPosition);
|
||||
}
|
||||
|
||||
wxHelpControllerHtml::~wxHelpControllerHtml(void)
|
||||
{
|
||||
if(m_Frame && ! m_NewFrameEachTime)
|
||||
m_Frame->Close();
|
||||
}
|
||||
|
||||
|
||||
#ifdef __WXMSW__
|
||||
# define SEP '\\'
|
||||
#else
|
||||
# define SEP '/'
|
||||
#endif
|
||||
|
||||
bool
|
||||
wxHelpControllerHtml::DisplayHelp(wxString const &relativeURL)
|
||||
{
|
||||
wxBusyCursor b; // display a busy cursor
|
||||
|
||||
wxString url;
|
||||
url << m_MapFile << SEP<< relativeURL;
|
||||
if(! m_Frame || m_NewFrameEachTime)
|
||||
{
|
||||
m_Frame = new wxHelpFrame(NULL, -1, m_FrameTitle,
|
||||
m_FramePosition+wxPoint(m_offset,m_offset),
|
||||
m_FrameSize,
|
||||
this);
|
||||
if(m_NewFrameEachTime)
|
||||
{
|
||||
m_offset += OFFSET;
|
||||
if(m_offset > 200)
|
||||
m_offset = 0;
|
||||
}
|
||||
|
||||
}
|
||||
return m_Frame->LoadPage(url);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
wxHelpControllerHtml::SetFrameParameters(const wxString &title,
|
||||
const wxSize &size,
|
||||
const wxPoint &pos,
|
||||
bool newFrame)
|
||||
{
|
||||
m_FrameTitle = title;
|
||||
m_FrameSize = size;
|
||||
m_FramePosition = pos;
|
||||
m_NewFrameEachTime = newFrame;
|
||||
}
|
||||
|
||||
void
|
||||
wxHelpControllerHtml::GetFrameParameters(wxSize *size = NULL,
|
||||
wxPoint *pos = NULL,
|
||||
bool *newframe = NULL)
|
||||
{
|
||||
if(size) *size = m_FrameSize;
|
||||
if(pos) *pos = m_FramePosition;
|
||||
if(newframe) *newframe = m_NewFrameEachTime;
|
||||
}
|
Reference in New Issue
Block a user