Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
0
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;
}