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
188 lines
4.7 KiB
C++
188 lines
4.7 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// 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;
|
|
}
|