Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  xmldlg_impmodels.cxx   Sprache: C

 
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   Licensed to the Apache Software Foundation (ASF) under one or more
 *   contributor license agreements. See the NOTICE file distributed
 *   with this work for additional information regarding copyright
 *   ownership. The ASF licenses this file to you under the Apache
 *   License, Version 2.0 (the "License"); you may not use this file
 *   except in compliance with the License. You may obtain a copy of
 *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
 */


#include "imp_share.hxx"
#include <com/sun/star/beans/XPropertySet.hpp>
#include <com/sun/star/util/MalformedNumberFormatException.hpp>
#include <com/sun/star/xml/sax/SAXException.hpp>

#include <cppuhelper/exc_hlp.hxx>
#include <sal/log.hxx>
#include <comphelper/diagnose_ex.hxx>
#include <i18nlangtag/languagetag.hxx>

using namespace ::com::sun::star;
using namespace ::com::sun::star::uno;

namespace xmlscript
{

Reference< xml::input::XElement > Frame::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    if ( !m_xContainer.is() )
        m_xContainer.set( m_pImport->_xDialogModelFactory->createInstance( u"com.sun.star.awt.UnoFrameModel"_ustr ), UNO_QUERY );
    // event
    if (m_pImport->isEventElement( nUid, rLocalName ))
    {
       return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
    }
    else if ( rLocalName == "bulletinboard" )
    {
        // Create new DialogImport for this container
        rtl::Reference<DialogImport> pFrameImport = new DialogImport( *m_pImport );
        pFrameImport->_xDialogModel = m_xContainer;
        return new BulletinBoardElement( rLocalName, xAttributes, this,  pFrameImport.get() );
    }
    else if ( rLocalName == "title" )
    {
        getStringAttr( &_label, u"value"_ustr, xAttributes, m_pImport->XMLNS_DIALOGS_UID );

        return new ElementBase( m_pImport->XMLNS_DIALOGS_UID, rLocalName, xAttributes, this, m_pImport );
    }
    else
    {
        SAL_INFO("xmlscript.xmldlg","****** ARGGGGG!!!! **********");
        throw     xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }
}

void Frame::endElement()
{
    if ( !m_xContainer.is() )
            m_xContainer.set( m_pImport->_xDialogModelFactory->createInstance( u"com.sun.star.awt.UnoFrameModel"_ustr ), UNO_QUERY );
    Reference< beans::XPropertySet > xProps( m_xContainer, UNO_QUERY_THROW );
        // m_pImport is what we need to add to ( e.g. the dialog in this case )
    ControlImportContext ctx( m_pImport, xProps,   getControlId( _xAttributes ) );

    Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( 0, 0, _xAttributes ); // inherited from BulletinBoardElement
    if (!_label.isEmpty())
    {
        xControlModel->setPropertyValue( u"Label"_ustr , Any( _label ) );
    }
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}


Reference< xml::input::XElement > MultiPage::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (m_pImport->isEventElement( nUid, rLocalName ))
    {
        return new EventElement(
            nUid, rLocalName, xAttributes, this, m_pImport );
    }
    else if ( rLocalName == "bulletinboard" )
    {
        // Create new DialogImport for this container

        rtl::Reference<DialogImport> pMultiPageImport = new DialogImport( *m_pImport );
        pMultiPageImport->_xDialogModel = m_xContainer;
        return new BulletinBoardElement( rLocalName, xAttributes, this,  pMultiPageImport.get() );
    }
    else
    {

        throw xml::sax::SAXException( u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }
}

void MultiPage::endElement()
{
    Reference< beans::XPropertySet > xProps( m_xContainer, UNO_QUERY_THROW );
        // m_pImport is what we need to add to ( e.g. the dialog in this case )
    ControlImportContext ctx( m_pImport, xProps, getControlId( _xAttributes ));

    Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
        pStyle->importBackgroundColorStyle( xControlModel );
    }

    ctx.importDefaults( 0, 0, _xAttributes ); // inherited from BulletinBoardElement
    ctx.importLongProperty(u"MultiPageValue"_ustr , u"value"_ustr,  _xAttributes );
    ctx.importBooleanProperty( u"Decoration"_ustr, u"withtabs"_ustr,  _xAttributes) ;
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

Reference< xml::input::XElement > Page::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (m_pImport->isEventElement( nUid, rLocalName ))
    {
        return new EventElement(
            nUid, rLocalName, xAttributes, this, m_pImport );
    }
    else if ( rLocalName == "bulletinboard" )
    {

        rtl::Reference<DialogImport> pPageImport = new DialogImport( *m_pImport );
        pPageImport->_xDialogModel = m_xContainer;
        return new BulletinBoardElement( rLocalName, xAttributes, this,  pPageImport.get() );
    }
    else
    {

        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }
}

void Page::endElement()
{
    Reference< beans::XPropertySet > xProps( m_xContainer, UNO_QUERY_THROW );

    ControlImportContext ctx( m_pImport, xProps, getControlId( _xAttributes ));

    Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
        pStyle->importBackgroundColorStyle( xControlModel );
    }

    ctx.importDefaults( 0, 0, _xAttributes ); // inherited from BulletinBoardElement
    ctx.importStringProperty( u"Title"_ustr, u"title"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// progressmeter
Reference< xml::input::XElement > ProgressBarElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement(
        nUid, rLocalName, xAttributes, this, m_pImport );
}

void ProgressBarElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlProgressBarModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFillColorStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importLongProperty( u"ProgressValue"_ustr, u"value"_ustr, _xAttributes );
    ctx.importLongProperty( u"ProgressValueMin"_ustr, u"value-min"_ustr, _xAttributes );
    ctx.importLongProperty( u"ProgressValueMax"_ustr, u"value-max"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// scrollbar
Reference< xml::input::XElement > ScrollBarElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void ScrollBarElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), getControlModelName( u"com.sun.star.awt.UnoControlScrollBarModel"_ustr , _xAttributes ) );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importOrientationProperty( u"Orientation"_ustr , u"align"_ustr, _xAttributes );
    ctx.importLongProperty( u"BlockIncrement"_ustr , u"pageincrement"_ustr , _xAttributes );
    ctx.importLongProperty( u"LineIncrement"_ustr , u"increment"_ustr , _xAttributes );
    ctx.importLongProperty( u"ScrollValue"_ustr ,u"curpos"_ustr, _xAttributes );
    ctx.importLongProperty( u"ScrollValueMax"_ustr , u"maxpos"_ustr , _xAttributes );
    ctx.importLongProperty( u"ScrollValueMin"_ustr,u"minpos"_ustr, _xAttributes );
    ctx.importLongProperty( u"VisibleSize"_ustr, u"visible-size"_ustr, _xAttributes );
    ctx.importLongProperty( u"RepeatDelay"_ustr, u"repeat"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr , _xAttributes );
    ctx.importBooleanProperty( u"LiveScroll"_ustr, u"live-scroll"_ustr, _xAttributes );
    ctx.importHexLongProperty( u"SymbolColor"_ustr, u"symbol-color"_ustr, _xAttributes );

    ctx.importDataAwareProperty( u"linked-cell"_ustr , _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// spinbutton
Reference< xml::input::XElement > SpinButtonElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void SpinButtonElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), getControlModelName( u"com.sun.star.awt.UnoControlSpinButtonModel"_ustr, _xAttributes ) );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importOrientationProperty( u"Orientation"_ustr, u"align"_ustr, _xAttributes );
    ctx.importLongProperty(u"SpinIncrement"_ustr, u"increment"_ustr, _xAttributes );
    ctx.importLongProperty(u"SpinValue"_ustr, u"curval"_ustr ,_xAttributes );
    ctx.importLongProperty(u"SpinValueMax"_ustr, u"maxval"_ustr, _xAttributes );
    ctx.importLongProperty( u"SpinValueMin"_ustr,u"minval"_ustr,_xAttributes );
    ctx.importLongProperty( u"Repeat"_ustr, u"repeat"_ustr, _xAttributes );
    ctx.importLongProperty( u"RepeatDelay"_ustr, u"repeat-delay"_ustr,_xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importHexLongProperty( u"SymbolColor"_ustr, u"symbol-color"_ustr , _xAttributes );
    ctx.importDataAwareProperty( u"linked-cell"_ustr , _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// fixedline
Reference< xml::input::XElement > FixedLineElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void FixedLineElement::endElement()
{
    ControlImportContext ctx(m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlFixedLineModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importStringProperty( u"Label"_ustr, u"value"_ustr, _xAttributes );
    ctx.importOrientationProperty( u"Orientation"_ustr, u"align"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// patternfield
Reference< xml::input::XElement > PatternFieldElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void PatternFieldElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlPatternFieldModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr , _xAttributes );
    ctx.importBooleanProperty( u"StrictFormat"_ustr, u"strict-format"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"HideInactiveSelection"_ustr, u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importStringProperty( u"Text"_ustr, u"value"_ustr, _xAttributes );
    ctx.importShortProperty( u"MaxTextLen"_ustr, u"maxlength"_ustr, _xAttributes );
    ctx.importStringProperty( u"EditMask"_ustr, u"edit-mask"_ustr, _xAttributes );
    ctx.importStringProperty( u"LiteralMask"_ustr, u"literal-mask"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// formattedfield
Reference< xml::input::XElement > FormattedFieldElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void FormattedFieldElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlFormattedFieldModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr , _xAttributes );
    ctx.importBooleanProperty( u"StrictFormat"_ustr, u"strict-format"_ustr , _xAttributes );
    ctx.importBooleanProperty( u"HideInactiveSelection"_ustr, u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr , u"align"_ustr , _xAttributes );
    ctx.importDoubleProperty( u"EffectiveMin"_ustr, u"value-min"_ustr , _xAttributes );
    ctx.importDoubleProperty( u"EffectiveMax"_ustr, u"value-max"_ustr, _xAttributes);
    ctx.importDoubleProperty( u"EffectiveValue"_ustr, u"value"_ustr, _xAttributes );
    ctx.importStringProperty( u"Text"_ustr, u"text"_ustr, _xAttributes );
    ctx.importShortProperty( u"MaxTextLen"_ustr, u"maxlength"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Spin"_ustr,  u"spin"_ustr, _xAttributes );
    if (ctx.importLongProperty( u"RepeatDelay"_ustr, u"repeat"_ustr, _xAttributes ))
        ctx.getControlModel()->setPropertyValue( u"Repeat"_ustr , Any(true) );

    OUString sDefault(_xAttributes->getValueByUidName(m_pImport->XMLNS_DIALOGS_UID, u"value-default"_ustr) );
    if (!sDefault.isEmpty())
    {
        double d = sDefault.toDouble();
        if (d != 0.0 || sDefault == "0" || sDefault == "0.0" )
        {
            ctx.getControlModel()->setPropertyValue( u"EffectiveDefault"_ustr, Any( d ) );
        }
        else // treat as string
        {
            ctx.getControlModel()->setPropertyValue( u"EffectiveDefault"_ustr, Any( sDefault ) );
        }
    }

    // format spec
    ctx.getControlModel()->setPropertyValue(u"FormatsSupplier"_ustr, Any( m_pImport->getNumberFormatsSupplier() ) );

    OUString sFormat( _xAttributes->getValueByUidName(m_pImport->XMLNS_DIALOGS_UID, u"format-code"_ustr ) );
    if (!sFormat.isEmpty())
    {
        lang::Locale locale;

        OUString sLocale( _xAttributes->getValueByUidName( m_pImport->XMLNS_DIALOGS_UID, u"format-locale"_ustr ) );
        if (!sLocale.isEmpty())
        {
            // split locale
            // Don't know what may have written what we read here, so parse all
            // old style including the trailing ";Variant" if present.
            sal_Int32 semi0 = sLocale.indexOf( ';' );
            if (semi0 < 0) // no semi at all, try new BCP47 or just language
            {
                locale = LanguageTag::convertToLocale( sLocale, false);
            }
            else
            {
                sal_Int32 semi1 = sLocale.indexOf( ';', semi0 +1 );
                if (semi1 > semi0) // language;country;variant
                {
                    SAL_WARN( "xmlscript.xmldlg""format-locale with variant that is ignored: " << sLocale);
                    locale.Language = sLocale.copy( 0, semi0 );
                    locale.Country = sLocale.copy( semi0 +1, semi1 - semi0 -1 );
                    // Ignore Variant that no one knows what it would be.
                }
                else // language;country
                {
                    locale.Language = sLocale.copy( 0, semi0 );
                    locale.Country = sLocale.copy( semi0 +1 );
                }
            }
        }

        try
        {
            Reference< util::XNumberFormats > xFormats(
                m_pImport->getNumberFormatsSupplier()->getNumberFormats() );
            sal_Int32 nKey = xFormats->queryKey( sFormat, locale, true );
            if (-1 == nKey)
            {
                nKey = xFormats->addNew( sFormat, locale );
            }
            ctx.getControlModel()->setPropertyValue(u"FormatKey"_ustr, Any( nKey ) );
        }
        catch (const util::MalformedNumberFormatException & exc)
        {
            css::uno::Any anyEx = cppu::getCaughtException();
            SAL_WARN( "xmlscript.xmldlg", exceptionToString(anyEx) );
            // rethrow
            throw xml::sax::SAXException( exc.Message, Reference< XInterface >(), anyEx );
        }
    }
    ctx.importBooleanProperty(u"TreatAsNumber"_ustr, u"treat-as-number"_ustr , _xAttributes );
    ctx.importBooleanProperty(u"EnforceFormat"_ustr, u"enforce-format"_ustr, _xAttributes );

    ctx.importDataAwareProperty( u"linked-cell"_ustr , _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// timefield
Reference< xml::input::XElement > TimeFieldElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void TimeFieldElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlTimeFieldModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty(u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty(u"ReadOnly"_ustr, u"readonly"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"StrictFormat"_ustr, u"strict-format"_ustr, _xAttributes );
    ctx.importBooleanProperty(u"HideInactiveSelection"_ustr,u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importTimeFormatProperty( u"TimeFormat"_ustr, u"time-format"_ustr, _xAttributes );
    ctx.importTimeProperty( u"Time"_ustr, u"value"_ustr, _xAttributes );
    ctx.importTimeProperty( u"TimeMin"_ustr, u"value-min"_ustr, _xAttributes );
    ctx.importTimeProperty( u"TimeMax"_ustr, u"value-max"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Spin"_ustr, u"spin"_ustr, _xAttributes );
    if (ctx.importLongProperty( u"RepeatDelay"_ustr, u"repeat"_ustr, _xAttributes ))
        ctx.getControlModel()->setPropertyValue(u"Repeat"_ustr, Any(true) );
    ctx.importStringProperty( u"Text"_ustr, u"text"_ustr , _xAttributes );
    ctx.importBooleanProperty( u"EnforceFormat"_ustr, u"enforce-format"_ustr , _xAttributes );

    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// numericfield
Reference< xml::input::XElement > NumericFieldElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void NumericFieldElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlNumericFieldModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, _xAttributes );
    ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr,u"tabstop"_ustr,_xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr,_xAttributes );
    ctx.importBooleanProperty( u"StrictFormat"_ustr, u"strict-format"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"HideInactiveSelection"_ustr, u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importShortProperty( u"DecimalAccuracy"_ustr, u"decimal-accuracy"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ShowThousandsSeparator"_ustr, u"thousands-separator"_ustr, _xAttributes );
    ctx.importDoubleProperty( u"Value"_ustr, u"value"_ustr, _xAttributes );
    ctx.importDoubleProperty( u"ValueMin"_ustr, u"value-min"_ustr, _xAttributes );
    ctx.importDoubleProperty( u"ValueMax"_ustr, u"value-max"_ustr, _xAttributes );
    ctx.importDoubleProperty( u"ValueStep"_ustr, u"value-step"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Spin"_ustr, u"spin"_ustr, _xAttributes );
    if (ctx.importLongProperty( u"RepeatDelay"_ustr, u"repeat"_ustr,  _xAttributes ))
        ctx.getControlModel()->setPropertyValue(u"Repeat"_ustr, Any(true) );
    ctx.importBooleanProperty( u"EnforceFormat"_ustr, u"enforce-format"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// datefield
Reference< xml::input::XElement > DateFieldElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void DateFieldElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlDateFieldModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, _xAttributes );
    ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"StrictFormat"_ustr, u"strict-format"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"HideInactiveSelection"_ustr, u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importDateFormatProperty( u"DateFormat"_ustr, u"date-format"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"DateShowCentury"_ustr, u"show-century"_ustr, _xAttributes );
    ctx.importDateProperty( u"Date"_ustr, u"value"_ustr, _xAttributes );
    ctx.importDateProperty( u"DateMin"_ustr, u"value-min"_ustr, _xAttributes );
    ctx.importDateProperty( u"DateMax"_ustr, u"value-max"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Spin"_ustr, u"spin"_ustr, _xAttributes );
    if (ctx.importLongProperty( u"RepeatDelay"_ustr, u"repeat"_ustr, _xAttributes ))
        ctx.getControlModel()->setPropertyValue( u"Repeat"_ustr, Any(true) );
    ctx.importBooleanProperty( u"Dropdown"_ustr, u"dropdown"_ustr, _xAttributes );
    ctx.importStringProperty( u"Text"_ustr, u"text"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"EnforceFormat"_ustr, u"enforce-format"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// currencyfield
Reference< xml::input::XElement > CurrencyFieldElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr , Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void CurrencyFieldElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlCurrencyFieldModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, _xAttributes );
    ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, _xAttributes );
    ctx.importBooleanProperty(u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr , _xAttributes );
    ctx.importBooleanProperty( u"StrictFormat"_ustr, u"strict-format"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"HideInactiveSelection"_ustr, u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importStringProperty( u"CurrencySymbol"_ustr, u"currency-symbol"_ustr, _xAttributes );
    ctx.importShortProperty( u"DecimalAccuracy"_ustr, u"decimal-accuracy"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ShowThousandsSeparator"_ustr, u"thousands-separator"_ustr, _xAttributes );
    ctx.importDoubleProperty( u"Value"_ustr, u"value"_ustr, _xAttributes );
    ctx.importDoubleProperty( u"ValueMin"_ustr, u"value-min"_ustr, _xAttributes );
    ctx.importDoubleProperty( u"ValueMax"_ustr, u"value-max"_ustr, _xAttributes );
    ctx.importDoubleProperty( u"ValueStep"_ustr, u"value-step"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Spin"_ustr, u"spin"_ustr, _xAttributes );
    if (ctx.importLongProperty( u"RepeatDelay"_ustr, u"repeat"_ustr, _xAttributes ))
        ctx.getControlModel()->setPropertyValue( u"Repeat"_ustr, Any(true) );
    ctx.importBooleanProperty( u"PrependCurrencySymbol"_ustr, u"prepend-symbol"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"EnforceFormat"_ustr, u"enforce-format"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// filecontrol
Reference< xml::input::XElement > FileControlElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void FileControlElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlFileControlModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty(u"HideInactiveSelection"_ustr,u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importStringProperty( u"Text"_ustr, u"value"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// treecontrol
Reference< xml::input::XElement > TreeControlElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void TreeControlElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.tree.TreeControlModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importSelectionTypeProperty( u"SelectionType"_ustr, u"selectiontype"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"RootDisplayed"_ustr, u"rootdisplayed"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ShowsHandles"_ustr, u"showshandles"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ShowsRootHandles"_ustr, u"showsroothandles"_ustr ,_xAttributes );
    ctx.importBooleanProperty( u"Editable"_ustr, u"editable"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"RowHeight"_ustr, u"readonly"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"InvokesStopNodeEditing"_ustr, u"invokesstopnodeediting"_ustr, _xAttributes );

    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// imagecontrol
Reference< xml::input::XElement > ImageControlElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr , Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void ImageControlElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlImageControlModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty( u"ScaleImage"_ustr, u"scale-image"_ustr, _xAttributes );
    ctx.importImageScaleModeProperty( u"ScaleMode"_ustr , u"scale-mode"_ustr , _xAttributes );
    ctx.importGraphicOrImageProperty(u"src"_ustr , _xAttributes);
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// textfield
Reference< xml::input::XElement > TextElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void TextElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlFixedTextModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importStringProperty( u"Label"_ustr, u"value"_ustr, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, _xAttributes );
    ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"MultiLine"_ustr, u"multiline"_ustr ,_xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"NoLabel"_ustr, u"nolabel"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// FixedHyperLink
Reference< xml::input::XElement > FixedHyperLinkElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr , Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void FixedHyperLinkElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlFixedHyperlinkModel"_ustr );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        const Reference< beans::XPropertySet >& xControlModel( ctx.getControlModel() );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importStringProperty( u"Label"_ustr, u"value"_ustr, _xAttributes );
    ctx.importStringProperty( u"URL"_ustr, u"url"_ustr, _xAttributes );

    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr ,_xAttributes );
    ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"MultiLine"_ustr, u"multiline"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"NoLabel"_ustr, u"nolabel"_ustr, _xAttributes );
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// edit
Reference< xml::input::XElement > TextFieldElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void TextFieldElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlEditModel"_ustr );
    Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty(u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, _xAttributes );
    ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"HardLineBreaks"_ustr, u"hard-linebreaks"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"HScroll"_ustr, u"hscroll"_ustr ,_xAttributes );
    ctx.importBooleanProperty( u"VScroll"_ustr, u"vscroll"_ustr, _xAttributes );
    ctx.importBooleanProperty(u"HideInactiveSelection"_ustr, u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importShortProperty( u"MaxTextLen"_ustr, u"maxlength"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"MultiLine"_ustr, u"multiline"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr, _xAttributes );
    ctx.importStringProperty( u"Text"_ustr, u"value"_ustr, _xAttributes );
    ctx.importLineEndFormatProperty( u"LineEndFormat"_ustr, u"lineend-format"_ustr, _xAttributes );
    OUString aValue;
    if (getStringAttr( &aValue, u"echochar"_ustr, _xAttributes, m_pImport->XMLNS_DIALOGS_UID ) && !aValue.isEmpty() )
    {
        SAL_WARN_IF( aValue.getLength() != 1, "xmlscript.xmldlg""### more than one character given for echochar!" );
        sal_Int16 nChar = 0;
        if(!aValue.isEmpty())
        {
            nChar = static_cast<sal_Int16>(aValue[ 0 ]);
        }
        xControlModel->setPropertyValue( u"EchoChar"_ustr, Any( nChar ) );
    }

    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// titledbox
Reference< xml::input::XElement > TitledBoxElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (m_pImport->isEventElement( nUid, rLocalName ))
    {
        return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
    }
    else if (m_pImport->XMLNS_DIALOGS_UID != nUid)
    {
        throw xml::sax::SAXException( u"illegal namespace!"_ustr, Reference< XInterface >(), Any() );
    }
    // title
    else if ( rLocalName == "title" )
    {
        getStringAttr( &_label, u"value"_ustr, xAttributes, m_pImport->XMLNS_DIALOGS_UID );

        return new ElementBase( m_pImport->XMLNS_DIALOGS_UID, rLocalName, xAttributes, this, m_pImport );
    }
    // radio
    else if ( rLocalName == "radio" )
    {
        // don't create radios here, => titledbox must be inserted first due to radio grouping,
        // possible predecessors!
        Reference< xml::input::XElement > xRet(
            new RadioElement( rLocalName, xAttributes, this, m_pImport ) );
        _radios.push_back( xRet );
        return xRet;
    }
    else
    {
        return BulletinBoardElement::startChildElement( nUid, rLocalName, xAttributes );
    }
}

void TitledBoxElement::endElement()
{
    {
        ControlImportContext ctx(m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlGroupBoxModel"_ustr );
        Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

        Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
        if (xStyle.is())
        {
            StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
            pStyle->importTextColorStyle( xControlModel );
            pStyle->importTextLineColorStyle( xControlModel );
            pStyle->importFontStyle( xControlModel );
        }

        ctx.importDefaults( 0, 0, _xAttributes ); // inherited from BulletinBoardElement

        if (!_label.isEmpty())
        {
            xControlModel->setPropertyValue( u"Label"_ustr, Any( _label ) );
        }

        ctx.importEvents( _events );
        // avoid ring-reference:
        // vector< event elements > holding event elements holding this (via _pParent)
        _events.clear();

        ctx.finish();
    }

    // create radios AFTER group box!
    for (Reference<XElement>& xRadio : _radios)
    {
        Reference< xml::input::XAttributes > xAttributes( xRadio->getAttributes() );

        ControlImportContext ctx( m_pImport, getControlId( xAttributes ), getControlModelName( u"com.sun.star.awt.UnoControlRadioButtonModel"_ustr, xAttributes ) );
        Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

        Reference< xml::input::XElement > xStyle( getStyle( xAttributes ) );
        if (xStyle.is())
        {
            StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
            pStyle->importBackgroundColorStyle( xControlModel );
            pStyle->importTextColorStyle( xControlModel );
            pStyle->importTextLineColorStyle( xControlModel );
            pStyle->importFontStyle( xControlModel );
            pStyle->importVisualEffectStyle( xControlModel );
        }

        ctx.importDefaults( _nBasePosX, _nBasePosY, xAttributes );
        ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, xAttributes );
        ctx.importStringProperty( u"Label"_ustr, u"value"_ustr, xAttributes );
        ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, xAttributes );
        ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, xAttributes );
        ctx.importGraphicOrImageProperty(u"image-src"_ustr , _xAttributes);
        ctx.importImagePositionProperty( u"ImagePosition"_ustr, u"image-position"_ustr, xAttributes );
        ctx.importBooleanProperty( u"MultiLine"_ustr, u"multiline"_ustr, xAttributes );
        ctx.importStringProperty( u"GroupName"_ustr, u"group-name"_ustr, xAttributes );

        sal_Int16 nVal = 0;
        sal_Bool bChecked = false;
        if (getBoolAttr( &bChecked, u"checked"_ustr, xAttributes, m_pImport->XMLNS_DIALOGS_UID ) && bChecked)
        {
            nVal = 1;
        }
        xControlModel->setPropertyValue( u"State"_ustr, Any( nVal ) );
        ctx.importDataAwareProperty( u"linked-cell"_ustr , xAttributes );
        ::std::vector< Reference< xml::input::XElement > > & radioEvents =
            static_cast< RadioElement * >( xRadio.get() )->getEvents();
        ctx.importEvents( radioEvents );
        // avoid ring-reference:
        // vector< event elements > holding event elements holding this (via _pParent)
        radioEvents.clear();

        ctx.finish();
    }
    // avoid ring-reference:
    // vector< radio elements > holding radio elements holding this (via _pParent)
    _radios.clear();
}

// radio
Reference< xml::input::XElement > RadioElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException(u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

// radiogroup
Reference< xml::input::XElement > RadioGroupElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    if (m_pImport->XMLNS_DIALOGS_UID != nUid)
    {
        throw xml::sax::SAXException( u"illegal namespace!"_ustr, Reference< XInterface >(), Any() );
    }
    // radio
    else if ( rLocalName == "radio" )
    {
        // don't create radios here, => titledbox must be inserted first due to radio grouping,
        // possible predecessors!
        Reference< xml::input::XElement > xRet(
            new RadioElement( rLocalName, xAttributes, this, m_pImport ) );
        _radios.push_back( xRet );
        return xRet;
    }
    else
    {
        throw xml::sax::SAXException( u"expected radio element!"_ustr, Reference< XInterface >(), Any() );
    }
}
void RadioGroupElement::endElement()
{
    for (Reference<XElement>& xRadio : _radios)
    {
        Reference< xml::input::XAttributes > xAttributes(
            xRadio->getAttributes() );

        ControlImportContext ctx( m_pImport, getControlId( xAttributes ), getControlModelName( u"com.sun.star.awt.UnoControlRadioButtonModel"_ustr, xAttributes ) );
        Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

        Reference< xml::input::XElement > xStyle( getStyle( xAttributes ) );
        if (xStyle.is())
        {
            StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
            pStyle->importBackgroundColorStyle( xControlModel );
            pStyle->importTextColorStyle( xControlModel );
            pStyle->importTextLineColorStyle( xControlModel );
            pStyle->importFontStyle( xControlModel );
            pStyle->importVisualEffectStyle( xControlModel );
        }

        ctx.importDefaults( _nBasePosX, _nBasePosY, xAttributes );
        ctx.importBooleanProperty(u"Tabstop"_ustr, u"tabstop"_ustr, xAttributes );
        ctx.importStringProperty( u"Label"_ustr, u"value"_ustr, xAttributes );
        ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, xAttributes );
        ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, xAttributes );
        ctx.importGraphicOrImageProperty(u"image-src"_ustr , _xAttributes);
        ctx.importImagePositionProperty( u"ImagePosition"_ustr, u"image-position"_ustr, xAttributes );
        ctx.importBooleanProperty( u"MultiLine"_ustr, u"multiline"_ustr, xAttributes );
        ctx.importStringProperty( u"GroupName"_ustr, u"group-name"_ustr, xAttributes );
        sal_Int16 nVal = 0;
        sal_Bool bChecked = false;
        if (getBoolAttr( &bChecked, u"checked"_ustr, xAttributes, m_pImport->XMLNS_DIALOGS_UID ) && bChecked)
        {
            nVal = 1;
        }
        xControlModel->setPropertyValue( u"State"_ustr, Any( nVal ) );

        ctx.importDataAwareProperty( u"linked-cell"_ustr, xAttributes );

        ::std::vector< Reference< xml::input::XElement > > & radioEvents =
            static_cast< RadioElement * >( xRadio.get() )->getEvents();
        ctx.importEvents( radioEvents );
        // avoid ring-reference:
        // vector< event elements > holding event elements holding this (via _pParent)
        radioEvents.clear();

        ctx.finish();
    }
    // avoid ring-reference:
    // vector< radio elements > holding radio elements holding this (via _pParent)
    _radios.clear();
}

// menupopup
Reference< xml::input::XElement > MenuPopupElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    if (m_pImport->XMLNS_DIALOGS_UID != nUid)
    {
        throw xml::sax::SAXException( u"illegal namespace!"_ustr, Reference< XInterface >(), Any() );
    }
    // menuitem
    else if ( rLocalName == "menuitem" )
    {
        OUString aValue( xAttributes->getValueByUidName( m_pImport->XMLNS_DIALOGS_UID,u"value"_ustr ) );
        SAL_WARN_IF( aValue.isEmpty() && !_allowEmptyItems, "xmlscript.xmldlg""### menuitem has no value?" );
        if ((!aValue.isEmpty()) || _allowEmptyItems)
        {
            _itemValues.push_back( aValue );

            OUString aSel( xAttributes->getValueByUidName( m_pImport->XMLNS_DIALOGS_UID, u"selected"_ustr ) );
            if (!aSel.isEmpty() && aSel == "true")
            {
                _itemSelected.push_back( static_cast<sal_Int16>(_itemValues.size()) -1 );
            }
        }
        return new ElementBase( m_pImport->XMLNS_DIALOGS_UID, rLocalName, xAttributes, this, m_pImport );
    }
    else
    {
        throw xml::sax::SAXException(u"expected menuitem!"_ustr , Reference< XInterface >(), Any() );
    }
}
Sequence< OUString > MenuPopupElement::getItemValues()
{
    Sequence< OUString > aRet( _itemValues.size() );
    OUString * pRet = aRet.getArray();
    for ( size_t nPos = _itemValues.size(); nPos--; )
    {
        pRet[ nPos ] = _itemValues[ nPos ];
    }
    return aRet;
}
Sequence< sal_Int16 > MenuPopupElement::getSelectedItems()
{
    Sequence< sal_Int16 > aRet( _itemSelected.size() );
    sal_Int16 * pRet = aRet.getArray();
    for ( size_t nPos = _itemSelected.size(); nPos--; )
    {
        pRet[ nPos ] = _itemSelected[ nPos ];
    }
    return aRet;
}

// menulist
Reference< xml::input::XElement > MenuListElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (m_pImport->isEventElement( nUid, rLocalName ))
    {
        return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
    }
    else if (m_pImport->XMLNS_DIALOGS_UID != nUid)
    {
        throw xml::sax::SAXException( u"illegal namespace!"_ustr, Reference< XInterface >(), Any() );
    }
    // menupopup
    else if ( rLocalName == "menupopup" )
    {
        _popup = new MenuPopupElement( rLocalName, xAttributes, this, m_pImport, false );
        return _popup;
    }
    else
    {
        throw xml::sax::SAXException( u"expected event or menupopup element!"_ustr, Reference< XInterface >(), Any() );
    }
}

void MenuListElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), getControlModelName( u"com.sun.star.awt.UnoControlListBoxModel"_ustr, _xAttributes  ) );
    Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"MultiSelection"_ustr, u"multiselection"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Dropdown"_ustr, u"spin"_ustr, _xAttributes );
    ctx.importShortProperty( u"LineCount"_ustr, u"linecount"_ustr, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, _xAttributes );
    bool bHasLinkedCell = ctx.importDataAwareProperty( u"linked-cell"_ustr , _xAttributes );
    bool bHasSrcRange = ctx.importDataAwareProperty( u"source-cell-range"_ustr , _xAttributes );
    if (_popup.is())
    {
        if ( !bHasSrcRange )
            xControlModel->setPropertyValue( u"StringItemList"_ustr, Any( _popup->getItemValues() ) );
        if ( !bHasLinkedCell )
            xControlModel->setPropertyValue( u"SelectedItems"_ustr, Any( _popup->getSelectedItems() ) );

    }
    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// combobox
Reference< xml::input::XElement > ComboBoxElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (m_pImport->isEventElement( nUid, rLocalName ))
    {
        return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
    }
    else if (m_pImport->XMLNS_DIALOGS_UID != nUid)
    {
        throw xml::sax::SAXException( u"illegal namespace!"_ustr, Reference< XInterface >(), Any() );
    }
    // menupopup
    else if ( rLocalName == "menupopup" )
    {
        _popup = new MenuPopupElement( rLocalName, xAttributes, this, m_pImport, true );
        return _popup;
    }
    else
    {
        throw xml::sax::SAXException( u"expected event or menupopup element!"_ustr, Reference< XInterface >(), Any() );
    }
}
void ComboBoxElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), getControlModelName( u"com.sun.star.awt.UnoControlComboBoxModel"_ustr, _xAttributes ) );
    Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importBorderStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"ReadOnly"_ustr, u"readonly"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Autocomplete"_ustr, u"autocomplete"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"Dropdown"_ustr, u"spin"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"HideInactiveSelection"_ustr, u"hide-inactive-selection"_ustr, _xAttributes );
    ctx.importShortProperty( u"MaxTextLen"_ustr, u"maxlength"_ustr ,_xAttributes );
    ctx.importShortProperty( u"LineCount"_ustr, u"linecount"_ustr ,_xAttributes );
    ctx.importStringProperty( u"Text"_ustr, u"value"_ustr, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, _xAttributes );
    ctx.importDataAwareProperty( u"linked-cell"_ustr , _xAttributes );
    bool bHasSrcRange = ctx.importDataAwareProperty( u"source-cell-range"_ustr , _xAttributes );
    if (_popup.is() && !bHasSrcRange )
    {
        xControlModel->setPropertyValue( u"StringItemList"_ustr, Any( _popup->getItemValues() ) );
    }

    ctx.importEvents( _events );
    // avoid ring-reference:
    // vector< event elements > holding event elements holding this (via _pParent)
    _events.clear();

    ctx.finish();
}

// checkbox
Reference< xml::input::XElement > CheckBoxElement::startChildElement(
    sal_Int32 nUid, OUString const & rLocalName,
    Reference< xml::input::XAttributes > const & xAttributes )
{
    // event
    if (!m_pImport->isEventElement( nUid, rLocalName ))
    {
        throw xml::sax::SAXException( u"expected event element!"_ustr, Reference< XInterface >(), Any() );
    }

    return new EventElement( nUid, rLocalName, xAttributes, this, m_pImport );
}

void CheckBoxElement::endElement()
{
    ControlImportContext ctx( m_pImport, getControlId( _xAttributes ), u"com.sun.star.awt.UnoControlCheckBoxModel"_ustr );
    Reference< beans::XPropertySet > xControlModel( ctx.getControlModel() );

    Reference< xml::input::XElement > xStyle( getStyle( _xAttributes ) );
    if (xStyle.is())
    {
        StyleElement * pStyle = static_cast< StyleElement * >( xStyle.get () );
        pStyle->importBackgroundColorStyle( xControlModel );
        pStyle->importTextColorStyle( xControlModel );
        pStyle->importTextLineColorStyle( xControlModel );
        pStyle->importFontStyle( xControlModel );
        pStyle->importVisualEffectStyle( xControlModel );
    }

    ctx.importDefaults( _nBasePosX, _nBasePosY, _xAttributes );
    ctx.importBooleanProperty( u"Tabstop"_ustr, u"tabstop"_ustr, _xAttributes );
    ctx.importStringProperty( u"Label"_ustr, u"value"_ustr, _xAttributes );
    ctx.importAlignProperty( u"Align"_ustr, u"align"_ustr, _xAttributes );
    ctx.importVerticalAlignProperty( u"VerticalAlign"_ustr, u"valign"_ustr, _xAttributes );
    ctx.importGraphicOrImageProperty(u"image-src"_ustr , _xAttributes);
    ctx.importImagePositionProperty( u"ImagePosition"_ustr, u"image-position"_ustr, _xAttributes );
    ctx.importBooleanProperty( u"MultiLine"_ustr, u"multiline"_ustr, _xAttributes );

    sal_Bool bTriState = false;
    if (getBoolAttr( &bTriState, u"tristate"_ustr, _xAttributes, m_pImport->XMLNS_DIALOGS_UID ))
    {
        xControlModel->setPropertyValue( u"TriState"_ustr, Any( bTriState ) );
    }
    sal_Bool bChecked = false;
    if (getBoolAttr( &bChecked, u"checked"_ustr, _xAttributes, m_pImport->XMLNS_DIALOGS_UID ))
    {
        // has "checked" attribute
        sal_Int16 nVal = (bChecked ? 1 : 0);
        xControlModel->setPropertyValue( u"State"_ustr, Any( nVal ) );
    }
    else
    {
--> --------------------

--> maximum size reached

--> --------------------

Messung V0.5
C=96 H=90 G=93

¤ Dauer der Verarbeitung: 0.7 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge