diff options
author | Daniel Rentz <dr@openoffice.org> | 2010-08-26 18:37:44 +0200 |
---|---|---|
committer | Daniel Rentz <dr@openoffice.org> | 2010-08-26 18:37:44 +0200 |
commit | 04c272eb8396e58376d2b61baee01c4a95f993b4 (patch) | |
tree | 489606116a897ec3c0186161269670b0e8c66146 /oox/source/ole | |
parent | 4d9f54e9f020c91c7fda048bcf3f7549d58bc2b4 (diff) |
dr77: #i114128# import legacy drawing controls
Diffstat (limited to 'oox/source/ole')
-rwxr-xr-x | oox/source/ole/axbinaryreader.cxx | 7 | ||||
-rw-r--r-- | oox/source/ole/axcontrol.cxx | 240 | ||||
-rw-r--r-- | oox/source/ole/axcontrolfragment.cxx | 6 | ||||
-rw-r--r-- | oox/source/ole/olehelper.cxx | 13 | ||||
-rwxr-xr-x | oox/source/ole/vbaproject.cxx | 85 |
5 files changed, 207 insertions, 144 deletions
diff --git a/oox/source/ole/axbinaryreader.cxx b/oox/source/ole/axbinaryreader.cxx index 68a18932bf42..0c4743be9e31 100755 --- a/oox/source/ole/axbinaryreader.cxx +++ b/oox/source/ole/axbinaryreader.cxx @@ -93,7 +93,8 @@ AxFontData::AxFontData() : mnFontEffects( 0 ), mnFontHeight( 160 ), mnFontCharSet( WINDOWS_CHARSET_DEFAULT ), - mnHorAlign( AX_FONTDATA_LEFT ) + mnHorAlign( AX_FONTDATA_LEFT ), + mbDblUnderline( false ) { } @@ -121,6 +122,7 @@ bool AxFontData::importBinaryModel( BinaryInputStream& rInStrm ) aReader.skipIntProperty< sal_uInt8 >(); // font pitch/family aReader.readIntProperty< sal_uInt8 >( mnHorAlign ); aReader.skipIntProperty< sal_uInt16 >(); // font weight + mbDblUnderline = false; return aReader.finalizeImport(); } @@ -135,6 +137,7 @@ bool AxFontData::importStdFont( BinaryInputStream& rInStrm ) setFlag( mnFontEffects, AX_FONTDATA_ITALIC, getFlag( aFontInfo.mnFlags, OLE_STDFONT_ITALIC ) ); setFlag( mnFontEffects, AX_FONTDATA_UNDERLINE, getFlag( aFontInfo.mnFlags, OLE_STDFONT_UNDERLINE ) ); setFlag( mnFontEffects, AX_FONTDATA_STRIKEOUT, getFlag( aFontInfo.mnFlags,OLE_STDFONT_STRIKE ) ); + mbDblUnderline = false; // StdFont stores font height in 1/10,000 of points setHeightPoints( getLimitedValue< sal_Int16, sal_Int32 >( aFontInfo.mnHeight / 10000, 0, SAL_MAX_INT16 ) ); mnFontCharSet = aFontInfo.mnCharSet; @@ -147,7 +150,7 @@ bool AxFontData::importStdFont( BinaryInputStream& rInStrm ) bool AxFontData::importGuidAndFont( BinaryInputStream& rInStrm ) { OUString aGuid = OleHelper::importGuid( rInStrm ); - if( aGuid.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "{AFC20920-DA4E-11CE-B943-00AA006887B4}" ) ) ) + if( aGuid.equalsAscii( AX_GUID_CFONT ) ) return importBinaryModel( rInStrm ); if( aGuid.equalsAscii( OLE_GUID_STDFONT ) ) return importStdFont( rInStrm ); diff --git a/oox/source/ole/axcontrol.cxx b/oox/source/ole/axcontrol.cxx index 73da2edea7d1..a0d3d7340f57 100644 --- a/oox/source/ole/axcontrol.cxx +++ b/oox/source/ole/axcontrol.cxx @@ -76,6 +76,7 @@ using namespace ::com::sun::star::form::binding; using namespace ::com::sun::star::frame; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::sheet; +using namespace ::com::sun::star::style; using namespace ::com::sun::star::table; using namespace ::com::sun::star::uno; @@ -108,28 +109,6 @@ const sal_uInt32 COMCTL_ID_PROGRESSBAR_60 = 0x97AB8A01; // ---------------------------------------------------------------------------- -const sal_uInt32 AX_FLAGS_ENABLED = 0x00000002; -const sal_uInt32 AX_FLAGS_LOCKED = 0x00000004; -const sal_uInt32 AX_FLAGS_OPAQUE = 0x00000008; -const sal_uInt32 AX_FLAGS_COLUMNHEADS = 0x00000400; -const sal_uInt32 AX_FLAGS_ENTIREROWS = 0x00000800; -const sal_uInt32 AX_FLAGS_EXISTINGENTRIES = 0x00001000; -const sal_uInt32 AX_FLAGS_CAPTIONLEFT = 0x00002000; -const sal_uInt32 AX_FLAGS_EDITABLE = 0x00004000; -const sal_uInt32 AX_FLAGS_IMEMODE_MASK = 0x00078000; -const sal_uInt32 AX_FLAGS_DRAGENABLED = 0x00080000; -const sal_uInt32 AX_FLAGS_ENTERASNEWLINE = 0x00100000; -const sal_uInt32 AX_FLAGS_KEEPSELECTION = 0x00200000; -const sal_uInt32 AX_FLAGS_TABASCHARACTER = 0x00400000; -const sal_uInt32 AX_FLAGS_WORDWRAP = 0x00800000; -const sal_uInt32 AX_FLAGS_BORDERSSUPPRESSED = 0x02000000; -const sal_uInt32 AX_FLAGS_SELECTLINE = 0x04000000; -const sal_uInt32 AX_FLAGS_SINGLECHARSELECT = 0x08000000; -const sal_uInt32 AX_FLAGS_AUTOSIZE = 0x10000000; -const sal_uInt32 AX_FLAGS_HIDESELECTION = 0x20000000; -const sal_uInt32 AX_FLAGS_MAXLENAUTOTAB = 0x40000000; -const sal_uInt32 AX_FLAGS_MULTILINE = 0x80000000; - const sal_uInt32 AX_CMDBUTTON_DEFFLAGS = 0x0000001B; const sal_uInt32 AX_LABEL_DEFFLAGS = 0x0080001B; const sal_uInt32 AX_IMAGE_DEFFLAGS = 0x0000001B; @@ -164,30 +143,10 @@ const sal_uInt32 AX_PICPOS_BELOWRIGHT = AX_PICPOS_IMPL( TOPRIGHT, BOTTO const sal_uInt32 AX_PICPOS_CENTER = AX_PICPOS_IMPL( CENTER, CENTER ); #undef AX_PICPOS_IMPL -const sal_Int32 AX_DISPLAYSTYLE_TEXT = 1; -const sal_Int32 AX_DISPLAYSTYLE_LISTBOX = 2; -const sal_Int32 AX_DISPLAYSTYLE_COMBOBOX = 3; -const sal_Int32 AX_DISPLAYSTYLE_CHECKBOX = 4; -const sal_Int32 AX_DISPLAYSTYLE_OPTBUTTON = 5; -const sal_Int32 AX_DISPLAYSTYLE_TOGGLE = 6; -const sal_Int32 AX_DISPLAYSTYLE_DROPDOWN = 7; - -const sal_Int32 AX_SELCTION_SINGLE = 0; -const sal_Int32 AX_SELCTION_MULTI = 1; -const sal_Int32 AX_SELCTION_EXTENDED = 2; - -const sal_Int32 AX_SCROLLBAR_NONE = 0x00; -const sal_Int32 AX_SCROLLBAR_HORIZONTAL = 0x01; -const sal_Int32 AX_SCROLLBAR_VERTICAL = 0x02; - const sal_Int32 AX_MATCHENTRY_FIRSTLETTER = 0; const sal_Int32 AX_MATCHENTRY_COMPLETE = 1; const sal_Int32 AX_MATCHENTRY_NONE = 2; -const sal_Int32 AX_SHOWDROPBUTTON_NEVER = 0; -const sal_Int32 AX_SHOWDROPBUTTON_FOCUS = 1; -const sal_Int32 AX_SHOWDROPBUTTON_ALWAYS = 2; - const sal_Int32 AX_ORIENTATION_AUTO = -1; const sal_Int32 AX_ORIENTATION_VERTICAL = 0; const sal_Int32 AX_ORIENTATION_HORIZONTAL = 1; @@ -333,11 +292,22 @@ void ControlConverter::convertPicture( PropertyMap& rPropMap, const StreamDataSe void ControlConverter::convertOrientation( PropertyMap& rPropMap, bool bHorizontal ) const { - namespace AwtScrollBarOrient = ::com::sun::star::awt::ScrollBarOrientation; - sal_Int32 nScrollOrient = bHorizontal ? AwtScrollBarOrient::HORIZONTAL : AwtScrollBarOrient::VERTICAL; + sal_Int32 nScrollOrient = bHorizontal ? ScrollBarOrientation::HORIZONTAL : ScrollBarOrientation::VERTICAL; rPropMap.setProperty( PROP_Orientation, nScrollOrient ); } +void ControlConverter::convertVerticalAlign( PropertyMap& rPropMap, sal_Int32 nVerticalAlign ) const +{ + VerticalAlignment eAlign = VerticalAlignment_TOP; + switch( nVerticalAlign ) + { + case XML_Top: eAlign = VerticalAlignment_TOP; break; + case XML_Center: eAlign = VerticalAlignment_MIDDLE; break; + case XML_Bottom: eAlign = VerticalAlignment_BOTTOM; break; + } + rPropMap.setProperty( PROP_VerticalAlign, eAlign ); +} + void ControlConverter::convertScrollBar( PropertyMap& rPropMap, sal_Int32 nMin, sal_Int32 nMax, sal_Int32 nPosition, sal_Int32 nSmallChange, sal_Int32 nLargeChange, bool bAwtModel ) const @@ -451,8 +421,7 @@ void ControlConverter::convertAxBorder( PropertyMap& rPropMap, void ControlConverter::convertAxVisualEffect( PropertyMap& rPropMap, sal_Int32 nSpecialEffect ) const { - namespace AwtVisualEffect = ::com::sun::star::awt::VisualEffect; - sal_Int16 nVisualEffect = (nSpecialEffect == AX_SPECIALEFFECT_FLAT) ? AwtVisualEffect::FLAT : AwtVisualEffect::LOOK3D; + sal_Int16 nVisualEffect = (nSpecialEffect == AX_SPECIALEFFECT_FLAT) ? VisualEffect::FLAT : VisualEffect::LOOK3D; rPropMap.setProperty( PROP_VisualEffect, nVisualEffect ); } @@ -462,23 +431,22 @@ void ControlConverter::convertAxPicture( PropertyMap& rPropMap, const StreamData convertPicture( rPropMap, rPicData ); // picture position - namespace AwtImagePos = ::com::sun::star::awt::ImagePosition; - sal_Int16 nImagePos = AwtImagePos::LeftCenter; + sal_Int16 nImagePos = ImagePosition::LeftCenter; switch( nPicPos ) { - case AX_PICPOS_LEFTTOP: nImagePos = AwtImagePos::LeftTop; break; - case AX_PICPOS_LEFTCENTER: nImagePos = AwtImagePos::LeftCenter; break; - case AX_PICPOS_LEFTBOTTOM: nImagePos = AwtImagePos::LeftBottom; break; - case AX_PICPOS_RIGHTTOP: nImagePos = AwtImagePos::RightTop; break; - case AX_PICPOS_RIGHTCENTER: nImagePos = AwtImagePos::RightCenter; break; - case AX_PICPOS_RIGHTBOTTOM: nImagePos = AwtImagePos::RightBottom; break; - case AX_PICPOS_ABOVELEFT: nImagePos = AwtImagePos::AboveLeft; break; - case AX_PICPOS_ABOVECENTER: nImagePos = AwtImagePos::AboveCenter; break; - case AX_PICPOS_ABOVERIGHT: nImagePos = AwtImagePos::AboveRight; break; - case AX_PICPOS_BELOWLEFT: nImagePos = AwtImagePos::BelowLeft; break; - case AX_PICPOS_BELOWCENTER: nImagePos = AwtImagePos::BelowCenter; break; - case AX_PICPOS_BELOWRIGHT: nImagePos = AwtImagePos::BelowRight; break; - case AX_PICPOS_CENTER: nImagePos = AwtImagePos::Centered; break; + case AX_PICPOS_LEFTTOP: nImagePos = ImagePosition::LeftTop; break; + case AX_PICPOS_LEFTCENTER: nImagePos = ImagePosition::LeftCenter; break; + case AX_PICPOS_LEFTBOTTOM: nImagePos = ImagePosition::LeftBottom; break; + case AX_PICPOS_RIGHTTOP: nImagePos = ImagePosition::RightTop; break; + case AX_PICPOS_RIGHTCENTER: nImagePos = ImagePosition::RightCenter; break; + case AX_PICPOS_RIGHTBOTTOM: nImagePos = ImagePosition::RightBottom; break; + case AX_PICPOS_ABOVELEFT: nImagePos = ImagePosition::AboveLeft; break; + case AX_PICPOS_ABOVECENTER: nImagePos = ImagePosition::AboveCenter; break; + case AX_PICPOS_ABOVERIGHT: nImagePos = ImagePosition::AboveRight; break; + case AX_PICPOS_BELOWLEFT: nImagePos = ImagePosition::BelowLeft; break; + case AX_PICPOS_BELOWCENTER: nImagePos = ImagePosition::BelowCenter; break; + case AX_PICPOS_BELOWRIGHT: nImagePos = ImagePosition::BelowRight; break; + case AX_PICPOS_CENTER: nImagePos = ImagePosition::Centered; break; default: OSL_ENSURE( false, "ControlConverter::convertAxPicture - unknown picture position" ); } rPropMap.setProperty( PROP_ImagePosition, nImagePos ); @@ -491,13 +459,12 @@ void ControlConverter::convertAxPicture( PropertyMap& rPropMap, const StreamData convertPicture( rPropMap, rPicData ); // picture scale mode - namespace AwtScaleMode = ::com::sun::star::awt::ImageScaleMode; - sal_Int16 nScaleMode = AwtScaleMode::None; + sal_Int16 nScaleMode = ImageScaleMode::None; switch( nPicSizeMode ) { - case AX_PICSIZE_CLIP: nScaleMode = AwtScaleMode::None; break; - case AX_PICSIZE_STRETCH: nScaleMode = AwtScaleMode::Anisotropic; break; - case AX_PICSIZE_ZOOM: nScaleMode = AwtScaleMode::Isotropic; break; + case AX_PICSIZE_CLIP: nScaleMode = ImageScaleMode::None; break; + case AX_PICSIZE_STRETCH: nScaleMode = ImageScaleMode::Anisotropic; break; + case AX_PICSIZE_ZOOM: nScaleMode = ImageScaleMode::Isotropic; break; default: OSL_ENSURE( false, "ControlConverter::convertAxPicture - unknown picture size mode" ); } rPropMap.setProperty( PROP_ScaleMode, nScaleMode ); @@ -565,6 +532,7 @@ OUString ControlModelBase::getServiceName() const case API_CONTROL_CHECKBOX: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlCheckBoxModel" ); case API_CONTROL_RADIOBUTTON: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlRadioButtonModel" ); case API_CONTROL_EDIT: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlEditModel" ); + case API_CONTROL_NUMERIC: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlNumericFieldModel" ); case API_CONTROL_LISTBOX: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlListBoxModel" ); case API_CONTROL_COMBOBOX: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlComboBoxModel" ); case API_CONTROL_SPINBUTTON: return CREATE_OUSTRING( "com.sun.star.awt.UnoControlSpinButtonModel" ); @@ -582,6 +550,7 @@ OUString ControlModelBase::getServiceName() const case API_CONTROL_CHECKBOX: return CREATE_OUSTRING( "com.sun.star.form.component.CheckBox" ); case API_CONTROL_RADIOBUTTON: return CREATE_OUSTRING( "com.sun.star.form.component.RadioButton" ); case API_CONTROL_EDIT: return CREATE_OUSTRING( "com.sun.star.form.component.TextField" ); + case API_CONTROL_NUMERIC: return CREATE_OUSTRING( "com.sun.star.form.component.NumericField" ); case API_CONTROL_LISTBOX: return CREATE_OUSTRING( "com.sun.star.form.component.ListBox" ); case API_CONTROL_COMBOBOX: return CREATE_OUSTRING( "com.sun.star.form.component.ComboBox" ); case API_CONTROL_SPINBUTTON: return CREATE_OUSTRING( "com.sun.star.form.component.SpinButton" ); @@ -662,8 +631,8 @@ sal_uInt32 ComCtlModelBase::getDataPartId() const { switch( mnVersion ) { - case 5: return mnDataPartId5; - case 6: return mnDataPartId6; + case COMCTL_VERSION_50: return mnDataPartId5; + case COMCTL_VERSION_60: return mnDataPartId6; } OSL_ENSURE( false, "ComCtlObjectBase::getDataPartId - unxpected version" ); return SAL_MAX_UINT32; @@ -784,7 +753,7 @@ void ComCtlProgressBarModel::convertProperties( PropertyMap& rPropMap, const Con void ComCtlProgressBarModel::importControlData( BinaryInputStream& rInStrm ) { rInStrm >> mfMin >> mfMax; - if( mnVersion == 6 ) + if( mnVersion == COMCTL_VERSION_60 ) rInStrm >> mnVertical >> mnSmooth; } @@ -840,17 +809,15 @@ bool AxFontDataModel::importBinaryModel( BinaryInputStream& rInStrm ) void AxFontDataModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const { - namespace cssa = ::com::sun::star::awt; - // font name if( maFontData.maFontName.getLength() > 0 ) rPropMap.setProperty( PROP_FontName, maFontData.maFontName ); // font effects - rPropMap.setProperty( PROP_FontWeight, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_BOLD, cssa::FontWeight::BOLD, cssa::FontWeight::NORMAL ) ); - rPropMap.setProperty( PROP_FontSlant, getFlagValue< sal_Int16 >( maFontData.mnFontEffects, AX_FONTDATA_ITALIC, cssa::FontSlant_ITALIC, cssa::FontSlant_NONE ) ); - rPropMap.setProperty( PROP_FontUnderline, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_UNDERLINE, cssa::FontUnderline::SINGLE, cssa::FontUnderline::NONE ) ); - rPropMap.setProperty( PROP_FontStrikeout, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_STRIKEOUT, cssa::FontStrikeout::SINGLE, cssa::FontStrikeout::NONE ) ); + rPropMap.setProperty( PROP_FontWeight, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_BOLD, FontWeight::BOLD, FontWeight::NORMAL ) ); + rPropMap.setProperty( PROP_FontSlant, getFlagValue< sal_Int16 >( maFontData.mnFontEffects, AX_FONTDATA_ITALIC, FontSlant_ITALIC, FontSlant_NONE ) ); + rPropMap.setProperty( PROP_FontUnderline, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_UNDERLINE, maFontData.mbDblUnderline ? FontUnderline::DOUBLE : FontUnderline::SINGLE, FontUnderline::NONE ) ); + rPropMap.setProperty( PROP_FontStrikeout, getFlagValue( maFontData.mnFontEffects, AX_FONTDATA_STRIKEOUT, FontStrikeout::SINGLE, FontStrikeout::NONE ) ); rPropMap.setProperty( PROP_FontHeight, maFontData.getHeightPoints() ); // font character set @@ -863,12 +830,12 @@ void AxFontDataModel::convertProperties( PropertyMap& rPropMap, const ControlCon // text alignment if( mbSupportsAlign ) { - sal_Int32 nAlign = cssa::TextAlign::LEFT; + sal_Int32 nAlign = TextAlign::LEFT; switch( maFontData.mnHorAlign ) { - case AX_FONTDATA_LEFT: nAlign = cssa::TextAlign::LEFT; break; - case AX_FONTDATA_RIGHT: nAlign = cssa::TextAlign::RIGHT; break; - case AX_FONTDATA_CENTER: nAlign = cssa::TextAlign::CENTER; break; + case AX_FONTDATA_LEFT: nAlign = TextAlign::LEFT; break; + case AX_FONTDATA_RIGHT: nAlign = TextAlign::RIGHT; break; + case AX_FONTDATA_CENTER: nAlign = TextAlign::CENTER; break; default: OSL_ENSURE( false, "AxFontDataModel::convertProperties - unknown text alignment" ); } // form controls expect short value @@ -886,6 +853,7 @@ AxCommandButtonModel::AxCommandButtonModel() : mnBackColor( AX_SYSCOLOR_BUTTONFACE ), mnFlags( AX_CMDBUTTON_DEFFLAGS ), mnPicturePos( AX_PICPOS_ABOVECENTER ), + mnVerticalAlign( XML_Center ), mbFocusOnClick( true ) { } @@ -941,8 +909,8 @@ void AxCommandButtonModel::convertProperties( PropertyMap& rPropMap, const Contr rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) ); rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) ); rPropMap.setProperty( PROP_FocusOnClick, mbFocusOnClick ); - rPropMap.setProperty( PROP_VerticalAlign, ::com::sun::star::style::VerticalAlignment_MIDDLE ); rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor ); + rConv.convertVerticalAlign( rPropMap, mnVerticalAlign ); rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_NOTSUPPORTED ); rConv.convertAxPicture( rPropMap, maPictureData, mnPicturePos ); AxFontDataModel::convertProperties( rPropMap, rConv ); @@ -956,7 +924,8 @@ AxLabelModel::AxLabelModel() : mnFlags( AX_LABEL_DEFFLAGS ), mnBorderColor( AX_SYSCOLOR_WINDOWFRAME ), mnBorderStyle( AX_BORDERSTYLE_NONE ), - mnSpecialEffect( AX_SPECIALEFFECT_FLAT ) + mnSpecialEffect( AX_SPECIALEFFECT_FLAT ), + mnVerticalAlign( XML_Top ) { } @@ -1004,8 +973,8 @@ void AxLabelModel::convertProperties( PropertyMap& rPropMap, const ControlConver rPropMap.setProperty( PROP_Label, maCaption ); rPropMap.setProperty( PROP_Enabled, getFlag( mnFlags, AX_FLAGS_ENABLED ) ); rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) ); - rPropMap.setProperty( PROP_VerticalAlign, ::com::sun::star::style::VerticalAlignment_TOP ); rConv.convertColor( rPropMap, PROP_TextColor, mnTextColor ); + rConv.convertVerticalAlign( rPropMap, mnVerticalAlign ); rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID ); rConv.convertAxBorder( rPropMap, mnBorderColor, mnBorderStyle, mnSpecialEffect ); AxFontDataModel::convertProperties( rPropMap, rConv ); @@ -1102,7 +1071,8 @@ AxMorphDataModelBase::AxMorphDataModelBase() : mnShowDropButton( AX_SHOWDROPBUTTON_NEVER ), mnMaxLength( 0 ), mnPasswordChar( 0 ), - mnListRows( 8 ) + mnListRows( 8 ), + mnVerticalAlign( XML_Center ) { } @@ -1191,6 +1161,7 @@ void AxMorphDataModelBase::convertProperties( PropertyMap& rPropMap, const Contr AxToggleButtonModel::AxToggleButtonModel() { + mnDisplayStyle = AX_DISPLAYSTYLE_TOGGLE; } ApiControlType AxToggleButtonModel::getControlType() const @@ -1203,8 +1174,8 @@ void AxToggleButtonModel::convertProperties( PropertyMap& rPropMap, const Contro { rPropMap.setProperty( PROP_Label, maCaption ); rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) ); - rPropMap.setProperty( PROP_VerticalAlign, ::com::sun::star::style::VerticalAlignment_MIDDLE ); rPropMap.setProperty( PROP_Toggle, true ); + rConv.convertVerticalAlign( rPropMap, mnVerticalAlign ); rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_NOTSUPPORTED ); rConv.convertAxPicture( rPropMap, maPictureData, mnPicturePos ); rConv.convertAxState( rPropMap, maValue, mnMultiSelect, API_DEFAULTSTATE_BOOLEAN, mbAwtModel ); @@ -1215,6 +1186,7 @@ void AxToggleButtonModel::convertProperties( PropertyMap& rPropMap, const Contro AxCheckBoxModel::AxCheckBoxModel() { + mnDisplayStyle = AX_DISPLAYSTYLE_CHECKBOX; } ApiControlType AxCheckBoxModel::getControlType() const @@ -1227,7 +1199,7 @@ void AxCheckBoxModel::convertProperties( PropertyMap& rPropMap, const ControlCon { rPropMap.setProperty( PROP_Label, maCaption ); rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) ); - rPropMap.setProperty( PROP_VerticalAlign, ::com::sun::star::style::VerticalAlignment_MIDDLE ); + rConv.convertVerticalAlign( rPropMap, mnVerticalAlign ); rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID ); rConv.convertAxVisualEffect( rPropMap, mnSpecialEffect ); rConv.convertAxPicture( rPropMap, maPictureData, mnPicturePos ); @@ -1239,6 +1211,7 @@ void AxCheckBoxModel::convertProperties( PropertyMap& rPropMap, const ControlCon AxOptionButtonModel::AxOptionButtonModel() { + mnDisplayStyle = AX_DISPLAYSTYLE_OPTBUTTON; } ApiControlType AxOptionButtonModel::getControlType() const @@ -1251,7 +1224,7 @@ void AxOptionButtonModel::convertProperties( PropertyMap& rPropMap, const Contro { rPropMap.setProperty( PROP_Label, maCaption ); rPropMap.setProperty( PROP_MultiLine, getFlag( mnFlags, AX_FLAGS_WORDWRAP ) ); - rPropMap.setProperty( PROP_VerticalAlign, ::com::sun::star::style::VerticalAlignment_MIDDLE ); + rConv.convertVerticalAlign( rPropMap, mnVerticalAlign ); rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID ); rConv.convertAxVisualEffect( rPropMap, mnSpecialEffect ); rConv.convertAxPicture( rPropMap, maPictureData, mnPicturePos ); @@ -1263,6 +1236,7 @@ void AxOptionButtonModel::convertProperties( PropertyMap& rPropMap, const Contro AxTextBoxModel::AxTextBoxModel() { + mnDisplayStyle = AX_DISPLAYSTYLE_TEXT; } ApiControlType AxTextBoxModel::getControlType() const @@ -1288,8 +1262,34 @@ void AxTextBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConv // ============================================================================ +AxNumericFieldModel::AxNumericFieldModel() +{ + mnDisplayStyle = AX_DISPLAYSTYLE_TEXT; +} + +ApiControlType AxNumericFieldModel::getControlType() const +{ + OSL_ENSURE( mnDisplayStyle == AX_DISPLAYSTYLE_TEXT, "AxNumericFieldModel::getControlType - invalid control type" ); + return API_CONTROL_NUMERIC; +} + +void AxNumericFieldModel::convertProperties( PropertyMap& rPropMap, const ControlConverter& rConv ) const +{ + rPropMap.setProperty( PROP_HideInactiveSelection, getFlag( mnFlags, AX_FLAGS_HIDESELECTION ) ); + // TODO: OUString::toDouble() does not handle local decimal separator + rPropMap.setProperty( mbAwtModel ? PROP_Value : PROP_DefaultValue, maValue.toDouble() ); + rPropMap.setProperty( PROP_Spin, getFlag( mnScrollBars, AX_SCROLLBAR_VERTICAL ) ); + rPropMap.setProperty( PROP_Repeat, true ); + rConv.convertAxBackground( rPropMap, mnBackColor, mnFlags, API_TRANSPARENCY_VOID ); + rConv.convertAxBorder( rPropMap, mnBorderColor, mnBorderStyle, mnSpecialEffect ); + AxMorphDataModelBase::convertProperties( rPropMap, rConv ); +} + +// ============================================================================ + AxListBoxModel::AxListBoxModel() { + mnDisplayStyle = AX_DISPLAYSTYLE_LISTBOX; } ApiControlType AxListBoxModel::getControlType() const @@ -1312,6 +1312,7 @@ void AxListBoxModel::convertProperties( PropertyMap& rPropMap, const ControlConv AxComboBoxModel::AxComboBoxModel() { + mnDisplayStyle = AX_DISPLAYSTYLE_COMBOBOX; } ApiControlType AxComboBoxModel::getControlType() const @@ -1500,7 +1501,7 @@ void AxScrollBarModel::convertProperties( PropertyMap& rPropMap, const ControlCo // ============================================================================ AxTabStripModel::AxTabStripModel() : - AxFontDataModel( false ), // no support for Align property + AxFontDataModel( false ), // no support for alignment properties mnBackColor( AX_SYSCOLOR_BUTTONFACE ), mnTextColor( AX_SYSCOLOR_BUTTONTEXT ), mnFlags( AX_TABSTRIP_DEFFLAGS ), @@ -1562,7 +1563,7 @@ OUString AxTabStripModel::getCaption( sal_Int32 nIndex ) const // ============================================================================ AxContainerModelBase::AxContainerModelBase( bool bFontSupport ) : - AxFontDataModel( false ), // no support for Align property + AxFontDataModel( false ), // no support for alignment properties maLogicalSize( AX_CONTAINER_DEFWIDTH, AX_CONTAINER_DEFHEIGHT ), maScrollPos( 0, 0 ), mnBackColor( AX_SYSCOLOR_BUTTONFACE ), @@ -1755,43 +1756,26 @@ EmbeddedControl::~EmbeddedControl() { } -ControlModelRef EmbeddedControl::createModel( const OUString& rClassId ) +ControlModelBase* EmbeddedControl::createModelFromGuid( const OUString& rClassId ) { OUString aClassId = rClassId.toAsciiUpperCase(); - if( aClassId.equalsAscii( AX_GUID_COMMANDBUTTON ) ) - mxModel.reset( new AxCommandButtonModel ); - else if( aClassId.equalsAscii( AX_GUID_LABEL ) ) - mxModel.reset( new AxLabelModel ); - else if( aClassId.equalsAscii( AX_GUID_IMAGE ) ) - mxModel.reset( new AxImageModel ); - else if( aClassId.equalsAscii( AX_GUID_TOGGLEBUTTON ) ) - mxModel.reset( new AxToggleButtonModel ); - else if( aClassId.equalsAscii( AX_GUID_CHECKBOX ) ) - mxModel.reset( new AxCheckBoxModel ); - else if( aClassId.equalsAscii( AX_GUID_OPTIONBUTTON ) ) - mxModel.reset( new AxOptionButtonModel ); - else if( aClassId.equalsAscii( AX_GUID_TEXTBOX ) ) - mxModel.reset( new AxTextBoxModel ); - else if( aClassId.equalsAscii( AX_GUID_LISTBOX ) ) - mxModel.reset( new AxListBoxModel ); - else if( aClassId.equalsAscii( AX_GUID_COMBOBOX ) ) - mxModel.reset( new AxComboBoxModel ); - else if( aClassId.equalsAscii( AX_GUID_SPINBUTTON ) ) - mxModel.reset( new AxSpinButtonModel ); - else if( aClassId.equalsAscii( AX_GUID_SCROLLBAR ) ) - mxModel.reset( new AxScrollBarModel ); - else if( aClassId.equalsAscii( AX_GUID_FRAME ) ) - mxModel.reset( new AxFrameModel ); - else if( aClassId.equalsAscii( COMCTL_GUID_SCROLLBAR_60 ) ) - mxModel.reset( new ComCtlScrollBarModel( 6 ) ); - else - mxModel.reset(); - // embedded controls are form component instances - if( mxModel.get() ) - mxModel->setFormComponentMode(); + if( aClassId.equalsAscii( AX_GUID_COMMANDBUTTON ) ) return &createModel< AxCommandButtonModel >(); + if( aClassId.equalsAscii( AX_GUID_LABEL ) ) return &createModel< AxLabelModel >(); + if( aClassId.equalsAscii( AX_GUID_IMAGE ) ) return &createModel< AxImageModel >(); + if( aClassId.equalsAscii( AX_GUID_TOGGLEBUTTON ) ) return &createModel< AxToggleButtonModel >(); + if( aClassId.equalsAscii( AX_GUID_CHECKBOX ) ) return &createModel< AxCheckBoxModel >(); + if( aClassId.equalsAscii( AX_GUID_OPTIONBUTTON ) ) return &createModel< AxOptionButtonModel >(); + if( aClassId.equalsAscii( AX_GUID_TEXTBOX ) ) return &createModel< AxTextBoxModel >(); + if( aClassId.equalsAscii( AX_GUID_LISTBOX ) ) return &createModel< AxListBoxModel >(); + if( aClassId.equalsAscii( AX_GUID_COMBOBOX ) ) return &createModel< AxComboBoxModel >(); + if( aClassId.equalsAscii( AX_GUID_SPINBUTTON ) ) return &createModel< AxSpinButtonModel >(); + if( aClassId.equalsAscii( AX_GUID_SCROLLBAR ) ) return &createModel< AxScrollBarModel >(); + if( aClassId.equalsAscii( AX_GUID_FRAME ) ) return &createModel< AxFrameModel >(); + if( aClassId.equalsAscii( COMCTL_GUID_SCROLLBAR_60 ) ) return &createModel< ComCtlScrollBarModel >( COMCTL_VERSION_60 ); - return mxModel; + mxModel.reset(); + return 0; } OUString EmbeddedControl::getServiceName() const @@ -1817,14 +1801,14 @@ bool EmbeddedControl::convertProperties( const Reference< XControlModel >& rxCtr EmbeddedForm::EmbeddedForm( const Reference< XModel >& rxDocModel, const Reference< XDrawPage >& rxDrawPage, const GraphicHelper& rGraphicHelper, bool bDefaultColorBgr ) : - ControlConverter( rxDocModel, rGraphicHelper, bDefaultColorBgr ), + maControlConv( rxDocModel, rGraphicHelper, bDefaultColorBgr ), mxModelFactory( rxDocModel, UNO_QUERY ), mxFormsSupp( rxDrawPage, UNO_QUERY ) { OSL_ENSURE( mxModelFactory.is(), "EmbeddedForm::EmbeddedForm - missing service factory" ); } -Reference< XControlModel > EmbeddedForm::convertAndInsert( const EmbeddedControl& rControl ) +Reference< XControlModel > EmbeddedForm::convertAndInsert( const EmbeddedControl& rControl, sal_Int32& rnCtrlIndex ) { if( mxModelFactory.is() && rControl.hasModel() ) try { @@ -1834,12 +1818,12 @@ Reference< XControlModel > EmbeddedForm::convertAndInsert( const EmbeddedControl Reference< XControlModel > xCtrlModel( xFormComp, UNO_QUERY_THROW ); // insert the control into the form - Reference< XIndexContainer > xFormIC( createForm(), UNO_SET_THROW ); - sal_Int32 nNewIndex = xFormIC->getCount(); - xFormIC->insertByIndex( nNewIndex, Any( xFormComp ) ); + Reference< XIndexContainer > xFormIC( createXForm(), UNO_SET_THROW ); + rnCtrlIndex = xFormIC->getCount(); + xFormIC->insertByIndex( rnCtrlIndex, Any( xFormComp ) ); // convert the control properties - if( rControl.convertProperties( xCtrlModel, *this ) ) + if( rControl.convertProperties( xCtrlModel, maControlConv ) ) return xCtrlModel; } catch( Exception& ) @@ -1848,7 +1832,7 @@ Reference< XControlModel > EmbeddedForm::convertAndInsert( const EmbeddedControl return Reference< XControlModel >(); } -Reference< XIndexContainer > EmbeddedForm::createForm() +Reference< XIndexContainer > EmbeddedForm::createXForm() { if( mxFormsSupp.is() ) { diff --git a/oox/source/ole/axcontrolfragment.cxx b/oox/source/ole/axcontrolfragment.cxx index ecd782da2cb0..b57807a41df6 100644 --- a/oox/source/ole/axcontrolfragment.cxx +++ b/oox/source/ole/axcontrolfragment.cxx @@ -105,7 +105,7 @@ ContextHandlerRef AxControlFragment::onCreateContext( sal_Int32 nElement, const switch( rAttribs.getToken( AX_TOKEN( persistence ), XML_TOKEN_INVALID ) ) { case XML_persistPropertyBag: - if( ControlModelBase* pModel = mrControl.createModel( aClassId ).get() ) + if( ControlModelBase* pModel = mrControl.createModelFromGuid( aClassId ) ) return new AxControlPropertyContext( *this, *pModel ); break; @@ -121,7 +121,7 @@ ContextHandlerRef AxControlFragment::onCreateContext( sal_Int32 nElement, const OUString aStrmClassId = OleHelper::importGuid( aInStrm ); OSL_ENSURE( aClassId.equalsIgnoreAsciiCase( aStrmClassId ), "AxControlFragment::importBinaryControl - form control class ID mismatch" ); - if( ControlModelBase* pModel = mrControl.createModel( aStrmClassId ).get() ) + if( ControlModelBase* pModel = mrControl.createModelFromGuid( aStrmClassId ) ) pModel->importBinaryModel( aInStrm ); } } @@ -139,7 +139,7 @@ ContextHandlerRef AxControlFragment::onCreateContext( sal_Int32 nElement, const OleStorage aStorage( getFilter().getGlobalFactory(), xStrgStrm, false ); BinaryXInputStream aInStrm( aStorage.openInputStream( CREATE_OUSTRING( "f" ) ), true ); if( !aInStrm.isEof() ) - if( AxContainerModelBase* pModel = dynamic_cast< AxContainerModelBase* >( mrControl.createModel( aClassId ).get() ) ) + if( AxContainerModelBase* pModel = dynamic_cast< AxContainerModelBase* >( mrControl.createModelFromGuid( aClassId ) ) ) pModel->importBinaryModel( aInStrm ); } } diff --git a/oox/source/ole/olehelper.cxx b/oox/source/ole/olehelper.cxx index 0a0796e15a7e..8952350c8589 100644 --- a/oox/source/ole/olehelper.cxx +++ b/oox/source/ole/olehelper.cxx @@ -51,10 +51,16 @@ const sal_uInt32 OLE_PALETTECOLOR_MASK = 0x0000FFFF; const sal_uInt32 OLE_BGRCOLOR_MASK = 0x00FFFFFF; const sal_uInt32 OLE_SYSTEMCOLOR_MASK = 0x0000FFFF; +/** Swaps the red and blue component of the passed color. */ +inline sal_uInt32 lclSwapRedBlue( sal_uInt32 nColor ) +{ + return static_cast< sal_uInt32 >( (nColor & 0xFF00FF00) | ((nColor & 0x0000FF) << 16) | ((nColor & 0xFF0000) >> 16) ); +} + /** Returns the UNO RGB color from the passed encoded OLE BGR color. */ inline sal_Int32 lclDecodeBgrColor( sal_uInt32 nOleColor ) { - return static_cast< sal_Int32 >( ((nOleColor & 0x0000FF) << 16) | (nOleColor & 0x00FF00) | ((nOleColor & 0xFF0000) >> 16) ); + return static_cast< sal_Int32 >( lclSwapRedBlue( nOleColor ) & 0xFFFFFF ); } // ---------------------------------------------------------------------------- @@ -161,6 +167,11 @@ StdFontInfo::StdFontInfo( const ::rtl::OUString& rName, sal_uInt32 nHeight, return API_RGB_BLACK; } +/*static*/ sal_uInt32 OleHelper::encodeOleColor( sal_Int32 nRgbColor ) +{ + return OLE_COLORTYPE_BGR | lclSwapRedBlue( static_cast< sal_uInt32 >( nRgbColor & 0xFFFFFF ) ); +} + /*static*/ OUString OleHelper::importGuid( BinaryInputStream& rInStrm ) { OUStringBuffer aBuffer; diff --git a/oox/source/ole/vbaproject.cxx b/oox/source/ole/vbaproject.cxx index fbc5306763a6..39306040fd66 100755 --- a/oox/source/ole/vbaproject.cxx +++ b/oox/source/ole/vbaproject.cxx @@ -31,10 +31,12 @@ #include <com/sun/star/document/XStorageBasedDocument.hpp> #include <com/sun/star/embed/ElementModes.hpp> #include <com/sun/star/embed/XTransactedObject.hpp> +#include <com/sun/star/frame/XModel.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> #include <com/sun/star/script/ModuleType.hpp> #include <com/sun/star/script/XLibraryContainer.hpp> #include <com/sun/star/script/XVBACompat.hpp> +#include <com/sun/star/script/vba/XVBAMacroResolver.hpp> #include <comphelper/configurationhelper.hxx> #include <comphelper/string.hxx> #include <rtl/tencinfo.h> @@ -63,6 +65,7 @@ using namespace ::com::sun::star::frame; using namespace ::com::sun::star::io; using namespace ::com::sun::star::lang; using namespace ::com::sun::star::script; +using namespace ::com::sun::star::script::vba; using namespace ::com::sun::star::uno; using ::comphelper::ConfigurationHelper; @@ -127,12 +130,35 @@ bool VbaFilterConfig::isExportVba() const // ============================================================================ +VbaMacroAttacherBase::VbaMacroAttacherBase( const OUString& rMacroName ) : + maMacroName( rMacroName ) +{ + OSL_ENSURE( maMacroName.getLength() > 0, "VbaMacroAttacherBase::VbaMacroAttacherBase - empty macro name" ); +} + +VbaMacroAttacherBase::~VbaMacroAttacherBase() +{ +} + +void VbaMacroAttacherBase::resolveAndAttachMacro( const Reference< XVBAMacroResolver >& rxResolver ) +{ + try + { + attachMacro( rxResolver->resolveVBAMacroToScriptURL( maMacroName ) ); + } + catch( Exception& ) + { + } +} + +// ============================================================================ + VbaProject::VbaProject( const Reference< XMultiServiceFactory >& rxGlobalFactory, const Reference< XModel >& rxDocModel, const OUString& rConfigCompName ) : VbaFilterConfig( rxGlobalFactory, rConfigCompName ), mxGlobalFactory( rxGlobalFactory ), mxDocModel( rxDocModel ), - maLibName( CREATE_OUSTRING( "Standard" ) ) + maPrjName( CREATE_OUSTRING( "Standard" ) ) { OSL_ENSURE( mxDocModel.is(), "VbaProject::VbaProject - missing document model" ); mxBasicLib = openLibrary( PROP_BasicLibraries, false ); @@ -156,6 +182,12 @@ void VbaProject::importVbaProject( StorageBase& rVbaPrjStrg, const GraphicHelper } } +void VbaProject::registerMacroAttacher( const VbaMacroAttacherRef& rxAttacher ) +{ + OSL_ENSURE( rxAttacher.get(), "VbaProject::registerMacroAttacher - unexpected empty reference" ); + maMacroAttachers.push_back( rxAttacher ); +} + bool VbaProject::hasModules() const { return mxBasicLib.is() && mxBasicLib->hasElements(); @@ -200,7 +232,7 @@ bool VbaProject::attachMacroToEvent( const Reference< XEventsSupplier >& rxEvent // check that the specified macro exists in the module VbaHelper::hasMacro( mxBasicLib, rModuleName, rMacroName ) && // attach the macro to the events supplier - VbaHelper::attachMacroToEvent( rxEventsSupp, rEventName, maLibName, rModuleName, rMacroName ); + VbaHelper::attachMacroToEvent( rxEventsSupp, rEventName, CREATE_OUSTRING( "Standard" ) /*maPrjName*/, rModuleName, rMacroName ); } bool VbaProject::attachMacroToDocumentEvent( const OUString& rEventName, @@ -227,7 +259,7 @@ bool VbaProject::attachMacroToEvent( const Reference< XEventsSupplier >& rxEvent // insert the new macro into the code module and attach it to the event return VbaHelper::insertMacro( mxBasicLib, rModuleName, aProxyName, rProxyArgs, rProxyType, aProxyCode ) && - VbaHelper::attachMacroToEvent( rxEventsSupp, rEventName, maLibName, rModuleName, aProxyName ); + VbaHelper::attachMacroToEvent( rxEventsSupp, rEventName, CREATE_OUSTRING( "Standard" ) /*maPrjName*/, rModuleName, aProxyName ); } return false; } @@ -248,7 +280,11 @@ void VbaProject::addDummyModule( const OUString& rName, sal_Int32 nType ) maDummyModules[ rName ] = nType; } -void VbaProject::prepareModuleImport() +void VbaProject::prepareImport() +{ +} + +void VbaProject::finalizeImport() { } @@ -267,9 +303,9 @@ Reference< XNameContainer > VbaProject::openLibrary( sal_Int32 nPropId, bool bCr try { Reference< XLibraryContainer > xLibContainer( getLibraryContainer( nPropId ), UNO_SET_THROW ); - if( bCreateMissing && !xLibContainer->hasByName( maLibName ) ) - xLibContainer->createLibrary( maLibName ); - xLibrary.set( xLibContainer->getByName( maLibName ), UNO_QUERY_THROW ); + if( bCreateMissing && !xLibContainer->hasByName( CREATE_OUSTRING( "Standard" ) /*maPrjName*/ ) ) + xLibContainer->createLibrary( CREATE_OUSTRING( "Standard" ) /*maPrjName*/ ); + xLibrary.set( xLibContainer->getByName( CREATE_OUSTRING( "Standard" ) /*maPrjName*/ ), UNO_QUERY_THROW ); } catch( Exception& ) { @@ -311,7 +347,7 @@ void VbaProject::importVba( StorageBase& rVbaPrjStrg, const GraphicHelper& rGrap return; // virtual call, derived classes may do some preparations - prepareModuleImport(); + prepareImport(); // read all records of the directory rtl_TextEncoding eTextEnc = RTL_TEXTENCODING_MS_1252; @@ -341,6 +377,14 @@ void VbaProject::importVba( StorageBase& rVbaPrjStrg, const GraphicHelper& rGrap eTextEnc = eNewTextEnc; } break; + case VBA_ID_PROJECTNAME: + { + OUString aPrjName = aRecStrm.readCharArrayUC( nRecSize, eTextEnc ); + OSL_ENSURE( aPrjName.getLength() > 0, "VbaProject::importVba - invalid project name" ); + if( aPrjName.getLength() > 0 ) + maPrjName = aPrjName; + } + break; case VBA_ID_PROJECTMODULES: OOX_ENSURE_RECORDSIZE( nRecSize == 2 ); OSL_ENSURE( aModules.empty(), "VbaProject::importVba - unexpected PROJECTMODULES record" ); @@ -438,10 +482,10 @@ void VbaProject::importVba( StorageBase& rVbaPrjStrg, const GraphicHelper& rGrap } /* Now it is time to load the source code. All modules will be inserted - into the Basic library of the document specified by the 'maLibName' + into the Basic library of the document specified by the 'maPrjName' member. Do not create the Basic library, if there are no modules specified. */ - if( !aModules.empty() && !aDummyModules.empty() ) try + if( !aModules.empty() || !aDummyModules.empty() ) try { // get the basic library Reference< XNameContainer > xBasicLib( createBasicLibrary(), UNO_SET_THROW ); @@ -516,6 +560,27 @@ void VbaProject::importVba( StorageBase& rVbaPrjStrg, const GraphicHelper& rGrap } } } + + // attach macros to registered objects + attachMacros(); + // virtual call, derived classes may do some more processing + finalizeImport(); +} + +void VbaProject::attachMacros() +{ + if( !maMacroAttachers.empty() ) try + { + Sequence< Any > aArgs( 2 ); + aArgs[ 0 ] <<= mxDocModel; + aArgs[ 1 ] <<= maPrjName; + Reference< XVBAMacroResolver > xResolver( mxGlobalFactory->createInstanceWithArguments( + CREATE_OUSTRING( "com.sun.star.script.vba.VBAMacroResolver" ), aArgs ), UNO_QUERY_THROW ); + maMacroAttachers.forEachMem( &VbaMacroAttacherBase::resolveAndAttachMacro, ::boost::cref( xResolver ) ); + } + catch( Exception& ) + { + } } void VbaProject::copyStorage( StorageBase& rVbaPrjStrg ) |