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 #include "vbaoptions.hxx" 24 #include <vbahelper/vbahelper.hxx> 25 #include <ooo/vba/word/WdDefaultFilePath.hpp> 26 #include <ooo/vba/word/WdLineStyle.hpp> 27 #include <ooo/vba/word/WdLineWidth.hpp> 28 #include <ooo/vba/word/WdColorIndex.hpp> 29 #include <com/sun/star/util/XStringSubstitution.hpp> 30 #include <com/sun/star/beans/XPropertySet.hpp> 31 #include <osl/file.hxx> 32 33 using namespace ::ooo::vba; 34 using namespace ::com::sun::star; 35 36 SwVbaOptions::SwVbaOptions( uno::Reference<uno::XComponentContext >& xContext ) throw ( uno::RuntimeException ) : SwVbaOptions_BASE( uno::Reference< XHelperInterface >(), xContext ) 37 { 38 mxFactory.set( comphelper::getProcessServiceFactory(), uno::UNO_QUERY_THROW ); 39 } 40 41 SwVbaOptions::~SwVbaOptions() 42 { 43 } 44 45 uno::Any SAL_CALL 46 SwVbaOptions::DefaultFilePath( sal_Int32 _path ) throw ( uno::RuntimeException ) 47 { 48 switch( _path ) 49 { 50 case word::WdDefaultFilePath::wdDocumentsPath: 51 { 52 msDefaultFilePath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Work") ); 53 break; 54 } 55 case word::WdDefaultFilePath::wdPicturesPath: 56 { 57 msDefaultFilePath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Gallery") ); 58 break; 59 } 60 case word::WdDefaultFilePath::wdUserTemplatesPath: 61 case word::WdDefaultFilePath::wdWorkgroupTemplatesPath: 62 { 63 msDefaultFilePath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Template") ); 64 break; 65 } 66 case word::WdDefaultFilePath::wdStartupPath: 67 { 68 msDefaultFilePath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Addin") ); 69 break; 70 } 71 case word::WdDefaultFilePath::wdUserOptionsPath: 72 { 73 msDefaultFilePath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("UserConfig") ); 74 break; 75 } 76 case word::WdDefaultFilePath::wdToolsPath: 77 case word::WdDefaultFilePath::wdProgramPath: 78 { 79 msDefaultFilePath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Module") ); 80 break; 81 } 82 case word::WdDefaultFilePath::wdTempFilePath: 83 { 84 msDefaultFilePath = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("Temp") ); 85 break; 86 } 87 default: 88 { 89 DebugHelper::exception( SbERR_NOT_IMPLEMENTED, rtl::OUString() ); 90 break; 91 } 92 } 93 return uno::makeAny( uno::Reference< XPropValue > ( new ScVbaPropValue( this ) ) ); 94 } 95 96 void SwVbaOptions::setValueEvent( const uno::Any& value ) 97 { 98 rtl::OUString sNewPath; 99 value >>= sNewPath; 100 rtl::OUString sNewPathUrl; 101 ::osl::File::getFileURLFromSystemPath( sNewPath, sNewPathUrl ); 102 uno::Reference< beans::XPropertySet > xPathSettings( mxFactory->createInstance( rtl::OUString::createFromAscii("com.sun.star.util.PathSettings") ), uno::UNO_QUERY_THROW ); 103 rtl::OUString sOldPathUrl; 104 xPathSettings->getPropertyValue( msDefaultFilePath ) >>= sOldPathUrl; 105 // path could be a multipath, Microsoft doesn't support this feature in Word currently 106 // only the last path is from interest. 107 sal_Int32 nIndex = sOldPathUrl.lastIndexOf( sal_Unicode(';') ); 108 if( nIndex != -1 ) 109 { 110 sNewPathUrl = sOldPathUrl.copy( 0, nIndex + 1 ).concat( sNewPathUrl ); 111 } 112 xPathSettings->setPropertyValue( msDefaultFilePath, uno::makeAny( sNewPathUrl ) ); 113 } 114 115 uno::Any SwVbaOptions::getValueEvent() 116 { 117 uno::Reference< beans::XPropertySet > xPathSettings( mxFactory->createInstance( rtl::OUString::createFromAscii("com.sun.star.util.PathSettings") ), uno::UNO_QUERY_THROW ); 118 rtl::OUString sPathUrl; 119 xPathSettings->getPropertyValue( msDefaultFilePath ) >>= sPathUrl; 120 // path could be a multipath, Microsoft doesn't support this feature in Word currently 121 // only the last path is from interest. 122 sal_Int32 nIndex = sPathUrl.lastIndexOf( sal_Unicode(';') ); 123 if( nIndex != -1 ) 124 { 125 sPathUrl = sPathUrl.copy( nIndex + 1 ); 126 } 127 rtl::OUString sPath; 128 ::osl::File::getSystemPathFromFileURL( sPathUrl, sPath ); 129 return uno::makeAny( sPath ); 130 } 131 132 sal_Int32 SAL_CALL SwVbaOptions::getDefaultBorderLineStyle() throw (uno::RuntimeException) 133 { 134 return word::WdLineStyle::wdLineStyleSingle; 135 } 136 137 void SAL_CALL SwVbaOptions::setDefaultBorderLineStyle( ::sal_Int32 /*_defaultborderlinestyle*/ ) throw (uno::RuntimeException) 138 { 139 // not support in Writer 140 } 141 142 sal_Int32 SAL_CALL SwVbaOptions::getDefaultBorderLineWidth() throw (uno::RuntimeException) 143 { 144 return word::WdLineWidth::wdLineWidth050pt; 145 } 146 147 void SAL_CALL SwVbaOptions::setDefaultBorderLineWidth( ::sal_Int32 /*_defaultborderlinewidth*/ ) throw (uno::RuntimeException) 148 { 149 // not support in Writer 150 } 151 152 sal_Int32 SAL_CALL SwVbaOptions::getDefaultBorderColorIndex() throw (uno::RuntimeException) 153 { 154 return word::WdColorIndex::wdAuto; 155 } 156 157 void SAL_CALL SwVbaOptions::setDefaultBorderColorIndex( ::sal_Int32 /*_defaultbordercolorindex*/ ) throw (uno::RuntimeException) 158 { 159 // not support in Writer 160 } 161 162 ::sal_Bool SAL_CALL SwVbaOptions::getReplaceSelection() throw (uno::RuntimeException) 163 { 164 return sal_True; 165 } 166 167 void SAL_CALL SwVbaOptions::setReplaceSelection( ::sal_Bool /*_replaceselection*/ ) throw (uno::RuntimeException) 168 { 169 // not support in Writer 170 } 171 172 ::sal_Bool SAL_CALL SwVbaOptions::getMapPaperSize() throw (uno::RuntimeException) 173 { 174 return sal_False; 175 } 176 177 void SAL_CALL SwVbaOptions::setMapPaperSize( ::sal_Bool /*_mappapersize*/ ) throw (uno::RuntimeException) 178 { 179 // not support in Writer 180 } 181 182 ::sal_Bool SAL_CALL SwVbaOptions::getAutoFormatAsYouTypeApplyHeadings() throw (uno::RuntimeException) 183 { 184 return sal_False; 185 } 186 187 void SAL_CALL SwVbaOptions::setAutoFormatAsYouTypeApplyHeadings( ::sal_Bool /*_autoformatasyoutypeapplyheadings*/ ) throw (uno::RuntimeException) 188 { 189 // not support in Writer 190 } 191 192 ::sal_Bool SAL_CALL SwVbaOptions::getAutoFormatAsYouTypeApplyBulletedLists() throw (uno::RuntimeException) 193 { 194 return sal_False; 195 } 196 197 void SAL_CALL SwVbaOptions::setAutoFormatAsYouTypeApplyBulletedLists( ::sal_Bool /*_autoformatasyoutypeapplybulletedlists*/ ) throw (uno::RuntimeException) 198 { 199 // not support in Writer 200 } 201 202 ::sal_Bool SAL_CALL SwVbaOptions::getAutoFormatAsYouTypeApplyNumberedLists() throw (uno::RuntimeException) 203 { 204 return sal_False; 205 } 206 207 void SAL_CALL SwVbaOptions::setAutoFormatAsYouTypeApplyNumberedLists( ::sal_Bool /*_autoformatasyoutypeapplynumberedlists*/ ) throw (uno::RuntimeException) 208 { 209 // not support in Writer 210 } 211 212 ::sal_Bool SAL_CALL SwVbaOptions::getAutoFormatAsYouTypeFormatListItemBeginning() throw (uno::RuntimeException) 213 { 214 return sal_False; 215 } 216 217 void SAL_CALL SwVbaOptions::setAutoFormatAsYouTypeFormatListItemBeginning( ::sal_Bool /*_autoformatasyoutypeformatlistitembeginning*/ ) throw (uno::RuntimeException) 218 { 219 // not support in Writer 220 } 221 222 ::sal_Bool SAL_CALL SwVbaOptions::getAutoFormatAsYouTypeDefineStyles() throw (uno::RuntimeException) 223 { 224 return sal_False; 225 } 226 227 void SAL_CALL SwVbaOptions::setAutoFormatAsYouTypeDefineStyles( ::sal_Bool /*_autoformatasyoutypedefinestyles*/ ) throw (uno::RuntimeException) 228 { 229 // not support in Writer 230 } 231 232 ::sal_Bool SAL_CALL SwVbaOptions::getAutoFormatApplyHeadings() throw (uno::RuntimeException) 233 { 234 return sal_False; 235 } 236 237 void SAL_CALL SwVbaOptions::setAutoFormatApplyHeadings( ::sal_Bool /*_autoformatapplyheadings*/ ) throw (uno::RuntimeException) 238 { 239 // not support in Writer 240 } 241 242 ::sal_Bool SAL_CALL SwVbaOptions::getAutoFormatApplyLists() throw (uno::RuntimeException) 243 { 244 return sal_False; 245 } 246 247 void SAL_CALL SwVbaOptions::setAutoFormatApplyLists( ::sal_Bool /*_autoformatapplylists*/ ) throw (uno::RuntimeException) 248 { 249 // not support in Writer 250 } 251 252 ::sal_Bool SAL_CALL SwVbaOptions::getAutoFormatApplyBulletedLists() throw (uno::RuntimeException) 253 { 254 return sal_False; 255 } 256 257 void SAL_CALL SwVbaOptions::setAutoFormatApplyBulletedLists( ::sal_Bool /*_autoformatapplybulletedlists*/ ) throw (uno::RuntimeException) 258 { 259 // not support in Writer 260 } 261 262 263 rtl::OUString& 264 SwVbaOptions::getServiceImplName() 265 { 266 static rtl::OUString sImplName( RTL_CONSTASCII_USTRINGPARAM("SwVbaOptions") ); 267 return sImplName; 268 } 269 270 uno::Sequence< rtl::OUString > 271 SwVbaOptions::getServiceNames() 272 { 273 static uno::Sequence< rtl::OUString > aServiceNames; 274 if ( aServiceNames.getLength() == 0 ) 275 { 276 aServiceNames.realloc( 1 ); 277 aServiceNames[ 0 ] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("ooo.vba.word.Options" ) ); 278 } 279 return aServiceNames; 280 } 281