Fix/hack 1.
======== At present, if you wish to load a .hhc file instead of add books manually, you can only have one book - UNLESS you omit the outer <ul> </ul>. Then the contents will appear to have more than book, although in fact it's just one book that's displayed on level zero and therefore get the Book icons. However, you'll also get a dummy 'book' with the name of the project but no children. So my hack detects whether the .hhc file is trying to add books at level zero, and if so, throws away the first 'book', so that only the hhc-specified books get shown. So the end result is that our hhc file can specify multiple sections that don't all hang off one dummy book node which itself hangs off the root node -- which is a UI pain! Fix 2. ==== I changed the test if (!m_Page.IsEmpty()) to if (tag.GetParam("TYPE") == "text/sitemap") at around L.120 of helpdata.cpp as suggested in the comment, so we don't have to specify a URL for the node to be valid. Sometimes you don't want a URL in a contents item. I've added some tests to stop it complaining if you click on a URL-less item. Feature enhancement/Hack 3. ====================== I've added wxHtmlHelpController::SetBookBasePath so that the .hhp/.hhc files don't have to be in the same hierarchy as the HTML files. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@9792 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -91,11 +91,12 @@ class HP_TagHandler : public wxHtmlTagHandler
|
||||
wxHtmlContentsItem *m_Items;
|
||||
int m_ItemsCnt;
|
||||
wxHtmlBookRecord *m_Book;
|
||||
bool m_firstTime; // For checking if we're adding sections at level zero, so we 'delete' the first one
|
||||
|
||||
public:
|
||||
HP_TagHandler(wxHtmlBookRecord *b) : wxHtmlTagHandler()
|
||||
{ m_Book = b; m_Items = NULL; m_ItemsCnt = 0; m_Name = m_Page = wxEmptyString;
|
||||
m_Level = 0; m_ID = -1; }
|
||||
m_Level = 0; m_ID = -1; m_firstTime = TRUE; }
|
||||
wxString GetSupportedTags() { return wxT("UL,OBJECT,PARAM"); }
|
||||
bool HandleTag(const wxHtmlTag& tag);
|
||||
void WriteOut(wxHtmlContentsItem*& array, int& size);
|
||||
@@ -117,10 +118,10 @@ bool HP_TagHandler::HandleTag(const wxHtmlTag& tag)
|
||||
m_Name = m_Page = wxEmptyString;
|
||||
ParseInner(tag);
|
||||
|
||||
if (!m_Page.IsEmpty())
|
||||
/* should be 'if (tag.GetParam("TYPE") == "text/sitemap")'
|
||||
but this works fine. Valid HHW's file may contain only two
|
||||
object tags:
|
||||
if (tag.GetParam("TYPE") == "text/sitemap")
|
||||
|
||||
// if (!m_Page.IsEmpty())
|
||||
/* Valid HHW's file may contain only two object tags:
|
||||
|
||||
<OBJECT type="text/site properties">
|
||||
<param name="ImageType" value="Folder">
|
||||
@@ -137,8 +138,18 @@ bool HP_TagHandler::HandleTag(const wxHtmlTag& tag)
|
||||
condition because text/site properties does not contain Local param
|
||||
*/
|
||||
{
|
||||
if (m_ItemsCnt % wxHTML_REALLOC_STEP == 0)
|
||||
m_Items = (wxHtmlContentsItem*) realloc(m_Items, (m_ItemsCnt + wxHTML_REALLOC_STEP) * sizeof(wxHtmlContentsItem));
|
||||
// We're reading in items at level zero, which must mean we want to specify
|
||||
// our own 'books', so chuck out the first (empty) one that AddBook already
|
||||
// created
|
||||
if (m_firstTime && (m_Level == 0) && (m_ItemsCnt > 0))
|
||||
{
|
||||
m_ItemsCnt --;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_ItemsCnt % wxHTML_REALLOC_STEP == 0)
|
||||
m_Items = (wxHtmlContentsItem*) realloc(m_Items, (m_ItemsCnt + wxHTML_REALLOC_STEP) * sizeof(wxHtmlContentsItem));
|
||||
}
|
||||
m_Items[m_ItemsCnt].m_Level = m_Level;
|
||||
m_Items[m_ItemsCnt].m_ID = m_ID;
|
||||
m_Items[m_ItemsCnt].m_Page = new wxChar[m_Page.Length() + 1];
|
||||
@@ -147,6 +158,8 @@ bool HP_TagHandler::HandleTag(const wxHtmlTag& tag)
|
||||
wxStrcpy(m_Items[m_ItemsCnt].m_Name, m_Name.c_str());
|
||||
m_Items[m_ItemsCnt].m_Book = m_Book;
|
||||
m_ItemsCnt++;
|
||||
|
||||
m_firstTime = FALSE;
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
|
Reference in New Issue
Block a user