internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;
            object nodImage = null;

            xProperty = new CSXml.cXmlProperty();
            xProperty.setName("Image");
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            byte[] vBytes = null;
            if (getImage() != null)
            {
                cImage.serialiseBitmap(getImage(), vBytes);
            }
            else
            {
                G.redim(ref vBytes, 0);
            }
            xProperty.setName("Data");
            xProperty.setBinaryValue(vBytes);

            xDoc.addBinaryPropertyToNode(nodeObj, xProperty);
            G.redim(ref vBytes, 0);

            return m_aspect.save(xDoc, nodeObj);
        }
 internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
 {
     nodeObj = xDoc.getNodeFromNode(nodeObj, "Field");
     m_index = xDoc.getNodeProperty(nodeObj, "Index").getValueInt(eTypes.eInteger);
     m_name = xDoc.getNodeProperty(nodeObj, "Name").getValueString(eTypes.eText);
     m_fieldType = xDoc.getNodeProperty(nodeObj, "FieldType").getValueInt(eTypes.eInteger);
     return true;
 }
        internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
        {
            m_columnType = (CSDataBase.csDataType)xDoc.getNodeProperty(nodeObj, "TypeColumn").getValueInt(eTypes.eInteger);
            // TODO: remove me
            //m_value = xDoc.getNodeProperty(nodeObj, "Value").getValueString(eTypes.eText);
            m_position = xDoc.getNodeProperty(nodeObj, "Position").getValueInt(eTypes.eInteger);
            m_name = xDoc.getNodeProperty(nodeObj, "Name").getValueString(eTypes.eText);
            m_key = xDoc.getNodeProperty(nodeObj, "Key").getValueString(eTypes.eText);

            return true;
        }
        internal bool load(CSXml.cXml xDoc, XmlNode nodeObj, int index)
        {
            try { m_valueFieldName = xDoc.getNodeProperty(nodeObj, "ValueFieldName").getValueString(eTypes.eText); }
            catch { }
            try { m_labelFieldName = xDoc.getNodeProperty(nodeObj, "LabelFieldName").getValueString(eTypes.eText); }
            catch { }
            try { m_color = (csColors)xDoc.getNodeProperty(nodeObj, "Color").getValueInt(eTypes.eLong); }
            catch { }

            return true;
        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        { 
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;

            xProperty = new CSXml.cXmlProperty();

            xProperty.setName("Line");
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            return m_aspect.save(xDoc, nodeObj);
        }
 internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
 {
     nodeObj = xDoc.getNodeFromNode(nodeObj, "Image");
     byte[] vBytes = null;
     vBytes = xDoc.getBinaryNodeProperty(nodeObj, "Data").getBinaryValue();
     //
     // an empty image is serialized as AA== which is vBytes == [0] ( yes the number zero ) and vBytes.Length == 1
     //
     if (vBytes.Length > 1)
     {
         m_image = cImage.deSerialiseBitmap(vBytes);
     }
     G.redim(ref vBytes, 0);
     return m_aspect.load(xDoc, nodeObj);
 }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;
            xProperty = new CSXml.cXmlProperty();

            xProperty.setName("PageID");
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xProperty.setName("Value");
            xProperty.setValue(eTypes.eText, m_value);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            return true;
        }
        internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
        {
            XmlNode nodeObjAspect = null;
            m_name = xDoc.getNodeProperty(nodeObj, "Name").getValueString(eTypes.eText);
            m_fieldType = xDoc.getNodeProperty(nodeObj, "FieldType").getValueInt(eTypes.eInteger);

            nodeObjAspect = nodeObj;
            if (!m_aspect.load(xDoc, nodeObjAspect))
            {
                return false;
            }
            else 
            {
                return true;
            }
        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        { 
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;
            xProperty = new CSXml.cXmlProperty();

            xProperty.setName("Label");
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xProperty.setName("Text");
            xProperty.setValue(eTypes.eText, m_text);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("CanGrow");
            xProperty.setValue(eTypes.eBoolean, m_canGrow);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            return m_aspect.save(xDoc, nodeObj);
        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather, int index)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;
            xProperty = new CSXml.cXmlProperty();

            xProperty.setName("Serie_" + index.ToString());
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xProperty.setName("ValueFieldName");
            xProperty.setValue(eTypes.eText, m_valueFieldName);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("LabelFieldName");
            xProperty.setValue(eTypes.eText, m_labelFieldName);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Color");
            xProperty.setValue(eTypes.eLong, m_color);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            return true;
        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;

            xProperty = new CSXml.cXmlProperty();

            xProperty.setName("Field");
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xProperty.setName("Index");
            xProperty.setValue(eTypes.eInteger, m_index);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Name");
            xProperty.setValue(eTypes.eText, m_name);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("FieldType");
            xProperty.setValue(eTypes.eInteger, m_fieldType);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            return true;
        }
 private void loadPaperInfo(CSXml.cXml docXml)
 {
     XmlNode nodeObj = null;
     nodeObj = docXml.getRootNode();
     nodeObj = docXml.getNodeFromNode(nodeObj, C_NODEPAPERINFO);
     if (!m_paperInfo.load(docXml, nodeObj)) { return; }
 }
        private bool nLoad(CSXml.cXml docXml)
        {
            pDestroyCrossRef(m_headers);
            pDestroyCrossRef(m_details);
            pDestroyCrossRef(m_footers);
            pDestroyCrossRef(m_groups.getGroupsHeaders());
            pDestroyCrossRef(m_groups.getGroupsFooters());

            m_headers.clear();
            m_groups.clear();
            m_details.clear();
            m_footers.clear();
            m_controls.clear();
            m_formulas.clear();
            m_connect.getColumns().clear();
            m_connect.getParameters().clear();

            m_details.setCopyColl(m_controls);
            m_headers.setCopyColl(m_controls);
            m_footers.setCopyColl(m_controls);
            m_groupsHeaders.setCopyColl(m_controls);
            m_groupsFooters.setCopyColl(m_controls);

            if (!loadAux(docXml, m_headers, C_NODERPTHEADERS)) { return false; }
            if (!loadAux(docXml, m_details, C_NODERPTDETAILS)) { return false; }
            if (!loadAux(docXml, m_footers, C_NODERPTFOOTERS)) { return false; }

            if (!loadGroups(docXml)) { return false; }

            pFixGroupIndex();

            if (!loadConnect(docXml)) { return false; }
            if (!loadConnectsAux(docXml)) { return false; }
            if (!loadLaunchInfo(docXml)) { return false; }

            loadPaperInfo(docXml);

            sortCollection();

            m_originalHeight = m_paperInfo.getCustomHeight();

            return true;
        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;

            xProperty = new CSXml.cXmlProperty();

            xProperty.setName(m_key);
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xProperty.setName("Name");
            xProperty.setValue(eTypes.eText, m_name);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Key");
            xProperty.setValue(eTypes.eText, m_key);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            // TODO: fix me - this is Spanish - English bug we should use Index
            //
            xProperty.setName("Indice");
            xProperty.setValue(eTypes.eInteger, m_index);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("TypeSection");
            xProperty.setValue(eTypes.eInteger, getTypeSection());
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("HasFormulaHide");
            xProperty.setValue(eTypes.eBoolean, m_hasFormulaHide);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            if (!m_aspect.save(xDoc, nodeObj)) 
            { 
                return false; 
            }
            if (!m_formulaHide.save(xDoc, nodeObj)) 
            { 
                return false; 
            }

            xProperty.setName(C_NODERPTSECTIONLINES);
            xProperty.setValue(eTypes.eText, "");
            nodeObj = xDoc.addNodeToNode(nodeObj, xProperty);

            cReportSectionLine seccLn = null;
            for (int _i = 0; _i < m_sectionLines.count(); _i++)
            {
                seccLn = m_sectionLines.item(_i);
                seccLn.save(xDoc, nodeObj);
            }

            return true;
        }
        internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
        {
            XmlNode nodeObjSecLn = null;
            XmlNode nodeObjAspect = null;
            cReportSectionLine secLn = null;

            m_name = xDoc.getNodeProperty(nodeObj, "Name").getValueString(eTypes.eText);

            // TODO: fix me - this is Spanish - English bug we should use Index
            //
            m_index = xDoc.getNodeProperty(nodeObj, "Indice").getValueInt(eTypes.eInteger);

            setTypeSection((csRptSectionType)xDoc.getNodeProperty(nodeObj, "TypeSection").getValueInt(eTypes.eInteger));
            m_hasFormulaHide = xDoc.getNodeProperty(nodeObj, "HasFormulaHide").getValueBool(eTypes.eBoolean);

            nodeObjAspect = nodeObj;
            if (!m_aspect.load(xDoc, nodeObjAspect))
            {
                return false;
            }

            XmlNode nodeObjAux = nodeObj;
            if (!m_formulaHide.load(xDoc, nodeObjAux))
            {
                return false;
            }

            m_sectionLines.clear();

            nodeObj = xDoc.getNodeFromNode(nodeObj, C_NODERPTSECTIONLINES);
            if (xDoc.nodeHasChild(nodeObj))
            {
                nodeObjSecLn = xDoc.getNodeChild(nodeObj);
                while (nodeObjSecLn != null)
                {
                    String key = xDoc.getNodeProperty(nodeObjSecLn, "Key").getValueString(eTypes.eText);
                    secLn = m_sectionLines.add(null, key, -1);
                    if (!secLn.load(xDoc, nodeObjSecLn))
                    {
                        return false;
                    }
                    secLn.setSectionName(m_name);
                    nodeObjSecLn = xDoc.getNextNode(nodeObjSecLn);
                }
            }

            return true;
        }
        internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
        {
            m_keyPaint = xDoc.getNodeProperty(nodeObj, "KeyPaint").getValueString(eTypes.eText);
            m_name = xDoc.getNodeProperty(nodeObj, "Name").getValueString(eTypes.eText);

            try { m_hasFormulaHide = xDoc.getNodeProperty(nodeObj, "HasFormulaHide").getValueBool(eTypes.eBoolean); }
            catch { }
            try { m_hasFormulaValue = xDoc.getNodeProperty(nodeObj, "HasFormulaValue").getValueBool(eTypes.eBoolean); }
            catch { }
            try { m_controlType = (csRptControlType)xDoc.getNodeProperty(nodeObj, "ControlType").getValueInt(eTypes.eInteger); }
            catch { }
            try { m_tag = xDoc.getNodeProperty(nodeObj, "Tag").getValueString(eTypes.eText); }
            catch { }
            try { m_exportColIdx = xDoc.getNodeProperty(nodeObj, "ExportColIdx").getValueInt(eTypes.eLong); }
            catch { }
            try { m_isFreeCtrl = xDoc.getNodeProperty(nodeObj, "IsFreeCtrl").getValueBool(eTypes.eBoolean); }
            catch { }

            try
            {
                if (!m_field.load(xDoc, nodeObj)) { return false; }
                if (!m_image.load(xDoc, nodeObj)) { return false; }
                if (!m_label.load(xDoc, nodeObj)) { return false; }
                if (!m_line.load(xDoc, nodeObj)) { return false; }
                if (!m_formulaHide.load(xDoc, nodeObj)) { return false; }
                if (!m_formulaValue.load(xDoc, nodeObj)) { return false; }
                if (!m_chart.load(xDoc, nodeObj)) { return false; }

                // TODO: remove me after all reports were migrated
                //
                if (m_label.getAspect().getFormat() == "" && m_field.getFieldType() == (int)CSDataBase.csAdoDataType.adDBTimeStamp)
                {
                    m_label.getAspect().setFormat("dd/MM/yyyy");
                }

                return true;
            }
            catch 
            { 
                return false; 
            }
        }
        internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
        {
            nodeObj = xDoc.getNodeFromNode(nodeObj, "Aspect");

            // we don't care if some property is missing

            try { m_align = (HorizontalAlignment)xDoc.getNodeProperty(nodeObj, "Align").getValueInt(eTypes.eInteger); }
            catch { }
            try { m_backColor = xDoc.getNodeProperty(nodeObj, "BackColor").getValueInt(eTypes.eLong); }
            catch { }
            try { m_borderColor = xDoc.getNodeProperty(nodeObj, "BorderColor").getValueInt(eTypes.eLong); }
            catch { }
            try { m_borderColor3d = xDoc.getNodeProperty(nodeObj, "BorderColor3D").getValueInt(eTypes.eLong); }
            catch { }
            try { m_borderColor3dShadow = xDoc.getNodeProperty(nodeObj, "BorderColor3DShadow").getValueInt(eTypes.eLong); }
            catch { }
            try { m_borderType = (csReportBorderType)xDoc.getNodeProperty(nodeObj, "BorderType").getValueInt(eTypes.eInteger); }
            catch { }
            try { m_borderWidth = xDoc.getNodeProperty(nodeObj, "BorderWidth").getValueInt(eTypes.eLong); }
            catch { }
            try { m_height = xDoc.getNodeProperty(nodeObj, "Height").getValueInt(eTypes.eLong); }
            catch { }
            try { m_canGrow = xDoc.getNodeProperty(nodeObj, "CanGrow").getValueBool(eTypes.eBoolean); }
            catch { }
            try { m_left = xDoc.getNodeProperty(nodeObj, "Left").getValueInt(eTypes.eLong); }
            catch { }
            try { m_nZOrder = xDoc.getNodeProperty(nodeObj, "nZOrder").getValueInt(eTypes.eInteger); }
            catch { }
            try { m_selectColor = xDoc.getNodeProperty(nodeObj, "SelectColor").getValueInt(eTypes.eLong); }
            catch { }
            try { m_top = xDoc.getNodeProperty(nodeObj, "Top").getValueInt(eTypes.eLong); }
            catch { }
            try { m_width = xDoc.getNodeProperty(nodeObj, "Width").getValueInt(eTypes.eLong); }
            catch { }
            try { m_transparent = xDoc.getNodeProperty(nodeObj, "Transparent").getValueBool(eTypes.eBoolean); }
            catch { }
            try { m_format = xDoc.getNodeProperty(nodeObj, "Format").getValueString(eTypes.eText); }
            catch { }
            try { m_symbol = xDoc.getNodeProperty(nodeObj, "Symbol").getValueString(eTypes.eText); }
            catch { }
            try { m_isAccounting = xDoc.getNodeProperty(nodeObj, "IsAccounting").getValueBool(eTypes.eBoolean); }
            catch { }
            try { m_wordWrap = xDoc.getNodeProperty(nodeObj, "WordWrap").getValueBool(eTypes.eBoolean); }
            catch { }
            try { m_borderRounded = xDoc.getNodeProperty(nodeObj, "BorderRounded").getValueBool(eTypes.eBoolean); }
            catch { }

            twipsToPixels();

            return m_font.load(xDoc, nodeObj);
        }
 private bool loadLaunchInfo(CSXml.cXml docXml)
 {
     XmlNode nodeObj = docXml.getRootNode();
     nodeObj = docXml.getNodeFromNode(nodeObj, C_LAUNCHINFO);
     return m_launchInfo.load(docXml, nodeObj);
 }
 private bool loadConnectsAux(CSXml.cXml docXml)
 {
     XmlNode nodeObj = docXml.getRootNode();
     nodeObj = docXml.getNodeFromNode(nodeObj, C_RPTCONNECTSAUX);
     return m_connectsAux.load(docXml, nodeObj);
 }
        private bool loadAux(CSXml.cXml docXml, cReportSections sections, String keySection)
        {
            XmlNode nodeObj = null;
            XmlNode nodeObjAux = null;
            XmlNode nodeObjSec = null;

            nodeObj = docXml.getRootNode();
            nodeObj = docXml.getNodeFromNode(nodeObj, keySection);

            if (docXml.nodeHasChild(nodeObj))
            {
                nodeObjSec = docXml.getNodeChild(nodeObj);

                while (nodeObjSec != null)
                {
                    nodeObjAux = nodeObjSec;
                    String key = docXml.getNodeProperty(nodeObjAux, "Key").getValueString(eTypes.eText);
                    cReportSection sec = sections.add(null, key);
                    if (!sec.load(docXml, nodeObjAux)) 
                    { 
                        return false; 
                    }
                    nodeObjSec = docXml.getNextNode(nodeObjSec);
                }
            }
            return true;
        }
        private bool loadFormulas(CSXml.cXml docXml)
        {
            XmlNode nodeObj = null;
            XmlNode nodeObjAux = null;
            XmlNode nodeObjSec = null;

            nodeObj = docXml.getRootNode();
            nodeObj = docXml.getNodeFromNode(nodeObj, C_NODERPTFORMULAS);

            if (docXml.nodeHasChild(nodeObj))
            {
                nodeObjSec = docXml.getNodeChild(nodeObj);
                while (nodeObjSec != null)
                {
                    nodeObjAux = nodeObjSec;
                    String name = docXml.getNodeProperty(nodeObjAux, "Name").getValueString(eTypes.eText);
                    cReportFormula formula = m_formulas.add(name);
                    if (!formula.load(docXml, nodeObjAux)) 
                    { 
                        return false; 
                    }
                    nodeObjSec = docXml.getNextNode(nodeObjSec);
                }
            }
            return true;
        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;

            xProperty = new CSXml.cXmlProperty();

            xProperty.setName("Page");
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xDoc.setNodeText(nodeObj, "Página " + m_pageNumber);

            xProperty.setName("PageNumber");
            xProperty.setValue(eTypes.eInteger, m_pageNumber);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("HeaderBottom");
            xProperty.setValue(eTypes.eLong, m_headerBottom);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("FooterTop");
            xProperty.setValue(eTypes.eLong, m_footerTop);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            cReportPageField pageFld = null;
            XmlNode nodeAux = null;

            xProperty.setName(C_NODERPTHEADER);
            xProperty.setValue(eTypes.eText, "");
            nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);

            for (int _i = 0; _i < m_header.count(); _i++)
            {
                pageFld = m_header.item(_i);
                pageFld.save(xDoc, nodeAux);
            }

            xProperty.setName(C_NODERPTDETAIL);
            xProperty.setValue(eTypes.eText, "");
            nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);

            for (int _i = 0; _i < m_detail.count(); _i++)
            {
                pageFld = m_detail.item(_i);
                pageFld.save(xDoc, nodeAux);
            }

            xProperty.setName(C_NODERPTFOOTER);
            xProperty.setValue(eTypes.eText, "");
            nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);

            for (int _i = 0; _i < m_footer.count(); _i++)
            {
                pageFld = m_footer.item(_i);
                pageFld.save(xDoc, nodeAux);
            }

            return true;
        }
        private bool loadGroups(CSXml.cXml docXml)
        {
            XmlNode nodeObj = null;
            XmlNode nodeObjAux = null;
            XmlNode nodeObjGroup = null;

            nodeObj = docXml.getRootNode();
            nodeObj = docXml.getNodeFromNode(nodeObj, C_NODEGROUPS);

            if (docXml.nodeHasChild(nodeObj))
            {
                nodeObjGroup = docXml.getNodeChild(nodeObj);
                while (nodeObjGroup != null)
                {
                    nodeObjAux = nodeObjGroup;
                    String key = docXml.getNodeProperty(nodeObjAux, "Key").getValueString(eTypes.eText);
                    cReportGroup group = getGroups().add(null, key);
                    if (!group.load(docXml, nodeObjAux)) 
                    { 
                        return false; 
                    }
                    nodeObjGroup = docXml.getNextNode(nodeObjGroup);
                }
            }
            return true;
        }
        internal bool saveForWeb(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;

            xProperty = new CSXml.cXmlProperty();

            xProperty.setName("Page");
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xDoc.setNodeText(nodeObj, "Página " + m_pageNumber);

            cReportPageField pageFld = null;
            XmlNode nodeAux = null;
            float top = 0;
            bool addLine = false;

            int nHeader = 0;

            xProperty.setName(C_NODERPTHEADER);
            xProperty.setValue(eTypes.eText, "");
            nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);

            for (int _i = 0; _i < m_header.count(); _i++)
            {
                pageFld = m_header.item(_i);
                addLine = false;

                if (pageFld.getTop() == 0)
                {
                    if (top != pageFld.getInfo().getAspect().getTop())
                    {
                        top = pageFld.getInfo().getAspect().getTop();
                        addLine = true;
                        nHeader = nHeader + 1;
                    }
                }
                else
                {
                    if (top != pageFld.getTop())
                    {
                        top = pageFld.getTop();
                        addLine = true;
                        nHeader = nHeader + 1;
                    }
                }

                if (addLine)
                {
                    xProperty.setName(C_NODERPTHEADERLINE + nHeader.ToString());
                    xProperty.setValue(eTypes.eText, "");
                    nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);
                }

                pageFld.saveForWeb(xDoc, nodeAux);
            }

            xProperty.setName(C_NODERPTDETAIL);
            xProperty.setValue(eTypes.eText, "");
            nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);

            for (int _i = 0; _i < m_detail.count(); _i++)
            {
                pageFld = m_detail.item(_i);

                addLine = false;

                if (pageFld.getTop() == 0)
                {
                    if (top != pageFld.getInfo().getAspect().getTop())
                    {
                        top = pageFld.getInfo().getAspect().getTop();
                        addLine = true;
                    }
                }
                else
                {
                    if (top != pageFld.getTop())
                    {
                        top = pageFld.getTop();
                        addLine = true;
                    }
                }

                if (addLine)
                {
                    xProperty.setName(C_NODERPTDETAILLINE);
                    xProperty.setValue(eTypes.eText, "");
                    nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);
                }

                pageFld.saveForWeb(xDoc, nodeAux);
            }

            xProperty.setName(C_NODERPTFOOTER);
            xProperty.setValue(eTypes.eText, "");
            nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);

            for (int _i = 0; _i < m_footer.count(); _i++)
            {
                pageFld = m_footer.item(_i);
                addLine = false;

                if (pageFld.getTop() == 0)
                {
                    if (top != pageFld.getInfo().getAspect().getTop())
                    {
                        top = pageFld.getInfo().getAspect().getTop();
                        addLine = true;
                    }
                }
                else
                {
                    if (top != pageFld.getTop())
                    {
                        top = pageFld.getTop();
                        addLine = true;
                    }
                }

                if (addLine)
                {
                    xProperty.setName(C_NODERPTFOOTERLINE);
                    xProperty.setValue(eTypes.eText, "");
                    nodeAux = xDoc.addNodeToNode(nodeObj, xProperty);
                }

                pageFld.saveForWeb(xDoc, nodeAux);
            }

            return true;
        }
        private bool nLoadData(CSXml.cXml docXml)
        {
            XmlNode nodeObj = null;
            XmlNode nodeObjAux = null;
            XmlNode nodeObjSec = null;

            m_pages.clear();
            nodeObj = docXml.getRootNode();
            nodeObj = docXml.getNodeFromNode(nodeObj, C_NODERPTPAGES);

            if (docXml.nodeHasChild(nodeObj))
            {
                nodeObjSec = docXml.getNodeChild(nodeObj);
                while (nodeObjSec != null)
                {
                    nodeObjAux = nodeObjSec;
                    cReportPage page = m_pages.add(null);
                    if (!page.load(docXml, nodeObjAux)) 
                    { 
                        return false; 
                    }
                    nodeObjSec = docXml.getNextNode(nodeObjSec);
                }
            }
            return true;
        }
        internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
        {
            XmlNode nodeObjSecLn = null;

            m_pageNumber = xDoc.getNodeProperty(nodeObj, "PageNumber").getValueInt(eTypes.eInteger);
            m_headerBottom = xDoc.getNodeProperty(nodeObj, "HeaderBottom").getValueInt(eTypes.eLong);
            m_footerTop = xDoc.getNodeProperty(nodeObj, "FooterTop").getValueInt(eTypes.eLong);

            m_header.clear();
            m_detail.clear();
            m_footer.clear();

            nodeObj = xDoc.getNodeFromNode(nodeObj, C_NODERPTHEADER);
            if (xDoc.nodeHasChild(nodeObj))
            {
                nodeObjSecLn = xDoc.getNodeChild(nodeObj);
                while (nodeObjSecLn != null)
                {
                    if (!m_header.add(null).load(xDoc, nodeObjSecLn)) 
                    { 
                        return false; 
                    }
                    nodeObjSecLn = xDoc.getNextNode(nodeObjSecLn);
                }
            }

            nodeObj = xDoc.getNodeFromNode(nodeObj, C_NODERPTDETAIL);
            if (xDoc.nodeHasChild(nodeObj))
            {
                nodeObjSecLn = xDoc.getNodeChild(nodeObj);
                while (nodeObjSecLn != null)
                {
                    if (!m_detail.add(null).load(xDoc, nodeObjSecLn)) 
                    { 
                        return false; 
                    }
                    nodeObjSecLn = xDoc.getNextNode(nodeObjSecLn);
                }
            }

            nodeObj = xDoc.getNodeFromNode(nodeObj, C_NODERPTFOOTER);
            if (xDoc.nodeHasChild(nodeObj))
            {
                nodeObjSecLn = xDoc.getNodeChild(nodeObj);
                while (nodeObjSecLn != null)
                {
                    if (!m_footer.add(null).load(xDoc, nodeObjSecLn)) 
                    { 
                        return false; 
                    }
                    nodeObjSecLn = xDoc.getNextNode(nodeObjSecLn);
                }
            }

            return true;

        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            pixelsToTwips();

            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;
            xProperty = new CSXml.cXmlProperty();

            xProperty.setName("Aspect");
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xProperty.setName("Align");
            xProperty.setValue(eTypes.eInteger, m_align);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("BackColor");
            xProperty.setValue(eTypes.eLong, m_backColor);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("BorderColor");
            xProperty.setValue(eTypes.eLong, m_borderColor);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("BorderColor3D");
            xProperty.setValue(eTypes.eLong, m_borderColor3d);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("BorderColor3DShadow");
            xProperty.setValue(eTypes.eLong, m_borderColor3dShadow);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("BorderType");
            xProperty.setValue(eTypes.eInteger, m_borderType);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("BorderWidth");
            xProperty.setValue(eTypes.eLong, m_borderWidth);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("CanGrow");
            xProperty.setValue(eTypes.eBoolean, m_canGrow);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Height");
            xProperty.setValue(eTypes.eLong, m_height);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Format");
            xProperty.setValue(eTypes.eText, m_format);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Left");
            xProperty.setValue(eTypes.eLong, m_left);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("nZOrder");
            xProperty.setValue(eTypes.eInteger, m_nZOrder);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("SelectColor");
            xProperty.setValue(eTypes.eLong, m_selectColor);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Top");
            xProperty.setValue(eTypes.eLong, m_top);

            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Width");
            xProperty.setValue(eTypes.eLong, m_width);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Transparent");
            xProperty.setValue(eTypes.eBoolean, m_transparent);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Symbol");
            xProperty.setValue(eTypes.eText, m_symbol);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("IsAccounting");
            xProperty.setValue(eTypes.eBoolean, m_isAccounting);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("WordWrap");
            xProperty.setValue(eTypes.eBoolean, m_wordWrap);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("BorderRounded");
            xProperty.setValue(eTypes.eBoolean, m_borderRounded);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            twipsToPixels();

            return m_font.save(xDoc, nodeObj);
        }
        internal bool load(CSXml.cXml xDoc, XmlNode nodeObj)
        {
            m_columnType = cDatabaseGlobals.getDataTypeFromAdo(xDoc.getNodeProperty(nodeObj, "TypeColumn").getValueInt(eTypes.eInteger));
            m_value = xDoc.getNodeProperty(nodeObj, "Value").getValueString(eTypes.eText);
            m_position = xDoc.getNodeProperty(nodeObj, "Position").getValueInt(eTypes.eInteger);
            m_name = xDoc.getNodeProperty(nodeObj, "Name").getValueString(eTypes.eText);
            m_maxLength = xDoc.getNodeProperty(nodeObj, "MaxLength").getValueInt(eTypes.eInteger);
            m_key = xDoc.getNodeProperty(nodeObj, "Key").getValueString(eTypes.eText);
            m_isNullable = xDoc.getNodeProperty(nodeObj, "IsNullable").getValueBool(eTypes.eBoolean);
            m_hasDefault = xDoc.getNodeProperty(nodeObj, "HasDefault").getValueBool(eTypes.eBoolean);
            m_default = xDoc.getNodeProperty(nodeObj, "Default").getValueString(eTypes.eText);

            return true;
        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;
            xProperty = new CSXml.cXmlProperty();

            xProperty.setName(m_key);
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xProperty.setName("Key");
            xProperty.setValue(eTypes.eText, m_key);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Name");
            xProperty.setValue(eTypes.eText, m_name);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("KeyPaint");
            xProperty.setValue(eTypes.eText, m_keyPaint);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("HasFormulaHide");
            xProperty.setValue(eTypes.eBoolean, m_hasFormulaHide);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("HasFormulaValue");
            xProperty.setValue(eTypes.eBoolean, m_hasFormulaValue);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("ControlType");
            xProperty.setValue(eTypes.eInteger, m_controlType);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Tag");
            xProperty.setValue(eTypes.eText, m_tag);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("ExportColIdx");
            xProperty.setValue(eTypes.eLong, m_exportColIdx);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("IsFreeCtrl");
            xProperty.setValue(eTypes.eBoolean, m_isFreeCtrl);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            if (!m_field.save(xDoc, nodeObj)) { return false; }
            if (!m_image.save(xDoc, nodeObj)) { return false; }
            if (!m_label.save(xDoc, nodeObj)) { return false; }
            if (!m_line.save(xDoc, nodeObj)) { return false; }
            if (!m_formulaHide.save(xDoc, nodeObj)) { return false; }
            if (!m_formulaValue.save(xDoc, nodeObj)) { return false; }
            if (!m_chart.save(xDoc, nodeObj)) { return false; }
            return true;
        }
        internal bool save(CSXml.cXml xDoc, XmlNode nodeFather)
        {
            CSXml.cXmlProperty xProperty = null;
            XmlNode nodeObj = null;
            xProperty = new CSXml.cXmlProperty();

            xProperty.setName(m_key);
            nodeObj = xDoc.addNodeToNode(nodeFather, xProperty);

            xProperty.setName("Key");
            xProperty.setValue(eTypes.eText, m_key);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Name");
            xProperty.setValue(eTypes.eText, m_name);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Position");
            xProperty.setValue(eTypes.eInteger, m_position);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("TypeColumn");
            xProperty.setValue(eTypes.eInteger, cDatabaseGlobals.getAdoTypeFromDataType(m_columnType));
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Value");
            xProperty.setValue(eTypes.eText, m_value);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("MaxLength");
            xProperty.setValue(eTypes.eInteger, m_maxLength);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("IsNullable");
            xProperty.setValue(eTypes.eBoolean, m_isNullable);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("HasDefault");
            xProperty.setValue(eTypes.eBoolean, m_hasDefault);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            xProperty.setName("Default");
            xProperty.setValue(eTypes.eText, m_default);
            xDoc.addPropertyToNode(nodeObj, xProperty);

            return true;
        }