2010-10-27 13:11:31 +01:00
|
|
|
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
2012-07-09 14:31:34 +01:00
|
|
|
/*
|
|
|
|
* 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 .
|
|
|
|
*/
|
2001-02-16 13:14:51 +00:00
|
|
|
|
2004-07-30 15:48:29 +00:00
|
|
|
#include "common.hxx"
|
|
|
|
#include "misc.hxx"
|
2001-02-16 13:14:51 +00:00
|
|
|
#include <xmlscript/xmldlg_imexp.hxx>
|
2001-03-15 13:44:15 +00:00
|
|
|
#include <xmlscript/xml_helper.hxx>
|
2001-02-16 13:14:51 +00:00
|
|
|
#include <osl/diagnose.h>
|
|
|
|
#include <com/sun/star/xml/sax/XAttributeList.hpp>
|
|
|
|
#include <com/sun/star/beans/XPropertySet.hpp>
|
|
|
|
#include <com/sun/star/beans/XPropertyState.hpp>
|
|
|
|
#include <com/sun/star/awt/FontDescriptor.hpp>
|
2002-03-25 11:03:21 +00:00
|
|
|
#include <com/sun/star/awt/FontEmphasisMark.hpp>
|
|
|
|
#include <com/sun/star/awt/FontRelief.hpp>
|
2004-07-30 15:48:29 +00:00
|
|
|
#include <vector>
|
2001-02-16 13:14:51 +00:00
|
|
|
|
|
|
|
|
|
|
|
namespace xmlscript
|
|
|
|
{
|
|
|
|
|
|
|
|
struct Style
|
|
|
|
{
|
|
|
|
sal_uInt32 _backgroundColor;
|
|
|
|
sal_uInt32 _textColor;
|
2002-03-25 11:03:21 +00:00
|
|
|
sal_uInt32 _textLineColor;
|
2001-02-16 13:14:51 +00:00
|
|
|
sal_Int16 _border;
|
2004-07-30 15:48:29 +00:00
|
|
|
sal_Int32 _borderColor;
|
|
|
|
css::awt::FontDescriptor _descr;
|
2002-03-25 11:03:21 +00:00
|
|
|
sal_uInt16 _fontRelief;
|
|
|
|
sal_uInt16 _fontEmphasisMark;
|
2001-05-04 12:17:40 +00:00
|
|
|
sal_uInt32 _fillColor;
|
2004-07-30 15:48:29 +00:00
|
|
|
sal_Int16 _visualEffect;
|
2001-05-04 12:17:40 +00:00
|
|
|
|
2004-07-30 15:48:29 +00:00
|
|
|
// current highest mask: 0x40
|
2001-02-21 19:49:30 +00:00
|
|
|
short _all;
|
2001-02-16 13:14:51 +00:00
|
|
|
short _set;
|
|
|
|
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString _id;
|
2001-02-16 13:14:51 +00:00
|
|
|
|
2012-01-26 16:00:09 +01:00
|
|
|
inline Style( short all_ ) SAL_THROW(())
|
2004-07-30 15:48:29 +00:00
|
|
|
: _fontRelief( css::awt::FontRelief::NONE )
|
|
|
|
, _fontEmphasisMark( css::awt::FontEmphasisMark::NONE )
|
2002-03-25 11:03:21 +00:00
|
|
|
, _all( all_ )
|
2001-02-21 19:49:30 +00:00
|
|
|
, _set( 0 )
|
2001-02-16 13:14:51 +00:00
|
|
|
{}
|
|
|
|
|
2004-07-30 15:48:29 +00:00
|
|
|
css::uno::Reference< css::xml::sax::XAttributeList > createElement();
|
2001-02-16 13:14:51 +00:00
|
|
|
};
|
|
|
|
class StyleBag
|
|
|
|
{
|
2004-07-30 15:48:29 +00:00
|
|
|
::std::vector< Style * > _styles;
|
2001-03-15 13:44:15 +00:00
|
|
|
|
2001-02-16 13:14:51 +00:00
|
|
|
public:
|
2012-01-26 16:00:09 +01:00
|
|
|
~StyleBag() SAL_THROW(());
|
2001-02-16 13:14:51 +00:00
|
|
|
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString getStyleId( Style const & rStyle ) SAL_THROW(());
|
2001-02-16 13:14:51 +00:00
|
|
|
|
2004-07-30 15:48:29 +00:00
|
|
|
void dump( css::uno::Reference< css::xml::sax::XExtendedDocumentHandler >
|
|
|
|
const & xOut );
|
2001-02-16 13:14:51 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
class ElementDescriptor
|
2001-03-15 13:44:15 +00:00
|
|
|
: public ::xmlscript::XMLElement
|
2001-02-16 13:14:51 +00:00
|
|
|
{
|
2004-07-30 15:48:29 +00:00
|
|
|
css::uno::Reference< css::beans::XPropertySet > _xProps;
|
|
|
|
css::uno::Reference< css::beans::XPropertyState > _xPropState;
|
2010-11-02 16:22:07 +00:00
|
|
|
css::uno::Reference< css::frame::XModel > _xDocument;
|
2001-02-16 13:14:51 +00:00
|
|
|
|
|
|
|
public:
|
|
|
|
inline ElementDescriptor(
|
2004-07-30 15:48:29 +00:00
|
|
|
css::uno::Reference< css::beans::XPropertySet > const & xProps,
|
|
|
|
css::uno::Reference< css::beans::XPropertyState > const & xPropState,
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & name, css::uno::Reference< css::frame::XModel > const & xDocument )
|
2012-01-26 16:00:09 +01:00
|
|
|
SAL_THROW(())
|
2001-03-15 13:44:15 +00:00
|
|
|
: XMLElement( name )
|
|
|
|
, _xProps( xProps )
|
2001-02-16 13:14:51 +00:00
|
|
|
, _xPropState( xPropState )
|
2010-11-02 16:22:07 +00:00
|
|
|
, _xDocument( xDocument )
|
2001-02-16 13:14:51 +00:00
|
|
|
{}
|
|
|
|
inline ElementDescriptor(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & name )
|
2012-01-26 16:00:09 +01:00
|
|
|
SAL_THROW(())
|
2001-03-15 13:44:15 +00:00
|
|
|
: XMLElement( name )
|
2001-02-16 13:14:51 +00:00
|
|
|
{}
|
2001-03-15 13:44:15 +00:00
|
|
|
|
2004-07-30 15:48:29 +00:00
|
|
|
template<typename T>
|
|
|
|
inline void read(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & propName, OUString const & attrName,
|
2004-07-30 15:48:29 +00:00
|
|
|
bool forceAttribute = false );
|
|
|
|
|
|
|
|
template<typename T>
|
2012-09-01 12:44:39 -03:00
|
|
|
inline bool readProp( T * ret, OUString const & rPropName );
|
|
|
|
css::uno::Any readProp( OUString const & rPropName );
|
2012-09-06 10:21:11 +01:00
|
|
|
void readScrollableSettings();
|
2010-04-14 19:14:53 +02:00
|
|
|
void readDefaults( bool supportPrintable = true, bool supportVisible = true );
|
2004-07-30 15:48:29 +00:00
|
|
|
void readStringAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
inline void readDoubleAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName )
|
2004-07-30 15:48:29 +00:00
|
|
|
{ read<double>( rPropName, rAttrName ); }
|
|
|
|
inline void readLongAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName,
|
2004-07-30 15:48:29 +00:00
|
|
|
bool forceAttribute = false )
|
|
|
|
{ read<sal_Int32>( rPropName, rAttrName, forceAttribute ); }
|
|
|
|
void readHexLongAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
inline void readShortAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName )
|
2004-07-30 15:48:29 +00:00
|
|
|
{ read<sal_Int32>( rPropName, rAttrName ); }
|
|
|
|
inline void readBoolAttr(
|
2013-08-21 15:07:31 +02:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
|
|
|
|
void readAlignAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2005-03-18 13:18:22 +00:00
|
|
|
void readVerticalAlignAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readImageURLAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
void readImageAlignAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2005-03-18 13:18:22 +00:00
|
|
|
void readImagePositionAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2013-08-05 19:18:20 +02:00
|
|
|
void readDateAttr(
|
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
void readDateFormatAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2013-08-05 19:18:20 +02:00
|
|
|
void readTimeAttr(
|
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
void readTimeFormatAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
void readOrientationAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
void readButtonTypeAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2005-03-18 13:18:22 +00:00
|
|
|
void readLineEndFormatAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2007-07-03 11:56:50 +00:00
|
|
|
void readSelectionTypeAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rPropName, OUString const & rAttrName );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readDataAwareAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rAttrName );
|
2004-07-30 15:48:29 +00:00
|
|
|
inline void addBoolAttr(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & rAttrName, sal_Bool bValue )
|
2013-08-21 15:07:31 +02:00
|
|
|
{ addAttribute( rAttrName, OUString::boolean(bValue) ); }
|
2001-09-19 07:46:35 +00:00
|
|
|
void addNumberFormatAttr(
|
2004-07-30 15:48:29 +00:00
|
|
|
css::uno::Reference< css::beans::XPropertySet >
|
2012-01-21 15:21:16 +01:00
|
|
|
const & xFormatProperties );
|
2001-02-16 13:14:51 +00:00
|
|
|
|
2004-07-30 15:48:29 +00:00
|
|
|
void readEvents() SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readDialogModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readBullitinBoard( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-10-06 10:16:27 +01:00
|
|
|
void readMultiPageModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readFrameModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readPageModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2004-07-30 15:48:29 +00:00
|
|
|
void readButtonModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readEditModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readCheckBoxModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readRadioButtonModel( StyleBag * all_styles )
|
2004-07-30 15:48:29 +00:00
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readComboBoxModel( StyleBag * all_styles )
|
2004-07-30 15:48:29 +00:00
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readCurrencyFieldModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readDateFieldModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readFileControlModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2007-07-03 11:56:50 +00:00
|
|
|
void readTreeControlModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2004-07-30 15:48:29 +00:00
|
|
|
void readFixedTextModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readGroupBoxModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readImageControlModel( StyleBag * all_styles )
|
2004-07-30 15:48:29 +00:00
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readListBoxModel( StyleBag * all_styles )
|
2004-07-30 15:48:29 +00:00
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readNumericFieldModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readPatternFieldModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readFormattedFieldModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readTimeFieldModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readFixedLineModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
|
|
|
void readProgressBarModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readScrollBarModel( StyleBag * all_styles )
|
2010-10-06 10:16:27 +01:00
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2010-11-02 16:22:07 +00:00
|
|
|
void readSpinButtonModel( StyleBag * all_styles )
|
2004-07-30 15:48:29 +00:00
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2008-01-29 14:11:58 +00:00
|
|
|
void readFixedHyperLinkModel( StyleBag * all_styles )
|
|
|
|
SAL_THROW( (css::uno::Exception) );
|
2001-02-16 13:14:51 +00:00
|
|
|
};
|
2004-07-30 15:48:29 +00:00
|
|
|
|
|
|
|
template<typename T>
|
|
|
|
inline void ElementDescriptor::read(
|
2012-09-01 12:44:39 -03:00
|
|
|
OUString const & propName, OUString const & attrName,
|
2004-07-30 15:48:29 +00:00
|
|
|
bool forceAttribute )
|
|
|
|
{
|
|
|
|
if (forceAttribute ||
|
|
|
|
css::beans::PropertyState_DEFAULT_VALUE !=
|
|
|
|
_xPropState->getPropertyState( propName ))
|
|
|
|
{
|
|
|
|
css::uno::Any a( _xProps->getPropertyValue( propName ) );
|
2006-08-29 10:04:48 +00:00
|
|
|
T v = T();
|
2004-07-30 15:48:29 +00:00
|
|
|
if (a >>= v)
|
2013-08-21 15:07:31 +02:00
|
|
|
addAttribute( attrName, OUString::number(v) );
|
2004-07-30 15:48:29 +00:00
|
|
|
else
|
2011-03-12 12:08:22 +01:00
|
|
|
OSL_FAIL( "### unexpected property type!" );
|
2004-07-30 15:48:29 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2013-08-21 15:07:31 +02:00
|
|
|
template<>
|
|
|
|
inline void ElementDescriptor::read<sal_Bool>(
|
|
|
|
OUString const & propName, OUString const & attrName,
|
|
|
|
bool forceAttribute )
|
|
|
|
{
|
|
|
|
if (forceAttribute ||
|
|
|
|
css::beans::PropertyState_DEFAULT_VALUE !=
|
|
|
|
_xPropState->getPropertyState( propName ))
|
|
|
|
{
|
|
|
|
css::uno::Any a( _xProps->getPropertyValue( propName ) );
|
|
|
|
sal_Bool v = sal_Bool();
|
|
|
|
if (a >>= v)
|
|
|
|
addAttribute( attrName, OUString::boolean(v) );
|
|
|
|
else
|
|
|
|
OSL_FAIL( "### unexpected property type!" );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
inline void ElementDescriptor::readBoolAttr(
|
|
|
|
OUString const & rPropName, OUString const & rAttrName )
|
|
|
|
{
|
|
|
|
read<sal_Bool>( rPropName, rAttrName );
|
|
|
|
}
|
|
|
|
|
2004-07-30 15:48:29 +00:00
|
|
|
template<typename T>
|
|
|
|
inline bool ElementDescriptor::readProp(
|
2012-09-01 12:44:39 -03:00
|
|
|
T * ret, OUString const & rPropName )
|
2001-02-16 13:14:51 +00:00
|
|
|
{
|
2004-07-30 15:48:29 +00:00
|
|
|
_xProps->getPropertyValue( rPropName ) >>= *ret;
|
|
|
|
return css::beans::PropertyState_DEFAULT_VALUE !=
|
|
|
|
_xPropState->getPropertyState( rPropName );
|
2001-02-16 13:14:51 +00:00
|
|
|
}
|
|
|
|
|
2001-08-24 10:16:43 +00:00
|
|
|
}
|
2010-10-27 13:11:31 +01:00
|
|
|
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|