KRDetailSectionData::KRDetailSectionData(const QDomElement &elemSource, KoReportReportData *report) : QObject(report) { m_pageBreak = BreakNone; m_detailSection = 0; m_valid = false; //kDebug() << elemSource.tagName(); if (elemSource.tagName() != "report:detail") { return; } QDomNodeList sections = elemSource.childNodes(); for (int nodeCounter = 0; nodeCounter < sections.count(); nodeCounter++) { QDomElement elemThis = sections.item(nodeCounter).toElement(); if (elemThis.tagName() == "report:group") { ORDetailGroupSectionData * dgsd = new ORDetailGroupSectionData(); if ( elemThis.hasAttribute( "report:group-column" ) ) { dgsd->m_column = elemThis.attribute( "report:group-column" ); } if ( elemThis.hasAttribute( "report:group-page-break" ) ) { QString s = elemThis.attribute( "report:group-page-break" ); if ( s == "after-footer" ) { dgsd->m_pagebreak = ORDetailGroupSectionData::BreakAfterGroupFooter; } else if ( s == "before-header" ) { dgsd->m_pagebreak = ORDetailGroupSectionData::BreakBeforeGroupHeader; } else { dgsd->m_pagebreak = ORDetailGroupSectionData::BreakNone; } } if (elemThis.attribute("report:group-sort", "ascending") == "ascending") { dgsd->m_sort = Qt::AscendingOrder; } else { dgsd->m_sort = Qt::DescendingOrder; } for ( QDomElement e = elemThis.firstChildElement( "report:section" ); ! e.isNull(); e = e.nextSiblingElement( "report:section" ) ) { QString s = e.attribute( "report:section-type" ); if ( s == "group-header" ) { KRSectionData * sd = new KRSectionData(e, report); if (sd->isValid()) { dgsd->m_groupHeader = sd; } else { delete sd; } } else if ( s == "group-footer" ) { KRSectionData * sd = new KRSectionData(e, report); if (sd->isValid()) { dgsd->m_groupFooter = sd; } else { delete sd; } } } m_groupList.append(dgsd); KoReportData::SortedField s; s.field = dgsd->m_column; s.order = dgsd->m_sort; m_sortedFields.append(s); } else if (elemThis.tagName() == "report:section" && elemThis.attribute("report:section-type") == "detail") { KRSectionData * sd = new KRSectionData(elemThis, report); if (sd->isValid()) { m_detailSection = sd; } else delete sd; } else { kWarning() << "While parsing detail section encountered an unknown element: " << elemThis.tagName(); } } m_valid = true; }
KRDetailSectionData::KRDetailSectionData(const QDomElement &elemSource) { m_valid = false; if (elemSource.tagName() != "section") { return; } bool have_detail = false; KRSectionData * old_head = 0; KRSectionData * old_foot = 0; QDomNodeList section = elemSource.childNodes(); for (int nodeCounter = 0; nodeCounter < section.count(); nodeCounter++) { QDomElement elemThis = section.item(nodeCounter).toElement(); if (elemThis.tagName() == "group") { QDomNodeList nl = elemThis.childNodes(); QDomNode node; ORDetailGroupSectionData * dgsd = new ORDetailGroupSectionData(); for (int i = 0; i < nl.count(); i++) { node = nl.item(i); if (node.nodeName() == "column") { dgsd->column = node.firstChild().nodeValue(); if (dgsd->head) { dgsd->head->setExtra(dgsd->column); } if (dgsd->foot) { dgsd->foot->setExtra(dgsd->column); } } else if (node.nodeName() == "pagebreak") { QDomElement elemThis = node.toElement(); QString n = elemThis.attribute("when"); if ("after foot" == n) dgsd->pagebreak = ORDetailGroupSectionData::BreakAfterGroupFoot; } else if (node.nodeName() == "head") { KRSectionData * sd = new KRSectionData(node.toElement()); if (sd->isValid()) { dgsd->head = sd; dgsd->head->setExtra(dgsd->column); //TODO Track Totals?sectionTarget.trackTotal += sd->trackTotal; //for ( QList<ORDataData>::iterator it = sd->trackTotal.begin(); it != sd->trackTotal.end(); ++it ) // dgsd->_subtotCheckPoints[*it] = 0.0; } else delete sd; } else if (node.nodeName() == "foot") { KRSectionData * sd = new KRSectionData(node.toElement()); if (sd->isValid()) { dgsd->foot = sd; dgsd->foot->setExtra(dgsd->column); //TODO Track Totals?sectionTarget.trackTotal += sd->trackTotal; //for ( QList<ORDataData>::iterator it = sd->trackTotal.begin(); it != sd->trackTotal.end(); ++it ) // dgsd->_subtotCheckPoints[*it] = 0.0; } else delete sd; } //else //TODO qDebug("While parsing group section encountered an unknown element: %s", node.nodeName().toLatin1()); } m_groupList.append(dgsd); } else if (elemThis.tagName() == "detail") { KRSectionData * sd = new KRSectionData(elemThis); if (sd->isValid()) { m_detailSection = sd; //TODO Track Totals?sectionTarget.trackTotal += sd->trackTotal; have_detail = true; } else delete sd; } kDebug() << "While parsing detail section encountered an unknown element: " << elemThis.tagName(); } m_valid = true; }