#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 <stdio.h>
#include <ctype.h>
+#ifndef __MWERKS__
#include <sys/stat.h>
+#endif
-#ifndef __WINDOWS__
+#if !defined(__WINDOWS__) && !defined(__OS2__)
#include <unistd.h>
#endif
+// ----------------------------------------------------------------------------
+// constants
+// ----------------------------------------------------------------------------
+
+/// Name for map file.
+#define WXEXTHELP_MAPFILE _T("wxhelp.map")
+/// Maximum line length in map file.
+#define WXEXTHELP_BUFLEN 512
+/// Character introducing comments/documentation field in map file.
+#define WXEXTHELP_COMMENTCHAR ';'
+
+#define CONTENTS_ID 0
+
class wxExtHelpMapEntry : public wxObject
{
public:
wxChar* f = wxGetWorkingDirectory();
file = f;
delete[] f; // wxGetWorkingDirectory returns new memory
+#ifdef __WXMAC__
+ file << ifile;
+#else
file << WXEXTHELP_SEPARATOR << ifile;
+#endif
}
else
file = 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;
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
break; // error
for(i=0; isdigit(buffer[i])||isspace(buffer[i])||buffer[i]=='-'; i++)
; // find begin of URL
- url = "";
+ url = wxT("");
while(buffer[i] && ! isspace(buffer[i]) && buffer[i] !=
WXEXTHELP_COMMENTCHAR)
- url << buffer[i++];
+ url << (wxChar) buffer[i++];
while(buffer[i] && buffer[i] != WXEXTHELP_COMMENTCHAR)
i++;
- doc = "";
+ doc = wxT("");
if(buffer[i])
- doc = (buffer + i + 1); // skip the comment character
+ doc = wxString::FromAscii( (buffer + i + 1) ); // skip the comment character
m_MapList->Append(new wxExtHelpMapEntry(id,url,doc));
m_NumOfEntries++;
}
if(! m_NumOfEntries)
return FALSE;
- // use ID 0 for contents
- if(! DisplaySection(0))
- return KeywordSearch("");
- else
- return TRUE;
+ 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
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)
{
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;
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] = wxT("");
+ 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)
{
}
+#endif // wxUSE_HELP