LibreOffice Module xmlscript (master) 1
exp_share.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#pragma once
21
22#include <utility>
25#include <osl/diagnose.h>
26#include <com/sun/star/xml/sax/XAttributeList.hpp>
27#include <com/sun/star/beans/XPropertySet.hpp>
28#include <com/sun/star/beans/XPropertyState.hpp>
29#include <com/sun/star/awt/FontDescriptor.hpp>
30#include <com/sun/star/awt/FontEmphasisMark.hpp>
31#include <com/sun/star/awt/FontRelief.hpp>
32#include <memory>
33#include <vector>
34
35
36namespace xmlscript
37{
38
39struct Style
40{
41 sal_uInt32 _backgroundColor;
42 sal_uInt32 _textColor;
43 sal_uInt32 _textLineColor;
44 sal_Int16 _border;
45 sal_Int32 _borderColor;
46 css::awt::FontDescriptor _descr;
47 sal_uInt16 _fontRelief;
49 sal_uInt32 _fillColor;
50 sal_Int16 _visualEffect;
51
52 // current highest mask: 0x40
53 short _all;
54 short _set;
55
56 OUString _id;
57
58 explicit Style( short all_ )
60 , _textColor(0)
62 , _border(0)
63 , _borderColor(0)
64 , _fontRelief(css::awt::FontRelief::NONE)
66 , _fillColor(0)
67 , _visualEffect(0)
68 , _all(all_)
69 , _set(0)
70 {
71 }
72
73 css::uno::Reference< css::xml::sax::XAttributeList > createElement();
74};
76{
77 ::std::vector<Style> _styles;
78
79public:
80 ~StyleBag() ;
81
82 OUString getStyleId( Style const & rStyle );
83
84 void dump( css::uno::Reference< css::xml::sax::XExtendedDocumentHandler >
85 const & xOut );
86};
87
90{
91 css::uno::Reference< css::beans::XPropertySet > _xProps;
92 css::uno::Reference< css::beans::XPropertyState > _xPropState;
93 css::uno::Reference< css::frame::XModel > _xDocument;
94
95public:
97 css::uno::Reference< css::beans::XPropertySet > xProps,
98 css::uno::Reference< css::beans::XPropertyState > xPropState,
99 OUString const & name, css::uno::Reference< css::frame::XModel > xDocument )
100 : XMLElement( name )
101 , _xProps(std::move( xProps ))
102 , _xPropState(std::move( xPropState ))
103 , _xDocument(std::move( xDocument ))
104 {}
106 OUString const & name )
107 : XMLElement( name )
108 {}
109
110 template<typename T>
111 inline void read(
112 OUString const & propName, OUString const & attrName,
113 bool forceAttribute = false );
114
115 template<typename T>
116 inline bool readProp( T * ret, OUString const & rPropName );
117 css::uno::Any readProp( OUString const & rPropName );
119 void readDefaults( bool supportPrintable = true, bool supportVisible = true );
120 void readStringAttr(
121 OUString const & rPropName, OUString const & rAttrName );
123 OUString const & rPropName, OUString const & rAttrName )
124 { read<double>( rPropName, rAttrName ); }
126 OUString const & rPropName, OUString const & rAttrName,
127 bool forceAttribute = false )
128 { read<sal_Int32>( rPropName, rAttrName, forceAttribute ); }
129 void readHexLongAttr(
130 OUString const & rPropName, OUString const & rAttrName );
132 OUString const & rPropName, OUString const & rAttrName )
133 { read<sal_Int32>( rPropName, rAttrName ); }
134 inline void readBoolAttr(
135 OUString const & rPropName, OUString const & rAttrName );
136
137 void readAlignAttr(
138 OUString const & rPropName, OUString const & rAttrName );
140 OUString const & rPropName, OUString const & rAttrName );
142 OUString const & rPropName, OUString const & rAttrName );
144 OUString const & rPropName, OUString const & rAttrName );
145 void readDateAttr(
146 OUString const & rPropName, OUString const & rAttrName );
148 OUString const & rPropName, OUString const & rAttrName );
149 void readTimeAttr(
150 OUString const & rPropName, OUString const & rAttrName );
152 OUString const & rPropName, OUString const & rAttrName );
154 OUString const & rPropName, OUString const & rAttrName );
156 OUString const & rPropName, OUString const & rAttrName );
158 OUString const & rPropName, OUString const & rAttrName );
160 OUString const & rPropName, OUString const & rAttrName );
162 OUString const & rPropName, OUString const & rAttrName );
163
164 void readDataAwareAttr(OUString const & rAttrName );
165 void readImageOrGraphicAttr(OUString const & rAttrName );
166
168 OUString const & rAttrName, bool bValue )
169 { addAttribute( rAttrName, OUString::boolean(bValue) ); }
171 css::uno::Reference< css::beans::XPropertySet >
172 const & xFormatProperties );
173
174 void readEvents();
175 void readDialogModel( StyleBag * all_styles );
176 void readBullitinBoard( StyleBag * all_styles );
177 void readMultiPageModel( StyleBag * all_styles );
178 void readFrameModel( StyleBag * all_styles );
179 void readPageModel( StyleBag * all_styles );
180 void readButtonModel( StyleBag * all_styles );
181 void readEditModel( StyleBag * all_styles );
182 void readCheckBoxModel( StyleBag * all_styles );
183 void readRadioButtonModel( StyleBag * all_styles );
184 void readComboBoxModel( StyleBag * all_styles );
185 void readCurrencyFieldModel( StyleBag * all_styles );
186 void readDateFieldModel( StyleBag * all_styles );
187 void readFileControlModel( StyleBag * all_styles );
188 void readTreeControlModel( StyleBag * all_styles );
189 void readFixedTextModel( StyleBag * all_styles );
190 void readGroupBoxModel( StyleBag * all_styles );
191 void readImageControlModel( StyleBag * all_styles );
192 void readListBoxModel( StyleBag * all_styles );
193 void readNumericFieldModel( StyleBag * all_styles );
194 void readPatternFieldModel( StyleBag * all_styles );
195 void readFormattedFieldModel( StyleBag * all_styles );
196 void readTimeFieldModel( StyleBag * all_styles );
197 void readFixedLineModel( StyleBag * all_styles );
198 void readProgressBarModel( StyleBag * all_styles );
199 void readScrollBarModel( StyleBag * all_styles );
200 void readSpinButtonModel( StyleBag * all_styles );
201 void readFixedHyperLinkModel( StyleBag * all_styles );
202 void readGridControlModel( StyleBag * all_styles );
203};
204
205template<typename T>
207 OUString const & propName, OUString const & attrName,
208 bool forceAttribute )
209{
210 if (forceAttribute ||
211 css::beans::PropertyState_DEFAULT_VALUE !=
212 _xPropState->getPropertyState( propName ))
213 {
214 css::uno::Any a( _xProps->getPropertyValue( propName ) );
215 T v = T();
216 if (a >>= v)
217 addAttribute( attrName, OUString::number(v) );
218 else
219 OSL_FAIL( "### unexpected property type!" );
220 }
221}
222
223template<>
224inline void ElementDescriptor::read<sal_Bool>(
225 OUString const & propName, OUString const & attrName,
226 bool forceAttribute )
227{
228 if (forceAttribute ||
229 css::beans::PropertyState_DEFAULT_VALUE !=
230 _xPropState->getPropertyState( propName ))
231 {
232 css::uno::Any a( _xProps->getPropertyValue( propName ) );
233 bool v;
234 if (a >>= v)
235 addAttribute( attrName, OUString::boolean(v) );
236 else
237 OSL_FAIL( "### unexpected property type!" );
238 }
239}
240
242 OUString const & rPropName, OUString const & rAttrName )
243{
244 read<sal_Bool>( rPropName, rAttrName );
245}
246
247template<typename T>
249 T * ret, OUString const & rPropName )
250{
251 _xProps->getPropertyValue( rPropName ) >>= *ret;
252 return css::beans::PropertyState_DEFAULT_VALUE !=
253 _xPropState->getPropertyState( rPropName );
254}
255
256}
257
258
259/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void readBoolAttr(OUString const &rPropName, OUString const &rAttrName)
Definition: exp_share.hxx:241
void readFrameModel(StyleBag *all_styles)
css::uno::Reference< css::beans::XPropertyState > _xPropState
Definition: exp_share.hxx:92
void readTimeAttr(OUString const &rPropName, OUString const &rAttrName)
void readLongAttr(OUString const &rPropName, OUString const &rAttrName, bool forceAttribute=false)
Definition: exp_share.hxx:125
void readBullitinBoard(StyleBag *all_styles)
void readImageControlModel(StyleBag *all_styles)
void readFixedHyperLinkModel(StyleBag *all_styles)
void readGridControlModel(StyleBag *all_styles)
void readDateAttr(OUString const &rPropName, OUString const &rAttrName)
void readImageOrGraphicAttr(OUString const &rAttrName)
void addBoolAttr(OUString const &rAttrName, bool bValue)
Definition: exp_share.hxx:167
void readDataAwareAttr(OUString const &rAttrName)
void readCheckBoxModel(StyleBag *all_styles)
void readDialogModel(StyleBag *all_styles)
void readDateFormatAttr(OUString const &rPropName, OUString const &rAttrName)
void readFileControlModel(StyleBag *all_styles)
void readListBoxModel(StyleBag *all_styles)
void readScrollBarModel(StyleBag *all_styles)
void readImageAlignAttr(OUString const &rPropName, OUString const &rAttrName)
void readAlignAttr(OUString const &rPropName, OUString const &rAttrName)
void readFormattedFieldModel(StyleBag *all_styles)
void readDateFieldModel(StyleBag *all_styles)
void readRadioButtonModel(StyleBag *all_styles)
void readDoubleAttr(OUString const &rPropName, OUString const &rAttrName)
Definition: exp_share.hxx:122
void readShortAttr(OUString const &rPropName, OUString const &rAttrName)
Definition: exp_share.hxx:131
void readMultiPageModel(StyleBag *all_styles)
void readPageModel(StyleBag *all_styles)
void readSpinButtonModel(StyleBag *all_styles)
css::uno::Reference< css::frame::XModel > _xDocument
Definition: exp_share.hxx:93
void readCurrencyFieldModel(StyleBag *all_styles)
void readSelectionTypeAttr(OUString const &rPropName, OUString const &rAttrName)
void readStringAttr(OUString const &rPropName, OUString const &rAttrName)
void readLineEndFormatAttr(OUString const &rPropName, OUString const &rAttrName)
void readProgressBarModel(StyleBag *all_styles)
void readTimeFormatAttr(OUString const &rPropName, OUString const &rAttrName)
void readVerticalAlignAttr(OUString const &rPropName, OUString const &rAttrName)
void addNumberFormatAttr(css::uno::Reference< css::beans::XPropertySet > const &xFormatProperties)
ElementDescriptor(OUString const &name)
Definition: exp_share.hxx:105
void readButtonTypeAttr(OUString const &rPropName, OUString const &rAttrName)
void readEditModel(StyleBag *all_styles)
void readTreeControlModel(StyleBag *all_styles)
void read(OUString const &propName, OUString const &attrName, bool forceAttribute=false)
Definition: exp_share.hxx:206
void readTimeFieldModel(StyleBag *all_styles)
void readDefaults(bool supportPrintable=true, bool supportVisible=true)
css::uno::Reference< css::beans::XPropertySet > _xProps
Definition: exp_share.hxx:91
void readPatternFieldModel(StyleBag *all_styles)
void readFixedTextModel(StyleBag *all_styles)
void readNumericFieldModel(StyleBag *all_styles)
void readHexLongAttr(OUString const &rPropName, OUString const &rAttrName)
void readButtonModel(StyleBag *all_styles)
ElementDescriptor(css::uno::Reference< css::beans::XPropertySet > xProps, css::uno::Reference< css::beans::XPropertyState > xPropState, OUString const &name, css::uno::Reference< css::frame::XModel > xDocument)
Definition: exp_share.hxx:96
void readOrientationAttr(OUString const &rPropName, OUString const &rAttrName)
bool readProp(T *ret, OUString const &rPropName)
Definition: exp_share.hxx:248
void readFixedLineModel(StyleBag *all_styles)
void readImagePositionAttr(OUString const &rPropName, OUString const &rAttrName)
void readComboBoxModel(StyleBag *all_styles)
void readGroupBoxModel(StyleBag *all_styles)
void readImageScaleModeAttr(OUString const &rPropName, OUString const &rAttrName)
::std::vector< Style > _styles
Definition: exp_share.hxx:77
OUString getStyleId(Style const &rStyle)
void dump(css::uno::Reference< css::xml::sax::XExtendedDocumentHandler > const &xOut)
void addAttribute(OUString const &rAttrName, OUString const &rValue)
Adds an attribute to elements.
Definition: xml_element.cxx:31
float v
FontRelief
FontEmphasisMark
const char * name
uno_Any a
const char * attrName
NONE
css::uno::Reference< css::xml::sax::XAttributeList > createElement()
css::awt::FontDescriptor _descr
Definition: exp_share.hxx:46
Style(short all_)
Definition: exp_share.hxx:58
sal_uInt16 _fontEmphasisMark
Definition: exp_share.hxx:48
sal_uInt32 _textColor
Definition: exp_share.hxx:42
sal_uInt32 _fillColor
Definition: exp_share.hxx:49
sal_Int16 _visualEffect
Definition: exp_share.hxx:50
sal_Int32 _borderColor
Definition: exp_share.hxx:45
sal_uInt32 _textLineColor
Definition: exp_share.hxx:43
sal_uInt16 _fontRelief
Definition: exp_share.hxx:47
sal_Int16 _border
Definition: exp_share.hxx:44
sal_uInt32 _backgroundColor
Definition: exp_share.hxx:41