00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 #include "precompiled_starmath.hxx"
00038
00039
00040 #ifndef _VOS_MUTEX_HXX_
00041 #include <vos/mutex.hxx>
00042 #endif
00043 #ifndef _OSL_MUTEX_HXX_
00044 #include <osl/mutex.hxx>
00045 #endif
00046 #ifndef _SFX_PRINTER_HXX
00047 #include <sfx2/printer.hxx>
00048 #endif
00049 #ifndef _SV_SVAPP_HXX
00050 #include <vcl/svapp.hxx>
00051 #endif
00052 #ifndef _CTRLTOOL_HXX
00053 #include <svtools/ctrltool.hxx>
00054 #endif
00055 #ifndef _SFX_ITEMPROP_HXX
00056 #include <svtools/itemprop.hxx>
00057 #endif
00058 #ifndef _UNOTOOLS_LOCALEDATAWRAPPER_HXX
00059 #include <unotools/localedatawrapper.hxx>
00060 #endif
00061 #ifndef _UNOTOOLS_PROCESSFACTORY_HXX_
00062 #include <unotools/processfactory.hxx>
00063 #endif
00064 #ifndef _SVX_PAPERINF_HXX
00065 #include <svx/paperinf.hxx>
00066 #endif
00067 #ifndef _SV_SETTINGS_HXX
00068 #include <vcl/settings.hxx>
00069 #endif
00070 #ifndef _TOOLKIT_AWT_VCLXDEVICE_HXX_
00071 #include <toolkit/awt/vclxdevice.hxx>
00072 #endif
00073 #ifndef _COM_SUN_STAR_BEANS_PROPERTYSTATE_HPP_
00074 #include <com/sun/star/beans/PropertyState.hpp>
00075 #endif
00076 #ifndef _COM_SUN_STAR_BEANS_PROPERTYATTRIBUTE_HPP_
00077 #include <com/sun/star/beans/PropertyAttribute.hpp>
00078 #endif
00079 #ifndef _COM_SUN_STAR_FORMULA_SYMBOLDESCRIPTOR_HPP_
00080 #include <com/sun/star/formula/SymbolDescriptor.hpp>
00081 #endif
00082 #ifndef _COM_SUN_STAR_AWT_SIZE_HPP_
00083 #include <com/sun/star/awt/Size.hpp>
00084 #endif
00085 #ifndef _COM_SUN_STAR_SCRIPT_XLIBRARYCONTAINER_HPP_
00086 #include <com/sun/star/script/XLibraryContainer.hpp>
00087 #endif
00088
00089 #ifndef _XMLOFF_XMLUCONV_HXX
00090 #include <xmloff/xmluconv.hxx>
00091 #endif
00092 #ifndef _RTL_USTRBUF_HXX_
00093 #include <rtl/ustrbuf.hxx>
00094 #endif
00095 #ifndef _COMPHELPER_PROPERTSETINFO_HXX_
00096 #include <comphelper/propertysetinfo.hxx>
00097 #endif
00098
00099 #ifndef UNOMODEL_HXX
00100 #include <unomodel.hxx>
00101 #endif
00102 #ifndef DOCUMENT_HXX
00103 #include <document.hxx>
00104 #endif
00105 #ifndef VIEW_HXX
00106 #include <view.hxx>
00107 #endif
00108 #ifndef SYMBOL_HXX
00109 #include <symbol.hxx>
00110 #endif
00111 #ifndef STARMATH_HRC
00112 #include <starmath.hrc>
00113 #endif
00114 #ifndef CONFIG_HXX
00115 #include <config.hxx>
00116 #endif
00117
00118 #include <smdll.hxx>
00119
00120 using namespace ::vos;
00121 using namespace ::rtl;
00122 using namespace ::cppu;
00123 using namespace ::std;
00124 using namespace ::comphelper;
00125 using namespace ::com::sun::star;
00126 using namespace ::com::sun::star::uno;
00127 using namespace ::com::sun::star::beans;
00128 using namespace ::com::sun::star::lang;
00129 using namespace ::com::sun::star::formula;
00130 using namespace ::com::sun::star::view;
00131 using namespace ::com::sun::star::script;
00132
00133 #define TWIP_TO_MM100(TWIP) ((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
00134 #define MM100_TO_TWIP(MM100) ((MM100) >= 0 ? (((MM100)*72L+63L)/127L) : (((MM100)*72L-63L)/127L))
00135
00136 #define C2U(cChar) rtl::OUString::createFromAscii(cChar)
00137
00139
00140
00141
00142 #define PROPERTY_NONE 0
00143 enum SmModelPropertyHandles
00144 {
00145 HANDLE_FORMULA,
00146 HANDLE_FONT_NAME_VARIABLES,
00147 HANDLE_FONT_NAME_FUNCTIONS,
00148 HANDLE_FONT_NAME_NUMBERS,
00149 HANDLE_FONT_NAME_TEXT,
00150 HANDLE_CUSTOM_FONT_NAME_SERIF,
00151 HANDLE_CUSTOM_FONT_NAME_SANS,
00152 HANDLE_CUSTOM_FONT_NAME_FIXED,
00153 HANDLE_CUSTOM_FONT_FIXED_POSTURE,
00154 HANDLE_CUSTOM_FONT_FIXED_WEIGHT,
00155 HANDLE_CUSTOM_FONT_SANS_POSTURE,
00156 HANDLE_CUSTOM_FONT_SANS_WEIGHT,
00157 HANDLE_CUSTOM_FONT_SERIF_POSTURE,
00158 HANDLE_CUSTOM_FONT_SERIF_WEIGHT,
00159 HANDLE_FONT_VARIABLES_POSTURE,
00160 HANDLE_FONT_VARIABLES_WEIGHT,
00161 HANDLE_FONT_FUNCTIONS_POSTURE,
00162 HANDLE_FONT_FUNCTIONS_WEIGHT,
00163 HANDLE_FONT_NUMBERS_POSTURE,
00164 HANDLE_FONT_NUMBERS_WEIGHT,
00165 HANDLE_FONT_TEXT_POSTURE,
00166 HANDLE_FONT_TEXT_WEIGHT,
00167 HANDLE_BASE_FONT_HEIGHT,
00168 HANDLE_RELATIVE_FONT_HEIGHT_TEXT,
00169 HANDLE_RELATIVE_FONT_HEIGHT_INDICES,
00170 HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS,
00171 HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS,
00172 HANDLE_RELATIVE_FONT_HEIGHT_LIMITS,
00173 HANDLE_IS_TEXT_MODE,
00174 HANDLE_ALIGNMENT,
00175 HANDLE_RELATIVE_SPACING,
00176 HANDLE_RELATIVE_LINE_SPACING,
00177 HANDLE_RELATIVE_ROOT_SPACING,
00178 HANDLE_RELATIVE_INDEX_SUPERSCRIPT,
00179 HANDLE_RELATIVE_INDEX_SUBSCRIPT,
00180 HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT,
00181 HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH,
00182 HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH,
00183 HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT,
00184 HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE,
00185 HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE,
00186 HANDLE_RELATIVE_BRACKET_EXCESS_SIZE,
00187 HANDLE_RELATIVE_BRACKET_DISTANCE,
00188 HANDLE_IS_SCALE_ALL_BRACKETS,
00189 HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE,
00190 HANDLE_RELATIVE_MATRIX_LINE_SPACING,
00191 HANDLE_RELATIVE_MATRIX_COLUMN_SPACING,
00192 HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT,
00193 HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT,
00194 HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE,
00195 HANDLE_RELATIVE_OPERATOR_SPACING,
00196 HANDLE_LEFT_MARGIN,
00197 HANDLE_RIGHT_MARGIN,
00198 HANDLE_TOP_MARGIN,
00199 HANDLE_BOTTOM_MARGIN,
00200 HANDLE_PRINTER_NAME,
00201 HANDLE_PRINTER_SETUP,
00202 HANDLE_SYMBOLS,
00203 HANDLE_BASIC_LIBRARIES,
00204 HANDLE_RUNTIME_UID,
00205
00206 HANDLE_LOAD_READONLY,
00207
00208 HANDLE_DIALOG_LIBRARIES
00209 };
00210
00211 PropertySetInfo * lcl_createModelPropertyInfo ()
00212 {
00213 static PropertyMapEntry aModelPropertyInfoMap[] =
00214 {
00215 { RTL_CONSTASCII_STRINGPARAM( "Alignment" ), HANDLE_ALIGNMENT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0},
00216 { RTL_CONSTASCII_STRINGPARAM( "BaseFontHeight" ), HANDLE_BASE_FONT_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, 0},
00217 { RTL_CONSTASCII_STRINGPARAM( "BasicLibraries" ), HANDLE_BASIC_LIBRARIES , &::getCppuType((const uno::Reference< script::XLibraryContainer > *)0), PropertyAttribute::READONLY, 0},
00218 { RTL_CONSTASCII_STRINGPARAM( "BottomMargin" ), HANDLE_BOTTOM_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BOTTOMSPACE },
00219 { RTL_CONSTASCII_STRINGPARAM( "CustomFontNameFixed" ), HANDLE_CUSTOM_FONT_NAME_FIXED , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_FIXED },
00220 { RTL_CONSTASCII_STRINGPARAM( "CustomFontNameSans" ), HANDLE_CUSTOM_FONT_NAME_SANS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_SANS },
00221 { RTL_CONSTASCII_STRINGPARAM( "CustomFontNameSerif" ), HANDLE_CUSTOM_FONT_NAME_SERIF , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_SERIF },
00222 { RTL_CONSTASCII_STRINGPARAM( "DialogLibraries" ), HANDLE_DIALOG_LIBRARIES , &::getCppuType((const uno::Reference< script::XLibraryContainer > *)0), PropertyAttribute::READONLY, 0},
00223 { RTL_CONSTASCII_STRINGPARAM( "FontFixedIsBold"), HANDLE_CUSTOM_FONT_FIXED_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FIXED},
00224 { RTL_CONSTASCII_STRINGPARAM( "FontFixedIsItalic"), HANDLE_CUSTOM_FONT_FIXED_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FIXED},
00225 { RTL_CONSTASCII_STRINGPARAM( "FontFunctionsIsBold"), HANDLE_FONT_FUNCTIONS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FUNCTION},
00226 { RTL_CONSTASCII_STRINGPARAM( "FontFunctionsIsItalic"), HANDLE_FONT_FUNCTIONS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_FUNCTION},
00227 { RTL_CONSTASCII_STRINGPARAM( "FontNameFunctions" ), HANDLE_FONT_NAME_FUNCTIONS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_FUNCTION },
00228 { RTL_CONSTASCII_STRINGPARAM( "FontNameNumbers" ), HANDLE_FONT_NAME_NUMBERS , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_NUMBER },
00229 { RTL_CONSTASCII_STRINGPARAM( "FontNameText" ), HANDLE_FONT_NAME_TEXT , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_TEXT },
00230 { RTL_CONSTASCII_STRINGPARAM( "FontNameVariables" ), HANDLE_FONT_NAME_VARIABLES , &::getCppuType((const OUString*)0), PROPERTY_NONE, FNT_VARIABLE },
00231 { RTL_CONSTASCII_STRINGPARAM( "FontNumbersIsBold"), HANDLE_FONT_NUMBERS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_NUMBER},
00232 { RTL_CONSTASCII_STRINGPARAM( "FontNumbersIsItalic"), HANDLE_FONT_NUMBERS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_NUMBER},
00233 { RTL_CONSTASCII_STRINGPARAM( "FontSansIsBold"), HANDLE_CUSTOM_FONT_SANS_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SANS},
00234 { RTL_CONSTASCII_STRINGPARAM( "FontSansIsItalic"), HANDLE_CUSTOM_FONT_SANS_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SANS},
00235 { RTL_CONSTASCII_STRINGPARAM( "FontSerifIsBold"), HANDLE_CUSTOM_FONT_SERIF_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SERIF},
00236 { RTL_CONSTASCII_STRINGPARAM( "FontSerifIsItalic"), HANDLE_CUSTOM_FONT_SERIF_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_SERIF},
00237 { RTL_CONSTASCII_STRINGPARAM( "FontTextIsBold"), HANDLE_FONT_TEXT_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_TEXT},
00238 { RTL_CONSTASCII_STRINGPARAM( "FontTextIsItalic"), HANDLE_FONT_TEXT_POSTURE , &::getBooleanCppuType(), PROPERTY_NONE, FNT_TEXT},
00239 { RTL_CONSTASCII_STRINGPARAM( "FontVariablesIsBold"), HANDLE_FONT_VARIABLES_WEIGHT , &::getBooleanCppuType(), PROPERTY_NONE, FNT_VARIABLE},
00240 { RTL_CONSTASCII_STRINGPARAM( "FontVariablesIsItalic"), HANDLE_FONT_VARIABLES_POSTURE, &::getBooleanCppuType(), PROPERTY_NONE, FNT_VARIABLE},
00241 { RTL_CONSTASCII_STRINGPARAM( "Formula" ), HANDLE_FORMULA , &::getCppuType((const OUString*)0), PROPERTY_NONE, 0},
00242 { RTL_CONSTASCII_STRINGPARAM( "IsScaleAllBrackets" ), HANDLE_IS_SCALE_ALL_BRACKETS , &::getBooleanCppuType(), PROPERTY_NONE, 0},
00243 { RTL_CONSTASCII_STRINGPARAM( "IsTextMode" ), HANDLE_IS_TEXT_MODE , &::getBooleanCppuType(), PROPERTY_NONE, 0},
00244 { RTL_CONSTASCII_STRINGPARAM( "LeftMargin" ), HANDLE_LEFT_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_LEFTSPACE },
00245 { RTL_CONSTASCII_STRINGPARAM( "PrinterName" ), HANDLE_PRINTER_NAME , &::getCppuType((const OUString*)0), PROPERTY_NONE, 0 },
00246 { RTL_CONSTASCII_STRINGPARAM( "PrinterSetup" ), HANDLE_PRINTER_SETUP , &::getCppuType((const Sequence < sal_Int8 >*)0), PROPERTY_NONE, 0 },
00247 { RTL_CONSTASCII_STRINGPARAM( "RelativeBracketDistance" ), HANDLE_RELATIVE_BRACKET_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BRACKETSPACE },
00248 { RTL_CONSTASCII_STRINGPARAM( "RelativeBracketExcessSize" ), HANDLE_RELATIVE_BRACKET_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_BRACKETSIZE },
00249 { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightFunctions" ), HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_FUNCTION},
00250 { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightIndices" ), HANDLE_RELATIVE_FONT_HEIGHT_INDICES , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_INDEX },
00251 { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightLimits" ), HANDLE_RELATIVE_FONT_HEIGHT_LIMITS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_LIMITS },
00252 { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightOperators" ), HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_OPERATOR},
00253 { RTL_CONSTASCII_STRINGPARAM( "RelativeFontHeightText" ), HANDLE_RELATIVE_FONT_HEIGHT_TEXT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, SIZ_TEXT },
00254 { RTL_CONSTASCII_STRINGPARAM( "RelativeFractionBarExcessLength"), HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_FRACTION },
00255 { RTL_CONSTASCII_STRINGPARAM( "RelativeFractionBarLineWeight" ), HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_STROKEWIDTH },
00256 { RTL_CONSTASCII_STRINGPARAM( "RelativeFractionDenominatorDepth"), HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH, &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_DENOMINATOR },
00257 { RTL_CONSTASCII_STRINGPARAM( "RelativeFractionNumeratorHeight" ), HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_NUMERATOR },
00258 { RTL_CONSTASCII_STRINGPARAM( "RelativeIndexSubscript" ), HANDLE_RELATIVE_INDEX_SUBSCRIPT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_SUBSCRIPT },
00259 { RTL_CONSTASCII_STRINGPARAM( "RelativeIndexSuperscript" ), HANDLE_RELATIVE_INDEX_SUPERSCRIPT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_SUPERSCRIPT },
00260 { RTL_CONSTASCII_STRINGPARAM( "RelativeLineSpacing" ), HANDLE_RELATIVE_LINE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_VERTICAL },
00261 { RTL_CONSTASCII_STRINGPARAM( "RelativeLowerLimitDistance" ), HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_LOWERLIMIT },
00262 { RTL_CONSTASCII_STRINGPARAM( "RelativeMatrixColumnSpacing" ), HANDLE_RELATIVE_MATRIX_COLUMN_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_MATRIXCOL},
00263 { RTL_CONSTASCII_STRINGPARAM( "RelativeMatrixLineSpacing" ), HANDLE_RELATIVE_MATRIX_LINE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_MATRIXROW},
00264 { RTL_CONSTASCII_STRINGPARAM( "RelativeOperatorExcessSize" ), HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_OPERATORSIZE },
00265 { RTL_CONSTASCII_STRINGPARAM( "RelativeOperatorSpacing" ), HANDLE_RELATIVE_OPERATOR_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_OPERATORSPACE},
00266 { RTL_CONSTASCII_STRINGPARAM( "RelativeRootSpacing" ), HANDLE_RELATIVE_ROOT_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ROOT },
00267 { RTL_CONSTASCII_STRINGPARAM( "RelativeScaleBracketExcessSize" ), HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_NORMALBRACKETSIZE},
00268 { RTL_CONSTASCII_STRINGPARAM( "RelativeSpacing" ), HANDLE_RELATIVE_SPACING , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_HORIZONTAL },
00269 { RTL_CONSTASCII_STRINGPARAM( "RelativeSymbolMinimumHeight" ), HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ORNAMENTSPACE },
00270 { RTL_CONSTASCII_STRINGPARAM( "RelativeSymbolPrimaryHeight" ), HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_ORNAMENTSIZE },
00271 { RTL_CONSTASCII_STRINGPARAM( "RelativeUpperLimitDistance" ), HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_UPPERLIMIT },
00272 { RTL_CONSTASCII_STRINGPARAM( "RightMargin" ), HANDLE_RIGHT_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_RIGHTSPACE },
00273 { RTL_CONSTASCII_STRINGPARAM( "RuntimeUID" ), HANDLE_RUNTIME_UID , &::getCppuType(static_cast< const rtl::OUString * >(0)), PropertyAttribute::READONLY, 0 },
00274 { RTL_CONSTASCII_STRINGPARAM( "Symbols" ), HANDLE_SYMBOLS , &::getCppuType((const Sequence < SymbolDescriptor > *)0), PROPERTY_NONE, 0 },
00275 { RTL_CONSTASCII_STRINGPARAM( "TopMargin" ), HANDLE_TOP_MARGIN , &::getCppuType((const sal_Int16*)0), PROPERTY_NONE, DIS_TOPSPACE },
00276
00277 { RTL_CONSTASCII_STRINGPARAM( "LoadReadonly" ), HANDLE_LOAD_READONLY, &::getBooleanCppuType(), PROPERTY_NONE, 0 },
00278
00279 { NULL, 0, 0, NULL, 0, 0 }
00280 };
00281 PropertySetInfo *pInfo = new PropertySetInfo ( aModelPropertyInfoMap );
00282 return pInfo;
00283 }
00284
00285 SmModel::SmModel( SfxObjectShell *pObjSh )
00286 : SfxBaseModel(pObjSh)
00287 , PropertySetHelper ( lcl_createModelPropertyInfo () )
00288 {
00289 }
00290
00291 SmModel::~SmModel() throw ()
00292 {
00293 }
00294
00295
00296
00297 uno::Any SAL_CALL SmModel::queryInterface( const uno::Type& rType ) throw(uno::RuntimeException)
00298 {
00299 uno::Any aRet = ::cppu::queryInterface ( rType,
00300
00301 dynamic_cast< XInterface* > ( static_cast< XUnoTunnel* > ( this )),
00302 static_cast< XWeak* > ( this ),
00303
00304 static_cast< XPropertySet* > ( this ),
00305 static_cast< XMultiPropertySet* > ( this ),
00306
00307
00308 static_cast< XServiceInfo* > ( this ),
00309 static_cast< XRenderable* > ( this ) );
00310 if (!aRet.hasValue())
00311 aRet = SfxBaseModel::queryInterface ( rType );
00312 return aRet;
00313 }
00314
00315
00316
00317 void SAL_CALL SmModel::acquire() throw()
00318 {
00319 OWeakObject::acquire();
00320 }
00321
00322
00323
00324 void SAL_CALL SmModel::release() throw()
00325 {
00326 OWeakObject::release();
00327 }
00328
00329
00330
00331 uno::Sequence< uno::Type > SAL_CALL SmModel::getTypes( ) throw(uno::RuntimeException)
00332 {
00333 ::vos::OGuard aGuard(Application::GetSolarMutex());
00334 uno::Sequence< uno::Type > aTypes = SfxBaseModel::getTypes();
00335 sal_Int32 nLen = aTypes.getLength();
00336 aTypes.realloc(nLen + 4);
00337 uno::Type* pTypes = aTypes.getArray();
00338 pTypes[nLen++] = ::getCppuType((Reference<XServiceInfo>*)0);
00339 pTypes[nLen++] = ::getCppuType((Reference<XPropertySet>*)0);
00340 pTypes[nLen++] = ::getCppuType((Reference<XMultiPropertySet>*)0);
00341 pTypes[nLen++] = ::getCppuType((Reference<XRenderable>*)0);
00342
00343
00344
00345
00346
00347 return aTypes;
00348 }
00349
00350
00351
00352 const uno::Sequence< sal_Int8 > & SmModel::getUnoTunnelId()
00353 {
00354 static osl::Mutex aCreateMutex;
00355 osl::Guard<osl::Mutex> aGuard( aCreateMutex );
00356
00357 static uno::Sequence< sal_Int8 > aSeq;
00358 if(!aSeq.getLength())
00359 {
00360 aSeq.realloc( 16 );
00361 rtl_createUuid( (sal_uInt8*)aSeq.getArray(), 0, sal_True );
00362 }
00363 return aSeq;
00364 }
00365
00366
00367 sal_Int64 SAL_CALL SmModel::getSomething( const uno::Sequence< sal_Int8 >& rId )
00368 throw(uno::RuntimeException)
00369 {
00370 if( rId.getLength() == 16
00371 && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
00372 rId.getConstArray(), 16 ) )
00373 {
00374 return sal::static_int_cast< sal_Int64 >(reinterpret_cast< sal_uIntPtr >(this));
00375 }
00376
00377 return SfxBaseModel::getSomething( rId );
00378 }
00379
00380
00381
00382
00383
00384
00385 sal_Int16 lcl_AnyToINT16(const uno::Any& rAny)
00386 {
00387 uno::TypeClass eType = rAny.getValueType().getTypeClass();
00388
00389 sal_Int16 nRet = 0;
00390 if( eType == uno::TypeClass_DOUBLE )
00391 nRet = (sal_Int16)*(double*)rAny.getValue();
00392 else if( eType == uno::TypeClass_FLOAT )
00393 nRet = (sal_Int16)*(float*)rAny.getValue();
00394 else
00395 rAny >>= nRet;
00396 return nRet;
00397 }
00398
00399
00400 OUString SmModel::getImplementationName(void) throw( uno::RuntimeException )
00401 {
00402 return getImplementationName_Static();
00403 }
00404
00405
00406 ::rtl::OUString SmModel::getImplementationName_Static()
00407 {
00408 return rtl::OUString::createFromAscii("com.sun.star.comp.math.FormulaDocument");
00409 }
00410
00411
00412
00413
00414 sal_Bool SmModel::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
00415 {
00416 return (
00417 rServiceName == C2U("com.sun.star.document.OfficeDocument" ) ||
00418 rServiceName == C2U("com.sun.star.formula.FormulaProperties")
00419 );
00420 }
00421
00422
00423
00424 uno::Sequence< OUString > SmModel::getSupportedServiceNames(void) throw( uno::RuntimeException )
00425 {
00426 return getSupportedServiceNames_Static();
00427 }
00428
00429 uno::Sequence< OUString > SmModel::getSupportedServiceNames_Static(void)
00430 {
00431 ::vos::OGuard aGuard(Application::GetSolarMutex());
00432
00433 uno::Sequence< OUString > aRet(2);
00434 OUString* pArray = aRet.getArray();
00435 pArray[0] = C2U("com.sun.star.document.OfficeDocument");
00436 pArray[1] = C2U("com.sun.star.formula.FormulaProperties");
00437 return aRet;
00438 }
00439
00440 void SmModel::_setPropertyValues(const PropertyMapEntry** ppEntries, const Any* pValues)
00441 throw( UnknownPropertyException, PropertyVetoException, IllegalArgumentException, WrappedTargetException)
00442 {
00443 ::vos::OGuard aGuard(Application::GetSolarMutex());
00444
00445 SmDocShell *pDocSh = static_cast < SmDocShell * > (GetObjectShell());
00446
00447 if ( NULL == pDocSh )
00448 throw UnknownPropertyException();
00449
00450 SmFormat aFormat = pDocSh->GetFormat();
00451
00452 for (; *ppEntries; ppEntries++, pValues++ )
00453 {
00454 if ((*ppEntries)->mnAttributes & PropertyAttribute::READONLY)
00455 throw PropertyVetoException();
00456
00457 switch ( (*ppEntries)->mnHandle )
00458 {
00459 case HANDLE_FORMULA:
00460 {
00461 OUString aText;
00462 *pValues >>= aText;
00463 pDocSh->SetText(aText);
00464 pDocSh->SetVisArea( Rectangle( Point(0, 0), pDocSh->GetSize() ) );
00465 }
00466 break;
00467 case HANDLE_FONT_NAME_VARIABLES :
00468 case HANDLE_FONT_NAME_FUNCTIONS :
00469 case HANDLE_FONT_NAME_NUMBERS :
00470 case HANDLE_FONT_NAME_TEXT :
00471 case HANDLE_CUSTOM_FONT_NAME_SERIF :
00472 case HANDLE_CUSTOM_FONT_NAME_SANS :
00473 case HANDLE_CUSTOM_FONT_NAME_FIXED :
00474 {
00475 OUString aText;
00476 *pValues >>= aText;
00477 String sFontName = aText;
00478 if(!sFontName.Len())
00479 throw IllegalArgumentException();
00480
00481 if(aFormat.GetFont((*ppEntries)->mnMemberId).GetName() != sFontName)
00482 {
00483 const SmFace rOld = aFormat.GetFont((*ppEntries)->mnMemberId);
00484
00485 SmFace aSet( sFontName, rOld.GetSize() );
00486 aSet.SetBorderWidth( rOld.GetBorderWidth() );
00487 aSet.SetAlign( ALIGN_BASELINE );
00488 aFormat.SetFont( (*ppEntries)->mnMemberId, aSet );
00489 }
00490 }
00491 break;
00492 case HANDLE_CUSTOM_FONT_FIXED_POSTURE:
00493 case HANDLE_CUSTOM_FONT_SANS_POSTURE :
00494 case HANDLE_CUSTOM_FONT_SERIF_POSTURE:
00495 case HANDLE_FONT_VARIABLES_POSTURE :
00496 case HANDLE_FONT_FUNCTIONS_POSTURE :
00497 case HANDLE_FONT_NUMBERS_POSTURE :
00498 case HANDLE_FONT_TEXT_POSTURE :
00499 {
00500 if((*pValues).getValueType() != ::getBooleanCppuType())
00501 throw IllegalArgumentException();
00502 BOOL bVal = *(sal_Bool*)(*pValues).getValue();
00503 Font aNewFont(aFormat.GetFont((*ppEntries)->mnMemberId));
00504 aNewFont.SetItalic((bVal) ? ITALIC_NORMAL : ITALIC_NONE);
00505 aFormat.SetFont((*ppEntries)->mnMemberId, aNewFont);
00506 }
00507 break;
00508 case HANDLE_CUSTOM_FONT_FIXED_WEIGHT :
00509 case HANDLE_CUSTOM_FONT_SANS_WEIGHT :
00510 case HANDLE_CUSTOM_FONT_SERIF_WEIGHT :
00511 case HANDLE_FONT_VARIABLES_WEIGHT :
00512 case HANDLE_FONT_FUNCTIONS_WEIGHT :
00513 case HANDLE_FONT_NUMBERS_WEIGHT :
00514 case HANDLE_FONT_TEXT_WEIGHT :
00515 {
00516 if((*pValues).getValueType() != ::getBooleanCppuType())
00517 throw IllegalArgumentException();
00518 BOOL bVal = *(sal_Bool*)(*pValues).getValue();
00519 Font aNewFont(aFormat.GetFont((*ppEntries)->mnMemberId));
00520 aNewFont.SetWeight((bVal) ? WEIGHT_BOLD : WEIGHT_NORMAL);
00521 aFormat.SetFont((*ppEntries)->mnMemberId, aNewFont);
00522 }
00523 break;
00524 case HANDLE_BASE_FONT_HEIGHT :
00525 {
00526
00527 sal_Int16 nVal = lcl_AnyToINT16(*pValues);
00528 if(nVal < 1)
00529 throw IllegalArgumentException();
00530 Size aSize = aFormat.GetBaseSize();
00531 nVal *= 20;
00532 nVal = static_cast < sal_Int16 > ( TWIP_TO_MM100(nVal) );
00533 aSize.Height() = nVal;
00534 aFormat.SetBaseSize(aSize);
00535
00536
00537 const Size aTmp( aFormat.GetBaseSize() );
00538 for (USHORT i = FNT_BEGIN; i <= FNT_END; i++)
00539 aFormat.SetFontSize(i, aTmp);
00540 }
00541 break;
00542 case HANDLE_RELATIVE_FONT_HEIGHT_TEXT :
00543 case HANDLE_RELATIVE_FONT_HEIGHT_INDICES :
00544 case HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS :
00545 case HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS :
00546 case HANDLE_RELATIVE_FONT_HEIGHT_LIMITS :
00547 {
00548 sal_Int16 nVal = 0;
00549 *pValues >>= nVal;
00550 if(nVal < 1)
00551 throw IllegalArgumentException();
00552 aFormat.SetRelSize((*ppEntries)->mnMemberId, nVal);
00553 }
00554 break;
00555
00556 case HANDLE_IS_TEXT_MODE :
00557 {
00558 aFormat.SetTextmode(*(sal_Bool*)(*pValues).getValue());
00559 }
00560 break;
00561
00562 case HANDLE_ALIGNMENT :
00563 {
00564
00565 sal_Int16 nVal = 0;
00566 *pValues >>= nVal;
00567 if(nVal < 0 || nVal > 2)
00568 throw IllegalArgumentException();
00569 aFormat.SetHorAlign((SmHorAlign)nVal);
00570 }
00571 break;
00572
00573 case HANDLE_RELATIVE_SPACING :
00574 case HANDLE_RELATIVE_LINE_SPACING :
00575 case HANDLE_RELATIVE_ROOT_SPACING :
00576 case HANDLE_RELATIVE_INDEX_SUPERSCRIPT :
00577 case HANDLE_RELATIVE_INDEX_SUBSCRIPT :
00578 case HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT :
00579 case HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH:
00580 case HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH:
00581 case HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT :
00582 case HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE :
00583 case HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE :
00584 case HANDLE_RELATIVE_BRACKET_EXCESS_SIZE :
00585 case HANDLE_RELATIVE_BRACKET_DISTANCE :
00586 case HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE :
00587 case HANDLE_RELATIVE_MATRIX_LINE_SPACING :
00588 case HANDLE_RELATIVE_MATRIX_COLUMN_SPACING :
00589 case HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT :
00590 case HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT :
00591 case HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE :
00592 case HANDLE_RELATIVE_OPERATOR_SPACING :
00593 case HANDLE_LEFT_MARGIN :
00594 case HANDLE_RIGHT_MARGIN :
00595 case HANDLE_TOP_MARGIN :
00596 case HANDLE_BOTTOM_MARGIN :
00597 {
00598 sal_Int16 nVal = 0;
00599 *pValues >>= nVal;
00600 if(nVal < 0)
00601 throw IllegalArgumentException();
00602 aFormat.SetDistance((*ppEntries)->mnMemberId, nVal);
00603 }
00604 break;
00605 case HANDLE_IS_SCALE_ALL_BRACKETS :
00606 aFormat.SetScaleNormalBrackets(*(sal_Bool*)(*pValues).getValue());
00607 break;
00608 case HANDLE_PRINTER_NAME:
00609 {
00610
00611 if ( pDocSh->GetCreateMode() != SFX_CREATE_MODE_EMBEDDED )
00612 {
00613 SfxPrinter *pPrinter = pDocSh->GetPrinter ( );
00614 if (pPrinter)
00615 {
00616 OUString sPrinterName;
00617 if (*pValues >>= sPrinterName )
00618 {
00619 if ( sPrinterName.getLength() )
00620 {
00621 SfxPrinter *pNewPrinter = new SfxPrinter ( pPrinter->GetOptions().Clone(), sPrinterName );
00622 if (pNewPrinter->IsKnown())
00623 pDocSh->SetPrinter ( pNewPrinter );
00624 else
00625 delete pNewPrinter;
00626 }
00627 }
00628 else
00629 throw IllegalArgumentException();
00630 }
00631 }
00632 }
00633 break;
00634 case HANDLE_PRINTER_SETUP:
00635 {
00636 Sequence < sal_Int8 > aSequence;
00637 if ( *pValues >>= aSequence )
00638 {
00639 sal_uInt32 nSize = aSequence.getLength();
00640 SvMemoryStream aStream ( aSequence.getArray(), nSize, STREAM_READ );
00641 aStream.Seek ( STREAM_SEEK_TO_BEGIN );
00642 static sal_uInt16 __READONLY_DATA nRange[] =
00643 {
00644 SID_PRINTSIZE, SID_PRINTSIZE,
00645 SID_PRINTZOOM, SID_PRINTZOOM,
00646 SID_PRINTTITLE, SID_PRINTTITLE,
00647 SID_PRINTTEXT, SID_PRINTTEXT,
00648 SID_PRINTFRAME, SID_PRINTFRAME,
00649 SID_NO_RIGHT_SPACES, SID_NO_RIGHT_SPACES,
00650 0
00651 };
00652 SfxItemSet *pItemSet = new SfxItemSet( pDocSh->GetPool(), nRange );
00653 SmModule *pp = SM_MOD1();
00654 pp->GetConfig()->ConfigToItemSet(*pItemSet);
00655 SfxPrinter *pPrinter = SfxPrinter::Create ( aStream, pItemSet );
00656
00657 pDocSh->SetPrinter( pPrinter );
00658 }
00659 else
00660 throw IllegalArgumentException();
00661 }
00662 break;
00663 case HANDLE_SYMBOLS:
00664 {
00665
00666 Sequence < SymbolDescriptor > aSequence;
00667 if ( *pValues >>= aSequence )
00668 {
00669 sal_uInt32 nSize = aSequence.getLength();
00670 SmModule *pp = SM_MOD1();
00671 SmSymSetManager &rManager = pp->GetSymSetManager();
00672 SymbolDescriptor *pDescriptor = aSequence.getArray();
00673 for (sal_uInt32 i = 0; i < nSize ; i++, pDescriptor++)
00674 {
00675 Font aFont;
00676 aFont.SetName ( pDescriptor->sFontName );
00677 aFont.SetCharSet ( static_cast < rtl_TextEncoding > (pDescriptor->nCharSet) );
00678 aFont.SetFamily ( static_cast < FontFamily > (pDescriptor->nFamily ) );
00679 aFont.SetPitch ( static_cast < FontPitch > (pDescriptor->nPitch ) );
00680 aFont.SetWeight ( static_cast < FontWeight > (pDescriptor->nWeight ) );
00681 aFont.SetItalic ( static_cast < FontItalic > (pDescriptor->nItalic ) );
00682 SmSym aSymbol ( pDescriptor->sName, aFont, static_cast < sal_Unicode > (pDescriptor->nCharacter),
00683 pDescriptor->sSymbolSet );
00684 aSymbol.SetExportName ( pDescriptor->sExportName );
00685 aSymbol.SetDocSymbol( TRUE );
00686 rManager.AddReplaceSymbol ( aSymbol );
00687 }
00688 }
00689 else
00690 throw IllegalArgumentException();
00691 }
00692 break;
00693
00694 case HANDLE_LOAD_READONLY :
00695 {
00696 if ( (*pValues).getValueType() != ::getBooleanCppuType() )
00697 throw IllegalArgumentException();
00698 sal_Bool bReadonly = FALSE;
00699 if ( *pValues >>= bReadonly )
00700 pDocSh->SetLoadReadonly( bReadonly );
00701 break;
00702 }
00703
00704 }
00705 }
00706
00707 pDocSh->SetFormat( aFormat );
00708 }
00709
00710 void SmModel::_getPropertyValues( const PropertyMapEntry **ppEntries, Any *pValue )
00711 throw( UnknownPropertyException, WrappedTargetException )
00712 {
00713 SmDocShell *pDocSh = static_cast < SmDocShell * > (GetObjectShell());
00714
00715 if ( NULL == pDocSh )
00716 throw UnknownPropertyException();
00717
00718 const SmFormat & aFormat = pDocSh->GetFormat();
00719
00720 for (; *ppEntries; ppEntries++, pValue++ )
00721 {
00722 switch ( (*ppEntries)->mnHandle )
00723 {
00724 case HANDLE_FORMULA:
00725 *pValue <<= OUString(pDocSh->GetText());
00726 break;
00727 case HANDLE_FONT_NAME_VARIABLES :
00728 case HANDLE_FONT_NAME_FUNCTIONS :
00729 case HANDLE_FONT_NAME_NUMBERS :
00730 case HANDLE_FONT_NAME_TEXT :
00731 case HANDLE_CUSTOM_FONT_NAME_SERIF :
00732 case HANDLE_CUSTOM_FONT_NAME_SANS :
00733 case HANDLE_CUSTOM_FONT_NAME_FIXED :
00734 {
00735 const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId);
00736 *pValue <<= OUString(rFace.GetName());
00737 }
00738 break;
00739 case HANDLE_CUSTOM_FONT_FIXED_POSTURE:
00740 case HANDLE_CUSTOM_FONT_SANS_POSTURE :
00741 case HANDLE_CUSTOM_FONT_SERIF_POSTURE:
00742 case HANDLE_FONT_VARIABLES_POSTURE :
00743 case HANDLE_FONT_FUNCTIONS_POSTURE :
00744 case HANDLE_FONT_NUMBERS_POSTURE :
00745 case HANDLE_FONT_TEXT_POSTURE :
00746 {
00747 const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId);
00748 BOOL bVal = IsItalic( rFace );
00749 (*pValue).setValue(&bVal, *(*ppEntries)->mpType);
00750 }
00751 break;
00752 case HANDLE_CUSTOM_FONT_FIXED_WEIGHT :
00753 case HANDLE_CUSTOM_FONT_SANS_WEIGHT :
00754 case HANDLE_CUSTOM_FONT_SERIF_WEIGHT :
00755 case HANDLE_FONT_VARIABLES_WEIGHT :
00756 case HANDLE_FONT_FUNCTIONS_WEIGHT :
00757 case HANDLE_FONT_NUMBERS_WEIGHT :
00758 case HANDLE_FONT_TEXT_WEIGHT :
00759 {
00760 const SmFace & rFace = aFormat.GetFont((*ppEntries)->mnMemberId);
00761 BOOL bVal = IsBold( rFace );
00762 (*pValue).setValue(&bVal, *(*ppEntries)->mpType);
00763 }
00764 break;
00765 case HANDLE_BASE_FONT_HEIGHT :
00766 {
00767
00768 sal_Int16 nVal = static_cast < sal_Int16 > (aFormat.GetBaseSize().Height());
00769 nVal = static_cast < sal_Int16 > (MM100_TO_TWIP(nVal));
00770 nVal = (nVal + 10) / 20;
00771 *pValue <<= nVal;
00772 }
00773 break;
00774 case HANDLE_RELATIVE_FONT_HEIGHT_TEXT :
00775 case HANDLE_RELATIVE_FONT_HEIGHT_INDICES :
00776 case HANDLE_RELATIVE_FONT_HEIGHT_FUNCTIONS :
00777 case HANDLE_RELATIVE_FONT_HEIGHT_OPERATORS :
00778 case HANDLE_RELATIVE_FONT_HEIGHT_LIMITS :
00779 *pValue <<= (sal_Int16) aFormat.GetRelSize((*ppEntries)->mnMemberId);
00780 break;
00781
00782 case HANDLE_IS_TEXT_MODE :
00783 {
00784 sal_Bool bVal = aFormat.IsTextmode();
00785 (*pValue).setValue(&bVal, ::getBooleanCppuType());
00786 }
00787 break;
00788
00789 case HANDLE_ALIGNMENT :
00790
00791 *pValue <<= (sal_Int16)aFormat.GetHorAlign();
00792 break;
00793
00794 case HANDLE_RELATIVE_SPACING :
00795 case HANDLE_RELATIVE_LINE_SPACING :
00796 case HANDLE_RELATIVE_ROOT_SPACING :
00797 case HANDLE_RELATIVE_INDEX_SUPERSCRIPT :
00798 case HANDLE_RELATIVE_INDEX_SUBSCRIPT :
00799 case HANDLE_RELATIVE_FRACTION_NUMERATOR_HEIGHT :
00800 case HANDLE_RELATIVE_FRACTION_DENOMINATOR_DEPTH:
00801 case HANDLE_RELATIVE_FRACTION_BAR_EXCESS_LENGTH:
00802 case HANDLE_RELATIVE_FRACTION_BAR_LINE_WEIGHT :
00803 case HANDLE_RELATIVE_UPPER_LIMIT_DISTANCE :
00804 case HANDLE_RELATIVE_LOWER_LIMIT_DISTANCE :
00805 case HANDLE_RELATIVE_BRACKET_EXCESS_SIZE :
00806 case HANDLE_RELATIVE_BRACKET_DISTANCE :
00807 case HANDLE_RELATIVE_SCALE_BRACKET_EXCESS_SIZE :
00808 case HANDLE_RELATIVE_MATRIX_LINE_SPACING :
00809 case HANDLE_RELATIVE_MATRIX_COLUMN_SPACING :
00810 case HANDLE_RELATIVE_SYMBOL_PRIMARY_HEIGHT :
00811 case HANDLE_RELATIVE_SYMBOL_MINIMUM_HEIGHT :
00812 case HANDLE_RELATIVE_OPERATOR_EXCESS_SIZE :
00813 case HANDLE_RELATIVE_OPERATOR_SPACING :
00814 case HANDLE_LEFT_MARGIN :
00815 case HANDLE_RIGHT_MARGIN :
00816 case HANDLE_TOP_MARGIN :
00817 case HANDLE_BOTTOM_MARGIN :
00818 *pValue <<= (sal_Int16)aFormat.GetDistance((*ppEntries)->mnMemberId);
00819 break;
00820 case HANDLE_IS_SCALE_ALL_BRACKETS :
00821 {
00822 sal_Bool bVal = aFormat.IsScaleNormalBrackets();
00823 (*pValue).setValue(&bVal, ::getBooleanCppuType());
00824 }
00825 break;
00826 case HANDLE_PRINTER_NAME:
00827 {
00828 SfxPrinter *pPrinter = pDocSh->GetPrinter ( );
00829 *pValue <<= pPrinter ? OUString ( pPrinter->GetName()) : OUString();
00830 }
00831 break;
00832 case HANDLE_PRINTER_SETUP:
00833 {
00834 SfxPrinter *pPrinter = pDocSh->GetPrinter ();
00835 if (pPrinter)
00836 {
00837 SvMemoryStream aStream;
00838 pPrinter->Store( aStream );
00839 aStream.Seek ( STREAM_SEEK_TO_END );
00840 sal_uInt32 nSize = aStream.Tell();
00841 aStream.Seek ( STREAM_SEEK_TO_BEGIN );
00842 Sequence < sal_Int8 > aSequence ( nSize );
00843 aStream.Read ( aSequence.getArray(), nSize );
00844 *pValue <<= aSequence;
00845 }
00846 }
00847 break;
00848 case HANDLE_SYMBOLS:
00849 {
00850
00851 SmModule *pp = SM_MOD1();
00852 const SmSymSetManager &rManager = pp->GetSymSetManager();
00853 vector < const SmSym * > aVector;
00854
00855 USHORT nCount = 0;
00856 for (USHORT i = 0, nEnd = rManager.GetSymbolCount(); i < nEnd; i++)
00857 {
00858 const SmSym * pSymbol = rManager.GetSymbolByPos( i );
00859 if (pSymbol && !pSymbol->IsPredefined () )
00860 {
00861 aVector.push_back ( pSymbol );
00862 nCount++;
00863 }
00864 }
00865 Sequence < SymbolDescriptor > aSequence ( nCount );
00866 SymbolDescriptor * pDescriptor = aSequence.getArray();
00867
00868 vector <const SmSym * >::const_iterator aIter = aVector.begin(), aEnd = aVector.end();
00869 for(; aIter != aEnd; pDescriptor++, aIter++)
00870 {
00871 pDescriptor->sName = (*aIter)->GetName();
00872 pDescriptor->sExportName = (*aIter)->GetExportName();
00873 pDescriptor->sSymbolSet = (*aIter)->GetSetName();
00874 pDescriptor->nCharacter = static_cast < sal_Int32 > ((*aIter)->GetCharacter());
00875
00876 Font rFont = (*aIter)->GetFace();
00877 pDescriptor->sFontName = rFont.GetName();
00878 pDescriptor->nCharSet = sal::static_int_cast< sal_Int16 >(rFont.GetCharSet());
00879 pDescriptor->nFamily = sal::static_int_cast< sal_Int16 >(rFont.GetFamily());
00880 pDescriptor->nPitch = sal::static_int_cast< sal_Int16 >(rFont.GetPitch());
00881 pDescriptor->nWeight = sal::static_int_cast< sal_Int16 >(rFont.GetWeight());
00882 pDescriptor->nItalic = sal::static_int_cast< sal_Int16 >(rFont.GetItalic());
00883 }
00884 *pValue <<= aSequence;
00885 }
00886 break;
00887 case HANDLE_BASIC_LIBRARIES:
00888 *pValue <<= pDocSh->GetBasicContainer();
00889 break;
00890 case HANDLE_DIALOG_LIBRARIES:
00891 *pValue <<= pDocSh->GetDialogContainer();
00892 break;
00893 case HANDLE_RUNTIME_UID:
00894 *pValue <<= getRuntimeUID();
00895 break;
00896
00897 case HANDLE_LOAD_READONLY :
00898 {
00899 *pValue <<= pDocSh->IsLoadReadonly();
00900 break;
00901 }
00902
00903 }
00904 }
00905 }
00906
00908
00909 sal_Int32 SAL_CALL SmModel::getRendererCount(
00910 const uno::Any& ,
00911 const uno::Sequence< beans::PropertyValue >& )
00912 throw (IllegalArgumentException, RuntimeException)
00913 {
00914 ::vos::OGuard aGuard(Application::GetSolarMutex());
00915 return 1;
00916 }
00917
00918
00919 static Size lcl_GuessPaperSize()
00920 {
00921 Size aRes;
00922 Reference< XMultiServiceFactory > xMgr( getProcessServiceFactory() );
00923 LocaleDataWrapper aLocWrp( xMgr, AllSettings().GetLocale() );
00924 if( MEASURE_METRIC == aLocWrp.getMeasurementSystemEnum() )
00925 {
00926
00927 aRes.Width() = lA4Width;
00928 aRes.Height() = lA4Height;
00929 }
00930 else
00931 {
00932
00933 aRes.Width() = lLetterWidth;
00934 aRes.Height() = lLetterHeight;
00935 }
00936 aRes = OutputDevice::LogicToLogic( aRes, MapMode(MAP_TWIP),
00937 MapMode(MAP_100TH_MM) );
00938 return aRes;
00939 }
00940
00941
00942 uno::Sequence< beans::PropertyValue > SAL_CALL SmModel::getRenderer(
00943 sal_Int32 nRenderer,
00944 const uno::Any& ,
00945 const uno::Sequence< beans::PropertyValue >& )
00946 throw (IllegalArgumentException, RuntimeException)
00947 {
00948 ::vos::OGuard aGuard(Application::GetSolarMutex());
00949
00950 if (0 != nRenderer)
00951 throw IllegalArgumentException();
00952
00953 SmDocShell *pDocSh = static_cast < SmDocShell * >( GetObjectShell() );
00954 if (!pDocSh)
00955 throw RuntimeException();
00956
00957 SmPrinterAccess aPrinterAccess( *pDocSh );
00958 Printer *pPrinter = aPrinterAccess.GetPrinter();
00959
00960 Size aPrtPaperSize ( pPrinter->GetPaperSize() );
00961
00962
00963
00964 if (aPrtPaperSize.Height() == 0 || aPrtPaperSize.Width() == 0)
00965 aPrtPaperSize = lcl_GuessPaperSize();
00966 awt::Size aPageSize( aPrtPaperSize.Width(), aPrtPaperSize.Height() );
00967
00968 uno::Sequence< beans::PropertyValue > aRenderer(1);
00969 PropertyValue &rValue = aRenderer.getArray()[0];
00970 rValue.Name = OUString( RTL_CONSTASCII_USTRINGPARAM( "PageSize" ) );
00971 rValue.Value <<= aPageSize;
00972
00973 return aRenderer;
00974 }
00975
00976 void SAL_CALL SmModel::render(
00977 sal_Int32 nRenderer,
00978 const uno::Any& rSelection,
00979 const uno::Sequence< beans::PropertyValue >& rxOptions )
00980 throw (IllegalArgumentException, RuntimeException)
00981 {
00982 ::vos::OGuard aGuard(Application::GetSolarMutex());
00983
00984 if (0 != nRenderer)
00985 throw IllegalArgumentException();
00986
00987 SmDocShell *pDocSh = static_cast < SmDocShell * >( GetObjectShell() );
00988 if (!pDocSh)
00989 throw RuntimeException();
00990
00991
00992 uno::Reference< awt::XDevice > xRenderDevice;
00993 for (sal_Int32 i = 0, nCount = rxOptions.getLength(); i < nCount; ++i)
00994 {
00995 if( rxOptions[i].Name == OUString( RTL_CONSTASCII_USTRINGPARAM( "RenderDevice" ) ) )
00996 rxOptions[i].Value >>= xRenderDevice;
00997 }
00998
00999 if (xRenderDevice.is())
01000 {
01001 VCLXDevice* pDevice = VCLXDevice::GetImplementation( xRenderDevice );
01002 OutputDevice* pOut = pDevice ? pDevice->GetOutputDevice() : NULL;
01003
01004 if (!pOut)
01005 throw RuntimeException();
01006
01007 pOut->SetMapMode( MAP_100TH_MM );
01008
01009 uno::Reference< frame::XModel > xModel;
01010 rSelection >>= xModel;
01011 if (xModel == pDocSh->GetModel())
01012 {
01015 const TypeId aTypeId = TYPE( SmViewShell );
01016 SfxViewShell* pViewSh = SfxViewShell::GetFirst( &aTypeId, sal_False );
01017 while (pViewSh && pViewSh->GetObjectShell() != pDocSh)
01018 pViewSh = SfxViewShell::GetNext( *pViewSh, &aTypeId, sal_False );
01019 SmViewShell *pView = PTR_CAST( SmViewShell, pViewSh );
01020 DBG_ASSERT( pView, "SmModel::render : no SmViewShell found" );
01021
01022 if (pView)
01023 {
01024 SmPrinterAccess aPrinterAccess( *pDocSh );
01025 Printer *pPrinter = aPrinterAccess.GetPrinter();
01026
01027 Size aPrtPaperSize ( pPrinter->GetPaperSize() );
01028 Size aOutputSize ( pPrinter->GetOutputSize() );
01029 Point aPrtPageOffset( pPrinter->GetPageOffset() );
01030
01031
01032 if (aPrtPaperSize.Height() == 0 || aPrtPaperSize.Width() == 0)
01033 {
01034 aPrtPaperSize = lcl_GuessPaperSize();
01035
01036 aOutputSize = Size( (long)(aPrtPaperSize.Width() * 0.941),
01037 (long)(aPrtPaperSize.Height() * 0.961));
01038 aPrtPageOffset = Point( (long)(aPrtPaperSize.Width() * 0.0250),
01039 (long)(aPrtPaperSize.Height() * 0.0214));
01040 }
01041 Point aZeroPoint;
01042 Rectangle OutputRect( aZeroPoint, aOutputSize );
01043
01044
01045
01046 if (aPrtPageOffset.Y() < 2000)
01047 OutputRect.Top() += 2000 - aPrtPageOffset.Y();
01048 if ((aPrtPaperSize.Height() - (aPrtPageOffset.Y() + OutputRect.Bottom())) < 2000)
01049 OutputRect.Bottom() -= 2000 - (aPrtPaperSize.Height() -
01050 (aPrtPageOffset.Y() + OutputRect.Bottom()));
01051
01052
01053 if (aPrtPageOffset.X() < 2500)
01054 OutputRect.Left() += 2500 - aPrtPageOffset.X();
01055 if ((aPrtPaperSize.Width() - (aPrtPageOffset.X() + OutputRect.Right())) < 1500)
01056 OutputRect.Right() -= 1500 - (aPrtPaperSize.Width() -
01057 (aPrtPageOffset.X() + OutputRect.Right()));
01058
01059 pView->Impl_Print( *pOut, PRINT_SIZE_NORMAL,
01060 Rectangle( OutputRect ), Point() );
01061 }
01062 }
01063 }
01064 }
01065
01066 uno::Reference< uno::XInterface > SAL_CALL SmModel_createInstance(
01067 const uno::Reference< lang::XMultiServiceFactory > & ) throw( uno::Exception )
01068 {
01069 ::vos::OGuard aGuard( Application::GetSolarMutex() );
01070 SmDLL::Init();
01071 SfxObjectShell* pShell = new SmDocShell( SFX_CREATE_MODE_STANDARD );
01072 return uno::Reference< uno::XInterface >( pShell->GetModel() );
01073 }
01074
01075 void SAL_CALL SmModel::setParent( const uno::Reference< uno::XInterface >& xParent)
01076 throw( lang::NoSupportException, uno::RuntimeException )
01077 {
01078 ::vos::OGuard aGuard( Application::GetSolarMutex() );
01079 SfxBaseModel::setParent( xParent );
01080 uno::Reference< lang::XUnoTunnel > xParentTunnel( xParent, uno::UNO_QUERY );
01081 if ( xParentTunnel.is() )
01082 {
01083 SvGlobalName aSfxIdent( SFX_GLOBAL_CLASSID );
01084 SfxObjectShell* pDoc = reinterpret_cast<SfxObjectShell *>(xParentTunnel->getSomething(
01085 uno::Sequence< sal_Int8 >( aSfxIdent.GetByteSequence() ) ) );
01086 if ( pDoc )
01087 GetObjectShell()->OnDocumentPrinterChanged( pDoc->GetDocumentPrinter() );
01088 }
01089 }
01090