X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/85833f5c6c5c136d16ccd01c90cc243d5d025e0a..0800a4ba406b3d4f7ba9c35ff38ccedf4036d053:/src/generic/helphtml.cpp diff --git a/src/generic/helphtml.cpp b/src/generic/helphtml.cpp index 6065eeef12..1f3f59250f 100644 --- a/src/generic/helphtml.cpp +++ b/src/generic/helphtml.cpp @@ -1,27 +1,50 @@ -/*-*- c++ -*-******************************************************** - * helphtml.cpp - base class for html help systems * - * * - * (C) 1999 by Karsten Ballüder (Ballueder@usa.net) * - * * - * $Id$ - *******************************************************************/ +///////////////////////////////////////////////////////////////////////////// +// Name: helphtml.cpp +// Purpose: base class for html help systems +// Author: Karsten Ballueder +// Modified by: +// Created: 04/01/98 +// RCS-ID: $Id$ +// Copyright: (c) Karsten Ballueder +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + #ifdef __GNUG__ # pragma implementation "helphtml.h" #endif -#include "wx/setup.h" -#include "wx/helpbase.h" -#include "wx/generic/helpext.h" -#include "wx/string.h" -#include "wx/utils.h" -#include "wx/list.h" -#include "wx/intl.h" -#include -#include -#include -#include +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif +#if wxUSE_HELP + +#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/msgdlg.h" + #include "wx/choicdlg.h" +#endif +#include "wx/helpbase.h" +#include "wx/generic/helpext.h" + +#include +#include +#ifndef __MWERKS__ +#include +#endif + +#if !defined(__WINDOWS__) && !defined(__OS2__) + #include +#endif + +#define CONTENTS_ID 0 class wxExtHelpMapEntry : public wxObject { @@ -104,6 +127,7 @@ wxHTMLHelpControllerBase::LoadFile(const wxString& ifile) else file = ifile; +#if wxUSE_INTL // If a locale is set, look in file/localename, i.e. // If passed "/usr/local/myapp/help" and the current wxLocale is // set to be "de", then look in "/usr/local/myapp/help/de/" @@ -119,12 +143,13 @@ wxHTMLHelpControllerBase::LoadFile(const wxString& ifile) { newfile = WXEXTHELP_SEPARATOR; const wxChar *cptr = wxGetLocale()->GetName().c_str(); - while(*cptr && *cptr != _T('_')) + while(*cptr && *cptr != wxT('_')) newfile << *(cptr++); if(wxDirExists(newfile)) file = newfile; } } +#endif if(! wxDirExists(file)) return FALSE; @@ -141,7 +166,7 @@ wxHTMLHelpControllerBase::LoadFile(const wxString& ifile) m_MapList = new wxList; m_NumOfEntries = 0; - FILE *input = fopen(mapFile.fn_str(),"rt"); + FILE *input = wxFopen(mapFile,wxT("rt")); if(! input) return FALSE; do @@ -180,8 +205,31 @@ wxHTMLHelpControllerBase::DisplayContents() { if(! m_NumOfEntries) return FALSE; - wxBusyCursor b; // display a busy cursor - return KeywordSearch(""); + + wxString contents; + wxNode *node = m_MapList->First(); + wxExtHelpMapEntry *entry; + while(node) + { + entry = (wxExtHelpMapEntry *)node->Data(); + if(entry->id == CONTENTS_ID) + { + contents = entry->url; + break; + } + node = node->Next(); + } + + bool rc = FALSE; + wxString file; + file << m_MapFile << WXEXTHELP_SEPARATOR << contents; + if(file.Contains(wxT('#'))) + file = file.BeforeLast(wxT('#')); + if(contents.Length() && wxFileExists(file)) + rc = DisplaySection(CONTENTS_ID); + + // if not found, open homemade toc: + return rc ? TRUE : KeywordSearch(wxT("")); } bool @@ -203,6 +251,16 @@ wxHTMLHelpControllerBase::DisplaySection(int sectionNo) return FALSE; } +bool wxHTMLHelpControllerBase::DisplaySection(const wxString& section) +{ + bool isFilename = (section.Find(wxT(".htm")) != -1); + + if (isFilename) + return DisplayHelp(section); + else + return KeywordSearch(section); +} + bool wxHTMLHelpControllerBase::DisplayBlock(long blockNo) { @@ -215,7 +273,6 @@ wxHTMLHelpControllerBase::KeywordSearch(const wxString& k) if(! m_NumOfEntries) return FALSE; - wxBusyCursor b; // display a busy cursor wxString *choices = new wxString[m_NumOfEntries]; wxString *urls = new wxString[m_NumOfEntries]; wxString compA, compB; @@ -226,25 +283,28 @@ wxHTMLHelpControllerBase::KeywordSearch(const wxString& k) wxNode *node = m_MapList->First(); wxExtHelpMapEntry *entry; - compA = k; compA.LowerCase(); // we compare case insensitive - while(node) { - entry = (wxExtHelpMapEntry *)node->Data(); - compB = entry->doc; compB.LowerCase(); - if((showAll || compB.Contains(k)) && ! compB.IsEmpty()) + wxBusyCursor b; // display a busy cursor + compA = k; compA.LowerCase(); // we compare case insensitive + while(node) { - urls[idx] = entry->url; - // doesn't work: - // choices[idx] = (**i).doc.Contains((**i).doc.Before(WXEXTHELP_COMMENTCHAR)); - //if(choices[idx].IsEmpty()) // didn't contain the ';' - // choices[idx] = (**i).doc; - choices[idx] = ""; - for(j=0;entry->doc.c_str()[j] - && entry->doc.c_str()[j] != WXEXTHELP_COMMENTCHAR; j++) - choices[idx] << entry->doc.c_str()[j]; - idx++; + entry = (wxExtHelpMapEntry *)node->Data(); + compB = entry->doc; compB.LowerCase(); + if((showAll || compB.Contains(k)) && ! compB.IsEmpty()) + { + urls[idx] = entry->url; + // doesn't work: + // choices[idx] = (**i).doc.Contains((**i).doc.Before(WXEXTHELP_COMMENTCHAR)); + //if(choices[idx].IsEmpty()) // didn't contain the ';' + // choices[idx] = (**i).doc; + choices[idx] = ""; + for(j=0;entry->doc.c_str()[j] + && entry->doc.c_str()[j] != WXEXTHELP_COMMENTCHAR; j++) + choices[idx] << entry->doc.c_str()[j]; + idx++; + } + node = node->Next(); } - node = node->Next(); } if(idx == 1) @@ -282,3 +342,4 @@ wxHTMLHelpControllerBase::OnQuit() { } +#endif // wxUSE_HELP