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,72 +377,97 @@ 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();
{
// display a busy cursor
wxBusyCursor b;
wxString compA, compB;
wxExtHelpMapEntry *entry; wxExtHelpMapEntry *entry;
// we compare case insensitive
if (! showAll)
{ {
wxBusyCursor b; // display a busy cursor compA = k;
compA = k; compA.LowerCase(); // we compare case insensitive compA.LowerCase();
while(node) }
while (node)
{ {
entry = (wxExtHelpMapEntry *)node->GetData(); entry = (wxExtHelpMapEntry *)node->GetData();
compB = entry->doc; compB.LowerCase(); compB = entry->doc;
if((showAll || compB.Contains(k)) && ! compB.empty())
bool testTarget = ! compB.empty();
if (testTarget && ! showAll)
{
compB.LowerCase();
testTarget = compB.Contains(compA);
}
if (testTarget)
{ {
urls[idx] = entry->url; urls[idx] = entry->url;
// doesn't work: // doesn't work:
// choices[idx] = (**i).doc.Contains((**i).doc.Before(WXEXTHELP_COMMENTCHAR)); // choices[idx] = (**i).doc.Contains((**i).doc.Before(WXEXTHELP_COMMENTCHAR));
//if(choices[idx].empty()) // didn't contain the ';' //if (choices[idx].empty()) // didn't contain the ';'
// choices[idx] = (**i).doc; // choices[idx] = (**i).doc;
choices[idx] = wxEmptyString; choices[idx] = wxEmptyString;
for(j=0;entry->doc.c_str()[j] for (int j=0; ; j++)
&& entry->doc.c_str()[j] != WXEXTHELP_COMMENTCHAR; j++) {
choices[idx] << entry->doc.c_str()[j]; wxChar targetChar = entry->doc.c_str()[j];
if ((targetChar == 0) || (targetChar == WXEXTHELP_COMMENTCHAR))
break;
choices[idx] << targetChar;
}
idx++; idx++;
} }
node = node->GetNext(); node = node->GetNext();
} }
} }
if(idx == 1) switch (idx)
rc = DisplayHelp(urls[0]);
else if(idx == 0)
{ {
case 0:
wxMessageBox(_("No entries found.")); wxMessageBox(_("No entries found."));
rc = false; break;
}
else case 1:
{ rc = DisplayHelp(urls[0]);
idx = wxGetSingleChoiceIndex(showAll ? _("Help Index") : _("Relevant entries:"), break;
default:
idx = wxGetSingleChoiceIndex(
showAll ? _("Help Index") : _("Relevant entries:"),
showAll ? _("Help Index") : _("Entries found"), showAll ? _("Help Index") : _("Entries found"),
idx,choices); idx, choices);
if(idx != -1) if (idx >= 0)
rc = DisplayHelp(urls[idx]); rc = DisplayHelp(urls[idx]);
else break;
rc = false;
} }
delete[] urls;
delete[] choices; delete [] urls;
delete [] choices;
return rc; return rc;
} }
@@ -461,5 +482,4 @@ void wxExtHelpController::OnQuit()
{ {
} }
#endif // wxUSE_HELP #endif // wxUSE_HELP