simplify KeywordSearch; cleanup and reformat
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38481 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -81,7 +81,7 @@ wxExtHelpController::wxExtHelpController(wxWindow* parentWindow)
|
|||||||
m_BrowserIsNetscape = false;
|
m_BrowserIsNetscape = false;
|
||||||
|
|
||||||
wxChar *browser = wxGetenv(WXEXTHELP_ENVVAR_BROWSER);
|
wxChar *browser = wxGetenv(WXEXTHELP_ENVVAR_BROWSER);
|
||||||
if(browser)
|
if (browser)
|
||||||
{
|
{
|
||||||
m_BrowserName = browser;
|
m_BrowserName = browser;
|
||||||
browser = wxGetenv(WXEXTHELP_ENVVAR_BROWSERISNETSCAPE);
|
browser = wxGetenv(WXEXTHELP_ENVVAR_BROWSERISNETSCAPE);
|
||||||
@@ -106,8 +106,7 @@ void wxExtHelpController::SetViewer(const wxString& viewer, long flags)
|
|||||||
SetBrowser(viewer, (flags & wxHELP_NETSCAPE) != 0);
|
SetBrowser(viewer, (flags & wxHELP_NETSCAPE) != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool wxExtHelpController::DisplayHelp(const wxString &relativeURL)
|
||||||
wxExtHelpController::DisplayHelp(const wxString &relativeURL)
|
|
||||||
{
|
{
|
||||||
// construct hte URL to open -- it's just a file
|
// construct hte URL to open -- it's just a file
|
||||||
wxString url(_T("file://") + m_helpDir);
|
wxString url(_T("file://") + m_helpDir);
|
||||||
@@ -146,7 +145,7 @@ public:
|
|||||||
|
|
||||||
void wxExtHelpController::DeleteList()
|
void wxExtHelpController::DeleteList()
|
||||||
{
|
{
|
||||||
if(m_MapList)
|
if (m_MapList)
|
||||||
{
|
{
|
||||||
wxList::compatibility_iterator node = m_MapList->GetFirst();
|
wxList::compatibility_iterator node = m_MapList->GetFirst();
|
||||||
while (node)
|
while (node)
|
||||||
@@ -155,23 +154,20 @@ void wxExtHelpController::DeleteList()
|
|||||||
m_MapList->Erase(node);
|
m_MapList->Erase(node);
|
||||||
node = m_MapList->GetFirst();
|
node = m_MapList->GetFirst();
|
||||||
}
|
}
|
||||||
|
|
||||||
delete m_MapList;
|
delete m_MapList;
|
||||||
m_MapList = (wxList*) NULL;
|
m_MapList = (wxList*) NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** This must be called to tell the controller where to find the
|
// This must be called to tell the controller where to find the documentation.
|
||||||
documentation.
|
// @param file - NOT a filename, but a directory name.
|
||||||
@param file - NOT a filename, but a directory name.
|
// @return true on success
|
||||||
@return true on success
|
bool wxExtHelpController::Initialize(const wxString& file)
|
||||||
*/
|
|
||||||
bool
|
|
||||||
wxExtHelpController::Initialize(const wxString& file)
|
|
||||||
{
|
{
|
||||||
return LoadFile(file);
|
return LoadFile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool wxExtHelpController::ParseMapFileLine(const wxString& line)
|
bool wxExtHelpController::ParseMapFileLine(const wxString& line)
|
||||||
{
|
{
|
||||||
const wxChar *p = line.c_str();
|
const wxChar *p = line.c_str();
|
||||||
@@ -244,7 +240,7 @@ bool wxExtHelpController::LoadFile(const wxString& file)
|
|||||||
helpDirLoc.AppendDir(locName);
|
helpDirLoc.AppendDir(locName);
|
||||||
dirExists = helpDirLoc.DirExists();
|
dirExists = helpDirLoc.DirExists();
|
||||||
|
|
||||||
if ( !dirExists )
|
if ( ! dirExists )
|
||||||
{
|
{
|
||||||
// try without encoding
|
// try without encoding
|
||||||
const wxString locNameWithoutEncoding = locName.BeforeLast(_T('.'));
|
const wxString locNameWithoutEncoding = locName.BeforeLast(_T('.'));
|
||||||
@@ -273,7 +269,7 @@ bool wxExtHelpController::LoadFile(const wxString& file)
|
|||||||
}
|
}
|
||||||
#endif // wxUSE_INTL
|
#endif // wxUSE_INTL
|
||||||
|
|
||||||
if ( !dirExists && !helpDir.DirExists() )
|
if ( ! dirExists && !helpDir.DirExists() )
|
||||||
{
|
{
|
||||||
wxLogError(_("Help directory \"%s\" not found."),
|
wxLogError(_("Help directory \"%s\" not found."),
|
||||||
helpDir.GetFullPath().c_str());
|
helpDir.GetFullPath().c_str());
|
||||||
@@ -281,7 +277,7 @@ bool wxExtHelpController::LoadFile(const wxString& file)
|
|||||||
}
|
}
|
||||||
|
|
||||||
const wxFileName mapFile(helpDir.GetFullPath(), WXEXTHELP_MAPFILE);
|
const wxFileName mapFile(helpDir.GetFullPath(), WXEXTHELP_MAPFILE);
|
||||||
if ( !mapFile.FileExists() )
|
if ( ! mapFile.FileExists() )
|
||||||
{
|
{
|
||||||
wxLogError(_("Help file \"%s\" not found."),
|
wxLogError(_("Help file \"%s\" not found."),
|
||||||
mapFile.GetFullPath().c_str());
|
mapFile.GetFullPath().c_str());
|
||||||
@@ -320,54 +316,54 @@ bool wxExtHelpController::LoadFile(const wxString& file)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool wxExtHelpController::DisplayContents()
|
||||||
wxExtHelpController::DisplayContents()
|
|
||||||
{
|
{
|
||||||
if(! m_NumOfEntries)
|
if (! m_NumOfEntries)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
wxString contents;
|
wxString contents;
|
||||||
wxList::compatibility_iterator node = m_MapList->GetFirst();
|
wxList::compatibility_iterator node = m_MapList->GetFirst();
|
||||||
wxExtHelpMapEntry *entry;
|
wxExtHelpMapEntry *entry;
|
||||||
while(node)
|
while (node)
|
||||||
{
|
{
|
||||||
entry = (wxExtHelpMapEntry *)node->GetData();
|
entry = (wxExtHelpMapEntry *)node->GetData();
|
||||||
if(entry->id == CONTENTS_ID)
|
if (entry->id == CONTENTS_ID)
|
||||||
{
|
{
|
||||||
contents = entry->url;
|
contents = entry->url;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
node = node->GetNext();
|
node = node->GetNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool rc = false;
|
bool rc = false;
|
||||||
wxString file;
|
wxString file;
|
||||||
file << m_helpDir << wxFILE_SEP_PATH << contents;
|
file << m_helpDir << wxFILE_SEP_PATH << contents;
|
||||||
if(file.Contains(wxT('#')))
|
if (file.Contains(wxT('#')))
|
||||||
file = file.BeforeLast(wxT('#'));
|
file = file.BeforeLast(wxT('#'));
|
||||||
if(contents.length() && wxFileExists(file))
|
if (contents.length() && wxFileExists(file))
|
||||||
rc = DisplaySection(CONTENTS_ID);
|
rc = DisplaySection(CONTENTS_ID);
|
||||||
|
|
||||||
// if not found, open homemade toc:
|
// if not found, open homemade toc:
|
||||||
return rc ? true : KeywordSearch(wxEmptyString);
|
return rc ? true : KeywordSearch(wxEmptyString);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool wxExtHelpController::DisplaySection(int sectionNo)
|
||||||
wxExtHelpController::DisplaySection(int sectionNo)
|
|
||||||
{
|
{
|
||||||
if(! m_NumOfEntries)
|
if (! m_NumOfEntries)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
wxBusyCursor b; // display a busy cursor
|
wxBusyCursor b; // display a busy cursor
|
||||||
wxList::compatibility_iterator node = m_MapList->GetFirst();
|
wxList::compatibility_iterator node = m_MapList->GetFirst();
|
||||||
wxExtHelpMapEntry *entry;
|
wxExtHelpMapEntry *entry;
|
||||||
while(node)
|
while (node)
|
||||||
{
|
{
|
||||||
entry = (wxExtHelpMapEntry *)node->GetData();
|
entry = (wxExtHelpMapEntry *)node->GetData();
|
||||||
if(entry->id == sectionNo)
|
if (entry->id == sectionNo)
|
||||||
return DisplayHelp(entry->url);
|
return DisplayHelp(entry->url);
|
||||||
node = node->GetNext();
|
node = node->GetNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,74 +377,99 @@ bool wxExtHelpController::DisplaySection(const wxString& section)
|
|||||||
return KeywordSearch(section);
|
return KeywordSearch(section);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool wxExtHelpController::DisplayBlock(long blockNo)
|
||||||
wxExtHelpController::DisplayBlock(long blockNo)
|
|
||||||
{
|
{
|
||||||
return DisplaySection((int)blockNo);
|
return DisplaySection((int)blockNo);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool wxExtHelpController::KeywordSearch(const wxString& k,
|
||||||
wxExtHelpController::KeywordSearch(const wxString& k,
|
|
||||||
wxHelpSearchMode WXUNUSED(mode))
|
wxHelpSearchMode WXUNUSED(mode))
|
||||||
{
|
{
|
||||||
if(! m_NumOfEntries)
|
if (! m_NumOfEntries)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
wxString *choices = new wxString[m_NumOfEntries];
|
wxString *choices = new wxString[m_NumOfEntries];
|
||||||
wxString *urls = new wxString[m_NumOfEntries];
|
wxString *urls = new wxString[m_NumOfEntries];
|
||||||
wxString compA, compB;
|
|
||||||
|
|
||||||
int idx = 0, j;
|
int idx = 0;
|
||||||
bool rc;
|
bool rc = false;
|
||||||
bool showAll = k.empty();
|
bool showAll = k.empty();
|
||||||
|
|
||||||
wxList::compatibility_iterator node = m_MapList->GetFirst();
|
wxList::compatibility_iterator node = m_MapList->GetFirst();
|
||||||
wxExtHelpMapEntry *entry;
|
|
||||||
|
|
||||||
{
|
{
|
||||||
wxBusyCursor b; // display a busy cursor
|
// display a busy cursor
|
||||||
compA = k; compA.LowerCase(); // we compare case insensitive
|
wxBusyCursor b;
|
||||||
while(node)
|
wxString compA, compB;
|
||||||
{
|
wxExtHelpMapEntry *entry;
|
||||||
entry = (wxExtHelpMapEntry *)node->GetData();
|
|
||||||
compB = entry->doc; compB.LowerCase();
|
|
||||||
if((showAll || compB.Contains(k)) && ! compB.empty())
|
|
||||||
{
|
|
||||||
urls[idx] = entry->url;
|
|
||||||
// doesn't work:
|
|
||||||
// choices[idx] = (**i).doc.Contains((**i).doc.Before(WXEXTHELP_COMMENTCHAR));
|
|
||||||
//if(choices[idx].empty()) // didn't contain the ';'
|
|
||||||
// choices[idx] = (**i).doc;
|
|
||||||
choices[idx] = wxEmptyString;
|
|
||||||
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->GetNext();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if(idx == 1)
|
// we compare case insensitive
|
||||||
rc = DisplayHelp(urls[0]);
|
if (! showAll)
|
||||||
else if(idx == 0)
|
{
|
||||||
{
|
compA = k;
|
||||||
wxMessageBox(_("No entries found."));
|
compA.LowerCase();
|
||||||
rc = false;
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
idx = wxGetSingleChoiceIndex(showAll ? _("Help Index") : _("Relevant entries:"),
|
|
||||||
showAll ? _("Help Index") : _("Entries found"),
|
|
||||||
idx,choices);
|
|
||||||
if(idx != -1)
|
|
||||||
rc = DisplayHelp(urls[idx]);
|
|
||||||
else
|
|
||||||
rc = false;
|
|
||||||
}
|
|
||||||
delete[] urls;
|
|
||||||
delete[] choices;
|
|
||||||
|
|
||||||
return rc;
|
while (node)
|
||||||
|
{
|
||||||
|
entry = (wxExtHelpMapEntry *)node->GetData();
|
||||||
|
compB = entry->doc;
|
||||||
|
|
||||||
|
bool testTarget = ! compB.empty();
|
||||||
|
if (testTarget && ! showAll)
|
||||||
|
{
|
||||||
|
compB.LowerCase();
|
||||||
|
testTarget = compB.Contains(compA);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (testTarget)
|
||||||
|
{
|
||||||
|
urls[idx] = entry->url;
|
||||||
|
// doesn't work:
|
||||||
|
// choices[idx] = (**i).doc.Contains((**i).doc.Before(WXEXTHELP_COMMENTCHAR));
|
||||||
|
//if (choices[idx].empty()) // didn't contain the ';'
|
||||||
|
// choices[idx] = (**i).doc;
|
||||||
|
choices[idx] = wxEmptyString;
|
||||||
|
for (int j=0; ; j++)
|
||||||
|
{
|
||||||
|
wxChar targetChar = entry->doc.c_str()[j];
|
||||||
|
if ((targetChar == 0) || (targetChar == WXEXTHELP_COMMENTCHAR))
|
||||||
|
break;
|
||||||
|
|
||||||
|
choices[idx] << targetChar;
|
||||||
|
}
|
||||||
|
|
||||||
|
idx++;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = node->GetNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (idx)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
wxMessageBox(_("No entries found."));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 1:
|
||||||
|
rc = DisplayHelp(urls[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
idx = wxGetSingleChoiceIndex(
|
||||||
|
showAll ? _("Help Index") : _("Relevant entries:"),
|
||||||
|
showAll ? _("Help Index") : _("Entries found"),
|
||||||
|
idx, choices);
|
||||||
|
if (idx >= 0)
|
||||||
|
rc = DisplayHelp(urls[idx]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
delete [] urls;
|
||||||
|
delete [] choices;
|
||||||
|
|
||||||
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -461,5 +482,4 @@ void wxExtHelpController::OnQuit()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // wxUSE_HELP
|
#endif // wxUSE_HELP
|
||||||
|
Reference in New Issue
Block a user