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:
David Surovell
2006-03-31 19:04:25 +00:00
parent d879e16fc3
commit b8c3d6306c

View File

@@ -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