void AddRow(const wxHtmlTag& tag);
void AddCell(wxHtmlContainerCell *cell, const wxHtmlTag& tag);
+ const wxColour& GetRowDefaultBackgroundColour() const { return m_rBkg; }
+
private:
// Reallocates memory to given number of cols/rows
// and changes m_NumCols/m_NumRows value to reflect this change
wxString m_tAlign, m_rAlign;
wxHtmlContainerCell *m_enclosingContainer;
+ // Call ParseInner() preserving background colour and mode after any
+ // changes done by it.
+ void CallParseInnerWithBg(const wxHtmlTag& tag, const wxColour& colBg)
+ {
+ const wxColour oldbackclr = m_WParser->GetActualBackgroundColor();
+ const int oldbackmode = m_WParser->GetActualBackgroundMode();
+ if ( colBg.IsOk() )
+ {
+ m_WParser->SetActualBackgroundColor(colBg);
+ m_WParser->SetActualBackgroundMode(wxBRUSHSTYLE_SOLID);
+ m_WParser->GetContainer()->InsertCell(
+ new wxHtmlColourCell(colBg, wxHTML_CLR_BACKGROUND)
+ );
+ }
+
+ ParseInner(tag);
+
+ if ( oldbackmode != m_WParser->GetActualBackgroundMode() ||
+ oldbackclr != m_WParser->GetActualBackgroundColor() )
+ {
+ m_WParser->SetActualBackgroundMode(oldbackmode);
+ m_WParser->SetActualBackgroundColor(oldbackclr);
+ m_WParser->GetContainer()->InsertCell(
+ new wxHtmlColourCell(oldbackclr,
+ oldbackmode == wxBRUSHSTYLE_TRANSPARENT
+ ? wxHTML_CLR_TRANSPARENT_BACKGROUND
+ : wxHTML_CLR_BACKGROUND)
+ );
+ }
+ }
+
TAG_HANDLER_CONSTR(TABLE)
{
m_Table = NULL;
if (tag.HasParam(wxT("ALIGN")))
m_tAlign = tag.GetParam(wxT("ALIGN"));
- ParseInner(tag);
+ CallParseInnerWithBg(tag, m_Table->GetBackgroundColour());
m_WParser->SetAlign(oldAlign);
m_WParser->SetContainer(m_enclosingContainer);
new wxHtmlFontCell(m_WParser->CreateCurrentFont()));
}
- ParseInner(tag);
+ CallParseInnerWithBg(tag, m_Table->GetRowDefaultBackgroundColour());
if ( isHeader )
{