]> git.saurik.com Git - wxWidgets.git/blobdiff - src/html/helpfrm.cpp
added UTF-16/32-[LB]E conversions; got rid of wxCharacterSet and simplified and fixed...
[wxWidgets.git] / src / html / helpfrm.cpp
index 5191e19ecde71601aa0e451f4805a958a4fde579..e317b2159841a2ca4f22974a6279ef3f6035ae85 100644 (file)
@@ -9,7 +9,7 @@
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
 #pragma implementation "helpfrm.h"
 #endif
 
@@ -496,7 +496,11 @@ wxHtmlHelpFrame::~wxHtmlHelpFrame()
         delete m_Data;
     if (m_NormalFonts) delete m_NormalFonts;
     if (m_FixedFonts) delete m_FixedFonts;
-    if (m_PagesHash) delete m_PagesHash;
+    if (m_PagesHash) 
+    {
+        WX_CLEAR_HASH_TABLE(*m_PagesHash);
+        delete m_PagesHash;
+    }
 }
 
 
@@ -653,12 +657,23 @@ bool wxHtmlHelpFrame::DisplayIndex()
 
 
 
-bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword)
+bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword,
+                                    wxHelpSearchMode mode)
 {
-    if (! (m_SearchList && m_SearchButton && m_SearchText && m_SearchChoice))
-        return FALSE;
+    if (mode == wxHELP_SEARCH_ALL)
+    {
+        if ( !(m_SearchList &&
+               m_SearchButton && m_SearchText && m_SearchChoice) )
+            return false;
+    }
+    else if (mode == wxHELP_SEARCH_INDEX)
+    {
+        if ( !(m_IndexList &&
+               m_IndexButton && m_IndexButtonAll && m_IndexText) )
+            return false;
+    }
 
-    int foundcnt = 0, curi;
+    int foundcnt = 0;
     wxString foundstr;
     wxString book = wxEmptyString;
 
@@ -668,48 +683,86 @@ bool wxHtmlHelpFrame::KeywordSearch(const wxString& keyword)
         m_HtmlWin->Show(TRUE);
         m_Splitter->SplitVertically(m_NavigPan, m_HtmlWin, m_Cfg.sashpos);
     }
-    m_NavigNotebook->SetSelection(m_SearchPage);
-    m_SearchList->Clear();
-    m_SearchText->SetValue(keyword);
-    m_SearchButton->Enable(FALSE);
-
-    if (m_SearchChoice->GetSelection() != 0)
-        book = m_SearchChoice->GetStringSelection();
-
-    wxHtmlSearchStatus status(m_Data, keyword,
-                              m_SearchCaseSensitive->GetValue(), m_SearchWholeWords->GetValue(),
-                              book);
-
-    wxProgressDialog progress(_("Searching..."), _("No matching page found yet"),
-                              status.GetMaxIndex(), this,
-                              wxPD_APP_MODAL | wxPD_CAN_ABORT | wxPD_AUTO_HIDE);
 
-    while (status.IsActive())
+    if (mode == wxHELP_SEARCH_ALL)
     {
-        curi = status.GetCurIndex();
-        if (curi % 32 == 0 && progress.Update(curi) == FALSE)
-            break;
-        if (status.Search())
+        m_NavigNotebook->SetSelection(m_SearchPage);
+        m_SearchList->Clear();
+        m_SearchText->SetValue(keyword);
+        m_SearchButton->Enable(false);
+
+        if (m_SearchChoice->GetSelection() != 0)
+            book = m_SearchChoice->GetStringSelection();
+
+        wxHtmlSearchStatus status(m_Data, keyword,
+                                  m_SearchCaseSensitive->GetValue(),
+                                  m_SearchWholeWords->GetValue(),
+                                  book);
+
+        wxProgressDialog progress(_("Searching..."),
+                                  _("No matching page found yet"),
+                                  status.GetMaxIndex(), this,
+                                  wxPD_APP_MODAL | wxPD_CAN_ABORT | wxPD_AUTO_HIDE);
+
+        int curi;
+        while (status.IsActive())
         {
-            foundstr.Printf(_("Found %i matches"), ++foundcnt);
-            progress.Update(status.GetCurIndex(), foundstr);
-            m_SearchList->Append(status.GetName(), status.GetContentsItem());
+            curi = status.GetCurIndex();
+            if (curi % 32 == 0 && progress.Update(curi) == FALSE)
+                break;
+            if (status.Search())
+            {
+                foundstr.Printf(_("Found %i matches"), ++foundcnt);
+                progress.Update(status.GetCurIndex(), foundstr);
+                m_SearchList->Append(status.GetName(), status.GetContentsItem());
+            }
         }
+
+        m_SearchButton->Enable(TRUE);
+        m_SearchText->SetSelection(0, keyword.Length());
+        m_SearchText->SetFocus();
+    }
+    else if (mode == wxHELP_SEARCH_INDEX)
+    {
+        m_NavigNotebook->SetSelection(m_IndexPage);
+        m_IndexList->Clear();
+        m_IndexButton->Enable(false);
+        m_IndexButtonAll->Enable(false);
+        m_IndexText->SetValue(keyword);
+
+        wxCommandEvent dummy;
+        OnIndexFind(dummy); // what a hack...
+        m_IndexButton->Enable(true);
+        m_IndexButtonAll->Enable(true);
+        foundcnt = m_IndexList->GetCount();
     }
 
-    m_SearchButton->Enable(TRUE);
-    m_SearchText->SetSelection(0, keyword.Length());
-    m_SearchText->SetFocus();
     if (foundcnt)
     {
-        wxHtmlContentsItem *it = (wxHtmlContentsItem*) m_SearchList->GetClientData(0);
+        wxHtmlContentsItem *it;
+        switch ( mode )
+        {
+            default:
+                wxFAIL_MSG( _T("unknown help search mode") );
+                // fall back
+
+            case wxHELP_SEARCH_ALL:
+                it = (wxHtmlContentsItem*) m_SearchList->GetClientData(0);
+                break;
+
+            case wxHELP_SEARCH_INDEX:
+                it = (wxHtmlContentsItem*) m_IndexList->GetClientData(0);
+                break;
+        }
+
         if (it)
         {
             m_HtmlWin->LoadPage(it->GetFullPath());
             NotifyPageChanged();
         }
     }
-    return (foundcnt > 0);
+
+    return foundcnt > 0;
 }
 
 void wxHtmlHelpFrame::CreateContents()
@@ -717,11 +770,12 @@ void wxHtmlHelpFrame::CreateContents()
     if (! m_ContentsBox)
         return ;
 
-    m_ContentsBox->Clear();
-
-    if (m_PagesHash) delete m_PagesHash;
+    if (m_PagesHash)
+    {
+        WX_CLEAR_HASH_TABLE(*m_PagesHash);
+        delete m_PagesHash;
+    }
     m_PagesHash = new wxHashTable(wxKEY_STRING, 2 * m_Data->GetContentsCnt());
-    m_PagesHash->DeleteContents(TRUE);
 
     int cnt = m_Data->GetContentsCnt();
     int i;
@@ -785,7 +839,8 @@ void wxHtmlHelpFrame::CreateContents()
             else if (m_hfStyle & wxHF_ICONS_BOOK_CHAPTER)
                 image = (it->m_Level == 1) ? IMG_Book : IMG_Folder;
             m_ContentsBox->SetItemImage(roots[it->m_Level], image);
-            m_ContentsBox->SetItemSelectedImage(roots[it->m_Level], image);
+            m_ContentsBox->SetItemImage(roots[it->m_Level], image,
+                                        wxTreeItemIcon_Selected);
             imaged[it->m_Level] = TRUE;
         }
     }
@@ -1062,7 +1117,6 @@ BEGIN_EVENT_TABLE(wxHtmlHelpFrameOptionsDialog, wxDialog)
     EVT_SPINCTRL(-1, wxHtmlHelpFrameOptionsDialog::OnUpdateSpin)
 END_EVENT_TABLE()
 
-
 void wxHtmlHelpFrame::OptionsDialog()
 {
     wxHtmlHelpFrameOptionsDialog dlg(this);
@@ -1074,7 +1128,7 @@ void wxHtmlHelpFrame::OptionsDialog()
         enu.EnumerateFacenames();
         m_NormalFonts = new wxArrayString;
         *m_NormalFonts = *enu.GetFacenames();
-        m_NormalFonts->Sort();
+        m_NormalFonts->Sort(wxStringSortAscending);
     }
     if (m_FixedFonts == NULL)
     {
@@ -1082,7 +1136,7 @@ void wxHtmlHelpFrame::OptionsDialog()
         enu.EnumerateFacenames(wxFONTENCODING_SYSTEM, TRUE);
         m_FixedFonts = new wxArrayString;
         *m_FixedFonts = *enu.GetFacenames();
-        m_FixedFonts->Sort();
+        m_FixedFonts->Sort(wxStringSortAscending);
     }
     
     // VS: We want to show the font that is actually used by wxHtmlWindow.
@@ -1310,8 +1364,8 @@ void wxHtmlHelpFrame::OnToolbar(wxCommandEvent& event)
                 pos = m_BookmarksNames.Index(item);
                 if (pos != wxNOT_FOUND)
                 {
-                    m_BookmarksNames.Remove(pos);
-                    m_BookmarksPages.Remove(pos);
+                    m_BookmarksNames.RemoveAt(pos);
+                    m_BookmarksPages.RemoveAt(pos);
                     m_Bookmarks->Delete(m_Bookmarks->GetSelection());
                 }
             }
@@ -1484,7 +1538,8 @@ void wxHtmlHelpFrame::OnSearch(wxCommandEvent& WXUNUSED(event))
 {
     wxString sr = m_SearchText->GetLineText(0);
 
-    if (sr != wxEmptyString) KeywordSearch(sr);
+    if (!sr.empty())
+        KeywordSearch(sr, wxHELP_SEARCH_ALL);
 }
 
 void wxHtmlHelpFrame::OnBookmarksSel(wxCommandEvent& WXUNUSED(event))