1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_framework.hxx"
26 
27 #include <uiconfiguration/imagemanager.hxx>
28 #include <threadhelp/resetableguard.hxx>
29 #include <xml/imagesconfiguration.hxx>
30 #include <uiconfiguration/graphicnameaccess.hxx>
31 #include <services.h>
32 #include "imagemanagerimpl.hxx"
33 
34 #include "properties.h"
35 
36 //_________________________________________________________________________________________________________________
37 //	interface includes
38 //_________________________________________________________________________________________________________________
39 #include <com/sun/star/ui/UIElementType.hpp>
40 #include <com/sun/star/ui/ConfigurationEvent.hpp>
41 #include <com/sun/star/lang/DisposedException.hpp>
42 #include <com/sun/star/beans/XPropertySet.hpp>
43 #include <com/sun/star/beans/PropertyValue.hpp>
44 #include <com/sun/star/embed/ElementModes.hpp>
45 #include <com/sun/star/io/XStream.hpp>
46 #include <com/sun/star/ui/ImageType.hpp>
47 
48 //_________________________________________________________________________________________________________________
49 //	other includes
50 //_________________________________________________________________________________________________________________
51 
52 #include <vcl/svapp.hxx>
53 #include <rtl/ustrbuf.hxx>
54 #include <osl/mutex.hxx>
55 #include <comphelper/sequence.hxx>
56 #include <tools/urlobj.hxx>
57 #include <unotools/ucbstreamhelper.hxx>
58 #include <vcl/pngread.hxx>
59 #include <vcl/pngwrite.hxx>
60 #include <rtl/logfile.hxx>
61 
62 //_________________________________________________________________________________________________________________
63 //	namespaces
64 //_________________________________________________________________________________________________________________
65 
66 using ::rtl::OUString;
67 using ::com::sun::star::uno::Sequence;
68 using ::com::sun::star::uno::XInterface;
69 using ::com::sun::star::uno::Exception;
70 using ::com::sun::star::uno::RuntimeException;
71 using ::com::sun::star::uno::UNO_QUERY;
72 using ::com::sun::star::uno::Any;
73 using ::com::sun::star::uno::makeAny;
74 using ::com::sun::star::graphic::XGraphic;
75 using namespace ::com::sun::star;
76 using namespace ::com::sun::star::io;
77 using namespace ::com::sun::star::embed;
78 using namespace ::com::sun::star::lang;
79 using namespace ::com::sun::star::container;
80 using namespace ::com::sun::star::beans;
81 using namespace ::com::sun::star::ui;
82 
83 // Image sizes for our toolbars/menus
84 const sal_Int32 IMAGE_SIZE_NORMAL         = 16;
85 const sal_Int32 IMAGE_SIZE_LARGE          = 26;
86 const sal_Int16 MAX_IMAGETYPE_VALUE       = ::com::sun::star::ui::ImageType::COLOR_HIGHCONTRAST|
87                                             ::com::sun::star::ui::ImageType::SIZE_LARGE;
88 
89 namespace framework
90 {
91 
92 typedef GraphicNameAccess CmdToXGraphicNameAccess;
93 
94 //*****************************************************************************************************************
95 //	XInterface, XTypeProvider, XServiceInfo
96 //*****************************************************************************************************************
DEFINE_XSERVICEINFO_MULTISERVICE(ImageManager,::cppu::OWeakObject,SERVICENAME_IMAGEMANAGER,IMPLEMENTATIONNAME_IMAGEMANAGER)97 DEFINE_XSERVICEINFO_MULTISERVICE        (   ImageManager						,
98                                             ::cppu::OWeakObject                 ,
99                                             SERVICENAME_IMAGEMANAGER			,
100 											IMPLEMENTATIONNAME_IMAGEMANAGER
101 										)
102 
103 DEFINE_INIT_SERVICE                     (   ImageManager, {} )
104 
105 ImageManager::ImageManager( uno::Reference< XMultiServiceFactory > xServiceManager ) :
106     ThreadHelpBase( &Application::GetSolarMutex() )
107     , m_pImpl( new ImageManagerImpl(xServiceManager,static_cast< OWeakObject* >(this),false) )
108 {
109 }
110 
~ImageManager()111 ImageManager::~ImageManager()
112 {
113     m_pImpl->clear();
114 }
115 
116 // XComponent
dispose()117 void SAL_CALL ImageManager::dispose() throw (::com::sun::star::uno::RuntimeException)
118 {
119     m_pImpl->dispose();
120 }
121 
addEventListener(const uno::Reference<XEventListener> & xListener)122 void SAL_CALL ImageManager::addEventListener( const uno::Reference< XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException)
123 {
124     m_pImpl->addEventListener(xListener);
125 }
126 
removeEventListener(const uno::Reference<XEventListener> & xListener)127 void SAL_CALL ImageManager::removeEventListener( const uno::Reference< XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException)
128 {
129     /* SAFE AREA ----------------------------------------------------------------------------------------------- */
130     m_pImpl->removeEventListener(xListener);
131 }
132 
133 // Non-UNO methods
setStorage(const uno::Reference<XStorage> & Storage)134 void ImageManager::setStorage( const uno::Reference< XStorage >& Storage )
135 throw (::com::sun::star::uno::RuntimeException)
136 {
137     ResetableGuard aLock( m_pImpl->m_aLock );
138 
139     m_pImpl->m_xUserConfigStorage = Storage;
140     m_pImpl->implts_initialize();
141 }
142 
143 // XInitialization
initialize(const Sequence<Any> & aArguments)144 void SAL_CALL ImageManager::initialize( const Sequence< Any >& aArguments ) throw ( Exception, RuntimeException )
145 {
146     m_pImpl->initialize(aArguments);
147 }
148 
149 // XImageManager
reset()150 void SAL_CALL ImageManager::reset()
151 throw (::com::sun::star::uno::RuntimeException)
152 {
153 
154     /* SAFE AREA ----------------------------------------------------------------------------------------------- */
155     m_pImpl->reset();
156 }
157 
getAllImageNames(::sal_Int16 nImageType)158 Sequence< ::rtl::OUString > SAL_CALL ImageManager::getAllImageNames( ::sal_Int16 nImageType )
159 throw (::com::sun::star::uno::RuntimeException)
160 {
161     return m_pImpl->getAllImageNames( nImageType );
162 }
163 
hasImage(::sal_Int16 nImageType,const::rtl::OUString & aCommandURL)164 ::sal_Bool SAL_CALL ImageManager::hasImage( ::sal_Int16 nImageType, const ::rtl::OUString& aCommandURL )
165 throw (::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException)
166 {
167     return m_pImpl->hasImage(nImageType,aCommandURL);
168 }
169 
getImages(::sal_Int16 nImageType,const Sequence<::rtl::OUString> & aCommandURLSequence)170 Sequence< uno::Reference< XGraphic > > SAL_CALL ImageManager::getImages(
171     ::sal_Int16 nImageType,
172     const Sequence< ::rtl::OUString >& aCommandURLSequence )
173 throw ( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException )
174 {
175     return m_pImpl->getImages(nImageType,aCommandURLSequence);
176 }
177 
replaceImages(::sal_Int16 nImageType,const Sequence<::rtl::OUString> & aCommandURLSequence,const Sequence<uno::Reference<XGraphic>> & aGraphicsSequence)178 void SAL_CALL ImageManager::replaceImages(
179     ::sal_Int16 nImageType,
180     const Sequence< ::rtl::OUString >& aCommandURLSequence,
181     const Sequence< uno::Reference< XGraphic > >& aGraphicsSequence )
182 throw ( ::com::sun::star::lang::IllegalArgumentException,
183         ::com::sun::star::lang::IllegalAccessException,
184         ::com::sun::star::uno::RuntimeException)
185 {
186     m_pImpl->replaceImages(nImageType,aCommandURLSequence,aGraphicsSequence);
187 }
188 
removeImages(::sal_Int16 nImageType,const Sequence<::rtl::OUString> & aCommandURLSequence)189 void SAL_CALL ImageManager::removeImages( ::sal_Int16 nImageType, const Sequence< ::rtl::OUString >& aCommandURLSequence )
190 throw ( ::com::sun::star::lang::IllegalArgumentException,
191         ::com::sun::star::lang::IllegalAccessException,
192         ::com::sun::star::uno::RuntimeException)
193 {
194     m_pImpl->removeImages(nImageType,aCommandURLSequence);
195 }
196 
insertImages(::sal_Int16 nImageType,const Sequence<::rtl::OUString> & aCommandURLSequence,const Sequence<uno::Reference<XGraphic>> & aGraphicSequence)197 void SAL_CALL ImageManager::insertImages( ::sal_Int16 nImageType, const Sequence< ::rtl::OUString >& aCommandURLSequence, const Sequence< uno::Reference< XGraphic > >& aGraphicSequence )
198 throw ( ::com::sun::star::container::ElementExistException,
199         ::com::sun::star::lang::IllegalArgumentException,
200         ::com::sun::star::lang::IllegalAccessException,
201         ::com::sun::star::uno::RuntimeException)
202 {
203     m_pImpl->insertImages(nImageType,aCommandURLSequence,aGraphicSequence);
204 }
205 
206 // XUIConfiguration
addConfigurationListener(const uno::Reference<::com::sun::star::ui::XUIConfigurationListener> & xListener)207 void SAL_CALL ImageManager::addConfigurationListener( const uno::Reference< ::com::sun::star::ui::XUIConfigurationListener >& xListener )
208 throw (::com::sun::star::uno::RuntimeException)
209 {
210     m_pImpl->addConfigurationListener(xListener);
211 }
212 
removeConfigurationListener(const uno::Reference<::com::sun::star::ui::XUIConfigurationListener> & xListener)213 void SAL_CALL ImageManager::removeConfigurationListener( const uno::Reference< ::com::sun::star::ui::XUIConfigurationListener >& xListener )
214 throw (::com::sun::star::uno::RuntimeException)
215 {
216     /* SAFE AREA ----------------------------------------------------------------------------------------------- */
217     m_pImpl->removeConfigurationListener(xListener);
218 }
219 
220 // XUIConfigurationPersistence
reload()221 void SAL_CALL ImageManager::reload()
222 throw ( ::com::sun::star::uno::Exception,
223         ::com::sun::star::uno::RuntimeException )
224 {
225     m_pImpl->reload();
226 }
227 
store()228 void SAL_CALL ImageManager::store()
229 throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
230 {
231     m_pImpl->store();
232 }
233 
storeToStorage(const uno::Reference<XStorage> & Storage)234 void SAL_CALL ImageManager::storeToStorage( const uno::Reference< XStorage >& Storage )
235 throw (::com::sun::star::uno::Exception, ::com::sun::star::uno::RuntimeException)
236 {
237     m_pImpl->storeToStorage(Storage);
238 }
239 
isModified()240 sal_Bool SAL_CALL ImageManager::isModified()
241 throw (::com::sun::star::uno::RuntimeException)
242 {
243     return m_pImpl->isModified();
244 }
245 
isReadOnly()246 sal_Bool SAL_CALL ImageManager::isReadOnly() throw (::com::sun::star::uno::RuntimeException)
247 {
248     return m_pImpl->isReadOnly();
249 }
250 
251 } // namespace framework
252