Branch data Line data Source code
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 : : #include "oox/helper/modelobjecthelper.hxx"
21 : :
22 : : #include <com/sun/star/awt/Gradient.hpp>
23 : : #include <com/sun/star/container/XNameContainer.hpp>
24 : : #include <com/sun/star/drawing/LineDash.hpp>
25 : : #include <com/sun/star/drawing/PolyPolygonBezierCoords.hpp>
26 : : #include <com/sun/star/lang/XMultiServiceFactory.hpp>
27 : : #include "oox/helper/containerhelper.hxx"
28 : : #include "oox/helper/helper.hxx"
29 : :
30 : : namespace oox {
31 : :
32 : : // ============================================================================
33 : :
34 : : using namespace ::com::sun::star::awt;
35 : : using namespace ::com::sun::star::drawing;
36 : : using namespace ::com::sun::star::lang;
37 : : using namespace ::com::sun::star::uno;
38 : :
39 : : using ::rtl::OUString;
40 : :
41 : : // ============================================================================
42 : :
43 : 180 : ObjectContainer::ObjectContainer( const Reference< XMultiServiceFactory >& rxModelFactory, const OUString& rServiceName ) :
44 : : mxModelFactory( rxModelFactory ),
45 : : maServiceName( rServiceName ),
46 : 180 : mnIndex( 0 )
47 : : {
48 : : OSL_ENSURE( mxModelFactory.is(), "ObjectContainer::ObjectContainer - missing service factory" );
49 : 180 : }
50 : :
51 : 180 : ObjectContainer::~ObjectContainer()
52 : : {
53 : 180 : }
54 : :
55 : 24 : bool ObjectContainer::hasObject( const OUString& rObjName ) const
56 : : {
57 : 24 : createContainer();
58 [ + + ][ + - ]: 24 : return mxContainer.is() && mxContainer->hasByName( rObjName );
59 : : }
60 : :
61 : 9 : OUString ObjectContainer::insertObject( const OUString& rObjName, const Any& rObj, bool bInsertByUnusedName )
62 : : {
63 : 9 : createContainer();
64 [ + - ]: 9 : if( mxContainer.is() )
65 : : {
66 [ - + ]: 9 : if( bInsertByUnusedName )
67 [ # # ]: 0 : return ContainerHelper::insertByUnusedName( mxContainer, rObjName + OUString::valueOf( ++mnIndex ), ' ', rObj );
68 [ + - ]: 9 : if( ContainerHelper::insertByName( mxContainer, rObjName, rObj ) )
69 : 9 : return rObjName;
70 : : }
71 : 9 : return OUString();
72 : : }
73 : :
74 : 33 : void ObjectContainer::createContainer() const
75 : : {
76 [ + + ][ + - ]: 33 : if( !mxContainer.is() && mxModelFactory.is() ) try
[ + + ]
77 : : {
78 [ + - ][ + - ]: 9 : mxContainer.set( mxModelFactory->createInstance( maServiceName ), UNO_QUERY_THROW );
[ + - ][ # # ]
79 : 9 : mxModelFactory.clear();
80 : : }
81 : 0 : catch( Exception& )
82 : : {
83 : : }
84 : : OSL_ENSURE( mxContainer.is(), "ObjectContainer::createContainer - container not found" );
85 : 33 : }
86 : :
87 : : // ============================================================================
88 : :
89 : 36 : ModelObjectHelper::ModelObjectHelper( const Reference< XMultiServiceFactory >& rxModelFactory ) :
90 : : maMarkerContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.MarkerTable" ) ),
91 : : maDashContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.DashTable" ) ),
92 : : maGradientContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.GradientTable" ) ),
93 : : maTransGradContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.TransparencyGradientTable" ) ),
94 : : maBitmapUrlContainer( rxModelFactory, CREATE_OUSTRING( "com.sun.star.drawing.BitmapTable" ) ),
95 : : maDashNameBase( CREATE_OUSTRING( "msLineDash " ) ),
96 : : maGradientNameBase( CREATE_OUSTRING( "msFillGradient " ) ),
97 : : maTransGradNameBase( CREATE_OUSTRING( "msTransGradient " ) ),
98 [ + - ][ + - ]: 36 : maBitmapUrlNameBase( CREATE_OUSTRING( "msFillBitmap " ) )
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ][ + - ]
[ + - ]
99 : : {
100 : 36 : }
101 : :
102 : 24 : bool ModelObjectHelper::hasLineMarker( const OUString& rMarkerName ) const
103 : : {
104 : 24 : return maMarkerContainer.hasObject( rMarkerName );
105 : : }
106 : :
107 : 9 : bool ModelObjectHelper::insertLineMarker( const OUString& rMarkerName, const PolyPolygonBezierCoords& rMarker )
108 : : {
109 : : OSL_ENSURE( rMarker.Coordinates.hasElements(), "ModelObjectHelper::insertLineMarker - line marker without coordinates" );
110 [ + - ]: 9 : if( rMarker.Coordinates.hasElements() )
111 [ + - ]: 9 : return !maMarkerContainer.insertObject( rMarkerName, Any( rMarker ), false ).isEmpty();
112 : 9 : return false;
113 : : }
114 : :
115 : 0 : OUString ModelObjectHelper::insertLineDash( const LineDash& rDash )
116 : : {
117 [ # # ]: 0 : return maDashContainer.insertObject( maDashNameBase, Any( rDash ), true );
118 : : }
119 : :
120 : 0 : OUString ModelObjectHelper::insertFillGradient( const Gradient& rGradient )
121 : : {
122 [ # # ]: 0 : return maGradientContainer.insertObject( maGradientNameBase, Any( rGradient ), true );
123 : : }
124 : :
125 : 0 : OUString ModelObjectHelper::insertTransGrandient( const Gradient& rGradient )
126 : : {
127 [ # # ]: 0 : return maTransGradContainer.insertObject( maTransGradNameBase, Any( rGradient ), true );
128 : : }
129 : :
130 : 0 : OUString ModelObjectHelper::insertFillBitmapUrl( const OUString& rGraphicUrl )
131 : : {
132 [ # # ]: 0 : if( !rGraphicUrl.isEmpty() )
133 [ # # ]: 0 : return maBitmapUrlContainer.insertObject( maBitmapUrlNameBase, Any( rGraphicUrl ), true );
134 : 0 : return OUString();
135 : : }
136 : :
137 : : // ============================================================================
138 : :
139 : : } // namespace oox
140 : :
141 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|