LCOV - code coverage report
Current view: top level - filter/source/msfilter - mstoolbar.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 319 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 47 0.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  */
       9             : #include <filter/msfilter/mstoolbar.hxx>
      10             : #include <rtl/ustrbuf.hxx>
      11             : #include <stdarg.h>
      12             : #include <com/sun/star/ui/XUIConfigurationPersistence.hpp>
      13             : #include <com/sun/star/ui/XImageManager.hpp>
      14             : #include <com/sun/star/ui/ItemType.hpp>
      15             : #include <com/sun/star/ui/ItemStyle.hpp>
      16             : #include <com/sun/star/frame/XLayoutManager.hpp>
      17             : #include <fstream>
      18             : #include <vcl/dibtools.hxx>
      19             : #include <vcl/graph.hxx>
      20             : #include <vcl/bitmapex.hxx>
      21             : #include <vcl/image.hxx>
      22             : #include <map>
      23             : #include <sfx2/objsh.hxx>
      24             : #include <basic/basmgr.hxx>
      25             : #include <filter/msfilter/msvbahelper.hxx>
      26             : #include <svtools/miscopt.hxx>
      27             : #include <vcl/svapp.hxx>
      28             : #include <vcl/window.hxx>
      29             : 
      30             : using namespace com::sun::star;
      31             : 
      32             : int TBBase::nIndent = 0;
      33             : 
      34           0 : void CustomToolBarImportHelper::ScaleImage( uno::Reference< graphic::XGraphic >& xGraphic, long nNewSize )
      35             : {
      36           0 :     Graphic aGraphic( xGraphic );
      37           0 :     Size aSize = aGraphic.GetSizePixel();
      38           0 :     if ( aSize.Height() && ( aSize.Height() == aSize.Width() ) )
      39             :     {
      40           0 :         Image aImage( xGraphic );
      41           0 :         if ( aSize.Height() != nNewSize )
      42             :         {
      43           0 :             BitmapEx aBitmap = aImage.GetBitmapEx();
      44           0 :             BitmapEx aBitmapex = BitmapEx::AutoScaleBitmap(aBitmap, nNewSize );
      45           0 :             aImage = Image( aBitmapex);
      46           0 :             xGraphic = aImage.GetXGraphic();
      47           0 :         }
      48           0 :     }
      49           0 : }
      50             : 
      51           0 : void CustomToolBarImportHelper::applyIcons()
      52             : {
      53           0 :     for ( std::vector< iconcontrolitem >::iterator it = iconcommands.begin(); it != iconcommands.end(); ++it )
      54             :     {
      55           0 :         uno::Sequence< OUString > commands(1);
      56           0 :         commands[ 0 ] = it->sCommand;
      57           0 :         uno::Sequence< uno::Reference< graphic::XGraphic > > images(1);
      58           0 :         images[ 0 ] = it->image;
      59             : 
      60             :         OSL_TRACE("About to applyIcons for command %s, have image ? %s", OUStringToOString( commands[ 0 ], RTL_TEXTENCODING_UTF8 ).getStr(), images[ 0 ].is() ? "yes" : "no" );
      61           0 :         uno::Reference< ui::XImageManager > xImageManager( getCfgManager()->getImageManager(), uno::UNO_QUERY_THROW );
      62           0 :         sal_uInt16 nColor = ui::ImageType::COLOR_NORMAL;
      63             : 
      64           0 :         vcl::Window* topwin = Application::GetActiveTopWindow();
      65           0 :     if ( topwin != NULL && topwin->GetDisplayBackground().GetColor().IsDark() )
      66           0 :             nColor = css::ui::ImageType::COLOR_HIGHCONTRAST;
      67             : 
      68           0 :         ScaleImage( images[ 0 ], 16 );
      69           0 :         xImageManager->replaceImages( ui::ImageType::SIZE_DEFAULT | nColor,  commands, images );
      70           0 :         ScaleImage( images[ 0 ], 26 );
      71           0 :         xImageManager->replaceImages( ui::ImageType::SIZE_LARGE | nColor,  commands, images );
      72           0 :     }
      73           0 : }
      74             : 
      75           0 : void CustomToolBarImportHelper::addIcon( const uno::Reference< graphic::XGraphic >& xImage, const OUString& sString )
      76             : {
      77           0 :     iconcontrolitem item;
      78           0 :     item.sCommand = sString;
      79           0 :     item.image = xImage;
      80           0 :     iconcommands.push_back( item );
      81           0 : }
      82             : 
      83           0 : CustomToolBarImportHelper::CustomToolBarImportHelper( SfxObjectShell& rDocShell,  const css::uno::Reference< css::ui::XUIConfigurationManager>& rxAppCfgMgr ) : mrDocSh( rDocShell )
      84             : {
      85           0 :     m_xCfgSupp.set( mrDocSh.GetModel(), uno::UNO_QUERY_THROW );
      86           0 :     m_xAppCfgMgr.set( rxAppCfgMgr, uno::UNO_QUERY_THROW );
      87           0 : }
      88             : 
      89             : uno::Reference< ui::XUIConfigurationManager >
      90           0 : CustomToolBarImportHelper::getCfgManager()
      91             : {
      92           0 :     return m_xCfgSupp->getUIConfigurationManager();
      93             : }
      94             : 
      95             : 
      96             : uno::Any
      97           0 : CustomToolBarImportHelper::createCommandFromMacro( const OUString& sCmd )
      98             : {
      99             : //"vnd.sun.star.script:Standard.Module1.Main?language=Basic&location=document"
     100             :     static const char scheme[] = "vnd.sun.star.script:";
     101             :     static const char part2 [] = "?language=Basic&location=document";
     102             :     // create script url
     103           0 :     OUString scriptURL = scheme + sCmd + part2;
     104           0 :     return uno::makeAny( scriptURL );
     105             : }
     106             : 
     107           0 : OUString CustomToolBarImportHelper::MSOCommandToOOCommand( sal_Int16 msoCmd )
     108             : {
     109           0 :     OUString result;
     110           0 :     if ( pMSOCmdConvertor.get() )
     111           0 :         result = pMSOCmdConvertor->MSOCommandToOOCommand( msoCmd );
     112           0 :     return result;
     113             : }
     114             : 
     115           0 : OUString CustomToolBarImportHelper::MSOTCIDToOOCommand( sal_Int16 msoTCID )
     116             : {
     117           0 :     OUString result;
     118           0 :     if ( pMSOCmdConvertor.get() )
     119           0 :         result = pMSOCmdConvertor->MSOTCIDToOOCommand( msoTCID );
     120           0 :     return result;
     121             : }
     122             : 
     123             : bool
     124           0 : CustomToolBarImportHelper::createMenu( const OUString& rName, const uno::Reference< container::XIndexAccess >& xMenuDesc, bool bPersist )
     125             : {
     126           0 :     bool bRes = true;
     127             :     try
     128             :     {
     129           0 :         uno::Reference< ui::XUIConfigurationManager > xCfgManager( getCfgManager() );
     130           0 :         OUString sMenuBar("private:resource/menubar/");
     131           0 :         sMenuBar += rName;
     132           0 :         uno::Reference< container::XIndexContainer > xPopup( xCfgManager->createSettings(), uno::UNO_QUERY_THROW );
     133           0 :         uno::Reference< beans::XPropertySet > xProps( xPopup, uno::UNO_QUERY_THROW );
     134             :         // set name for menubar
     135           0 :         xProps->setPropertyValue("UIName", uno::makeAny( rName ) );
     136           0 :         if ( xPopup.is() )
     137             :         {
     138           0 :             uno::Sequence< beans::PropertyValue > aPopupMenu( 4 );
     139           0 :             aPopupMenu[0].Name = "CommandURL";
     140           0 :             aPopupMenu[0].Value = uno::makeAny( "vnd.openoffice.org:" + rName );
     141           0 :             aPopupMenu[1].Name = "Label";
     142           0 :             aPopupMenu[1].Value <<= rName;
     143           0 :             aPopupMenu[2].Name = "ItemDescriptorContainer";
     144           0 :             aPopupMenu[2].Value = uno::makeAny( xMenuDesc );
     145           0 :             aPopupMenu[3].Name = "Type";
     146           0 :             aPopupMenu[3].Value <<= sal_Int32( 0 );
     147             : 
     148           0 :             xPopup->insertByIndex( xPopup->getCount(), uno::makeAny( aPopupMenu ) );
     149           0 :             if ( bPersist )
     150             :             {
     151           0 :                 xCfgManager->insertSettings( sMenuBar, uno::Reference< container::XIndexAccess >( xPopup, uno::UNO_QUERY ) );
     152           0 :                 uno::Reference< ui::XUIConfigurationPersistence > xPersistence( xCfgManager, uno::UNO_QUERY_THROW );
     153           0 :                 xPersistence->store();
     154           0 :             }
     155           0 :         }
     156             :     }
     157           0 :     catch( const uno::Exception& )
     158             :     {
     159           0 :         bRes = false;
     160             :     }
     161           0 :     return bRes;
     162             : }
     163             : 
     164             : void
     165           0 : TBBase::indent_printf( FILE* fp, const char* format, ... )
     166             : {
     167             :    va_list ap;
     168           0 :    va_start ( ap, format );
     169             : 
     170             :    // indent nIndent spaces
     171           0 :    for ( int i=0; i<nIndent; ++i)
     172           0 :       fprintf(fp," ");
     173             :    // append the rest of the message
     174           0 :    vfprintf( fp, format, ap );
     175           0 :    va_end( ap );
     176           0 : }
     177             : 
     178           0 : TBCHeader::TBCHeader()
     179             :     : bSignature(0x3)
     180             :     , bVersion(0x01)
     181             :     , bFlagsTCR(0)
     182             :     , tct(0x1) // default to Button
     183             :     , tcid(0)
     184             :     , tbct(0)
     185           0 :     , bPriority(0)
     186             : {
     187           0 : }
     188             : 
     189           0 : TBCHeader::~TBCHeader()
     190             : {
     191           0 : }
     192             : 
     193           0 : bool TBCHeader::Read( SvStream &rS )
     194             : {
     195             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     196           0 :     nOffSet = rS.Tell();
     197           0 :     rS.ReadSChar( bSignature ).ReadSChar( bVersion ).ReadUChar( bFlagsTCR ).ReadUChar( tct ).ReadUInt16( tcid ).ReadUInt32( tbct ).ReadUChar( bPriority );
     198             :     //  bit 4 ( from lsb )
     199           0 :     if ( bFlagsTCR & 0x10 )
     200             :     {
     201           0 :         width.reset( new sal_uInt16 );
     202           0 :         height.reset( new sal_uInt16 );
     203           0 :         rS.ReadUInt16( *width ).ReadUInt16( *height );
     204             :     }
     205           0 :     return true;
     206             : }
     207             : 
     208             : #if OSL_DEBUG_LEVEL > 1
     209             : void TBCHeader::Print( FILE* fp )
     210             : {
     211             :     Indent a;
     212             :     indent_printf(fp,"[ 0x%x ] TBCHeader -- dump\n", nOffSet );
     213             :     indent_printf(fp,"  bSignature 0x%x\n", bSignature );
     214             :     indent_printf(fp,"  bVersion 0x%x\n", bVersion );
     215             :     indent_printf(fp,"  bFlagsTCR 0x%x\n", bFlagsTCR );
     216             :     indent_printf(fp,"  tct 0x%x\n", tct );
     217             :     indent_printf(fp,"  tcid 0x%x\n", tcid );
     218             :     indent_printf(fp,"  tbct 0x%x\n", static_cast< unsigned int >( tbct ));
     219             :     indent_printf(fp,"  bPriority 0x%x\n", bPriority );
     220             :     if ( width.get() )
     221             :         indent_printf(fp,"  width 0x%d(0x%x)\n", *width, *width);
     222             :     if ( height.get() )
     223             :         indent_printf(fp,"  height 0x%d(0x%x)\n", *height, *height);
     224             : }
     225             : #endif
     226             : 
     227           0 : TBCData::TBCData( const TBCHeader& Header ) : rHeader( Header )
     228             : {
     229           0 : }
     230             : 
     231           0 : bool TBCData::Read(SvStream &rS)
     232             : {
     233             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     234           0 :     nOffSet = rS.Tell();
     235           0 :     if ( !controlGeneralInfo.Read(rS) /*|| !controlSpecificInfo.Read(rS)*/ )
     236           0 :         return false;
     237           0 :     switch ( rHeader.getTct() )
     238             :     {
     239             :         case 0x01: // (Button control)
     240             :         case 0x10: // (ExpandingGrid control)
     241           0 :             controlSpecificInfo.reset( new TBCBSpecific() );
     242           0 :             break;
     243             :         case 0x0A: // (Popup control)
     244             :         case 0x0C: // (ButtonPopup control)
     245             :         case 0x0D: // (SplitButtonPopup control)
     246             :         case 0x0E: // (SplitButtonMRUPopup control)
     247           0 :             controlSpecificInfo.reset( new TBCMenuSpecific() );
     248           0 :             break;
     249             :         case 0x02: // (Edit control)
     250             :         case 0x04: // (ComboBox control)
     251             :         case 0x14: // (GraphicCombo control)
     252             :         case 0x03: // (DropDown control)
     253             :         case 0x06: // (SplitDropDown control)
     254             :         case 0x09: // (GraphicDropDown control)
     255           0 :             controlSpecificInfo.reset( new TBCComboDropdownSpecific( rHeader ) );
     256           0 :             break;
     257             :         default:
     258           0 :             break;
     259             :     }
     260           0 :     if ( controlSpecificInfo.get() )
     261           0 :         return controlSpecificInfo->Read( rS );
     262             :     //#FIXME I need to be able to handle different controlSpecificInfo types.
     263           0 :     return true;
     264             : }
     265             : 
     266           0 : TBCMenuSpecific* TBCData::getMenuSpecific()
     267             : {
     268           0 :     TBCMenuSpecific* pMenu = dynamic_cast< TBCMenuSpecific* >( controlSpecificInfo.get() );
     269           0 :     return pMenu;
     270             : }
     271           0 : bool TBCData::ImportToolBarControl( CustomToolBarImportHelper& helper, std::vector< css::beans::PropertyValue >& props, bool& bBeginGroup, bool bIsMenuBar )
     272             : {
     273           0 :     sal_uInt16  nStyle = 0;
     274           0 :     bBeginGroup = rHeader.isBeginGroup();
     275           0 :     controlGeneralInfo.ImportToolBarControlData( helper, props );
     276           0 :     beans::PropertyValue aProp;
     277           0 :     aProp.Name = "Visible";
     278           0 :     aProp.Value = uno::makeAny( rHeader.isVisible() ); // where is the visible attribute stored
     279           0 :     props.push_back( aProp );
     280           0 :     if ( rHeader.getTct() == 0x01
     281           0 :     || rHeader.getTct() == 0x10 )
     282             :     {
     283           0 :         TBCBSpecific* pSpecificInfo = dynamic_cast< TBCBSpecific* >( controlSpecificInfo.get() );
     284           0 :         if ( pSpecificInfo )
     285             :         {
     286             :             // if we have a icon then lets  set it for the command
     287           0 :             OUString sCommand;
     288           0 :             for ( std::vector< css::beans::PropertyValue >::iterator it = props.begin(); it != props.end(); ++it )
     289             :             {
     290           0 :                 if ( it->Name == "CommandURL" )
     291           0 :                     it->Value >>= sCommand;
     292             :             }
     293           0 :             if ( TBCBitMap* pIcon = pSpecificInfo->getIcon() )
     294             :             {
     295             :                 // Without a command openoffice won't display the icon
     296           0 :                 if ( !sCommand.isEmpty() )
     297             :                 {
     298           0 :                     BitmapEx aBitEx( pIcon->getBitMap() );
     299           0 :                     if ( pSpecificInfo->getIconMask() )
     300             :                          // according to the spec:
     301             :                          // "the iconMask is white in all the areas in which the icon is
     302             :                          // displayed as transparent and is black in all other areas."
     303           0 :                          aBitEx = BitmapEx( aBitEx.GetBitmap(), pSpecificInfo->getIconMask()->getBitMap().CreateMask( Color( COL_WHITE ) ) );
     304             : 
     305           0 :                     Graphic aGraphic( aBitEx );
     306           0 :                     helper.addIcon( aGraphic.GetXGraphic(), sCommand );
     307             :                 }
     308             :             }
     309           0 :             else if ( pSpecificInfo->getBtnFace() )
     310             :             {
     311             : 
     312           0 :                 OUString sBuiltInCmd = helper.MSOTCIDToOOCommand(  *pSpecificInfo->getBtnFace() );
     313           0 :                 if ( !sBuiltInCmd.isEmpty() )
     314             :                 {
     315           0 :                     uno::Sequence< OUString> sCmds(1);
     316           0 :                     sCmds[ 0 ] = sBuiltInCmd;
     317           0 :                     uno::Reference< ui::XImageManager > xImageManager( helper.getAppCfgManager()->getImageManager(), uno::UNO_QUERY_THROW );
     318             :                     // 0 = default image size
     319           0 :                     uno::Sequence< uno::Reference< graphic::XGraphic > > sImages = xImageManager->getImages( 0, sCmds );
     320           0 :                     if ( sImages.getLength() && sImages[0].is() )
     321           0 :                         helper.addIcon( sImages[0], sCommand );
     322           0 :                 }
     323           0 :             }
     324             :         }
     325             :     }
     326           0 :     else if ( rHeader.getTct() == 0x0a )
     327             :     {
     328           0 :         aProp.Name = "CommandURL";
     329           0 :         OUString sMenuBar("private:resource/menubar/");
     330             : 
     331           0 :         TBCMenuSpecific* pMenu = getMenuSpecific();
     332           0 :         if ( pMenu )
     333           0 :             aProp.Value = uno::makeAny( sMenuBar += pMenu->Name() ); // name of popup
     334           0 :         nStyle |= ui::ItemStyle::DROP_DOWN;
     335           0 :         props.push_back( aProp );
     336             :     }
     337             : 
     338           0 :     short icontext =  ( rHeader.getTbct() & 0x03 );
     339           0 :     aProp.Name = "Style";
     340           0 :     if ( bIsMenuBar )
     341             :     {
     342           0 :         nStyle |= ui::ItemStyle::TEXT;
     343           0 :         if ( !icontext || icontext == 0x3 )
     344             :             // Text And image
     345           0 :             nStyle |= ui::ItemStyle::ICON;
     346             :     }
     347             :     else
     348             :     {
     349           0 :         if ( ( icontext & 0x02 ) == 0x02 )
     350           0 :             nStyle |= ui::ItemStyle::TEXT;
     351           0 :         if ( !icontext || ( icontext & 0x03 ) == 0x03 )
     352           0 :             nStyle |= ui::ItemStyle::ICON;
     353             :     }
     354           0 :     aProp.Value <<= nStyle;
     355           0 :     props.push_back( aProp );
     356           0 :     return true; // just ignore
     357             : }
     358             : 
     359             : #if OSL_DEBUG_LEVEL > 1
     360             : void TBCData::Print( FILE* fp )
     361             : {
     362             :     Indent a;
     363             :     indent_printf(fp,"[ 0x%x ] TBCData -- dump\n", nOffSet );
     364             :     indent_printf(fp,"  dumping controlGeneralInfo( TBCGeneralInfo )\n");
     365             :     controlGeneralInfo.Print( fp );
     366             :     //if ( rHeader.getTct() == 1 )
     367             :     if ( controlSpecificInfo.get() )
     368             :     {
     369             :         indent_printf(fp,"  dumping controlSpecificInfo( TBCBSpecificInfo )\n");
     370             :         controlSpecificInfo->Print( fp );
     371             :     }
     372             : }
     373             : #endif
     374             : 
     375             : bool
     376           0 : WString::Read( SvStream &rS )
     377             : {
     378             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     379           0 :     nOffSet = rS.Tell();
     380           0 :     sal_uInt8 nChars = 0;
     381           0 :     rS.ReadUChar( nChars );
     382           0 :     sString = read_uInt16s_ToOUString(rS, nChars);
     383           0 :     return true;
     384             : }
     385             : 
     386           0 : TBCExtraInfo::TBCExtraInfo()
     387             :     : idHelpContext(0)
     388             :     , tbcu(0)
     389           0 :     , tbmg(0)
     390             : {
     391           0 : }
     392             : 
     393             : bool
     394           0 : TBCExtraInfo::Read( SvStream &rS )
     395             : {
     396             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     397           0 :     nOffSet = rS.Tell();
     398           0 :     if( !wstrHelpFile.Read( rS )  )
     399           0 :         return false;
     400             : 
     401           0 :     rS.ReadInt32( idHelpContext );
     402             : 
     403           0 :     if ( !wstrTag.Read( rS ) || !wstrOnAction.Read( rS ) || !wstrParam.Read( rS ) )
     404           0 :         return false;
     405             : 
     406           0 :     rS.ReadSChar( tbcu ).ReadSChar( tbmg );
     407           0 :     return true;
     408             : }
     409             : 
     410             : #if OSL_DEBUG_LEVEL > 1
     411             : void
     412             : TBCExtraInfo::Print( FILE* fp )
     413             : {
     414             :     Indent a;
     415             :     indent_printf( fp, "[ 0x%x ] TBCExtraInfo -- dump\n", nOffSet );
     416             :     indent_printf( fp, "  wstrHelpFile %s\n",
     417             :         OUStringToOString( wstrHelpFile.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     418             :     indent_printf( fp, "  idHelpContext 0x%x\n", static_cast< unsigned int >( idHelpContext ) );
     419             :     indent_printf( fp, "  wstrTag %s\n",
     420             :         OUStringToOString( wstrTag.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     421             :     indent_printf( fp, "  wstrOnAction %s\n",
     422             :         OUStringToOString( wstrOnAction.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     423             :     indent_printf( fp, "  wstrParam %s\n",
     424             :         OUStringToOString( wstrParam.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     425             :     indent_printf( fp, "  tbcu 0x%x\n", tbcu );
     426             :     indent_printf( fp, "  tbmg 0x%x\n", tbmg );
     427             : }
     428             : #endif
     429             : 
     430             : OUString
     431           0 : TBCExtraInfo::getOnAction()
     432             : {
     433           0 :     return wstrOnAction.getString();
     434             : }
     435             : 
     436           0 : TBCGeneralInfo::TBCGeneralInfo() : bFlags( 0 )
     437             : {
     438           0 : }
     439             : 
     440           0 : bool TBCGeneralInfo::Read( SvStream &rS )
     441             : {
     442             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     443           0 :     nOffSet = rS.Tell();
     444           0 :     rS.ReadUChar( bFlags );
     445             : 
     446           0 :     if ( ( bFlags & 0x1 ) && !customText.Read( rS ) )
     447           0 :         return false;
     448           0 :     if ( ( bFlags & 0x2 ) && ( !descriptionText.Read( rS ) ||  !tooltip.Read( rS ) ) )
     449           0 :         return false;
     450           0 :     if ( ( bFlags & 0x4 ) && !extraInfo.Read( rS ) )
     451           0 :         return false;
     452           0 :     return true;
     453             : }
     454             : 
     455             : #if OSL_DEBUG_LEVEL > 1
     456             : void
     457             : TBCGeneralInfo::Print( FILE* fp )
     458             : {
     459             :     Indent a;
     460             :     indent_printf( fp, "[ 0x%x ] TBCGeneralInfo -- dump\n", nOffSet );
     461             :     indent_printf( fp, "  bFlags 0x%x\n", bFlags );
     462             :     indent_printf( fp, "  customText %s\n",
     463             :         OUStringToOString( customText.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     464             :     indent_printf( fp, "  description %s\n",
     465             :         OUStringToOString( descriptionText.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     466             :     indent_printf( fp, "  tooltip %s\n",
     467             :         OUStringToOString( tooltip.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     468             :     if ( bFlags & 0x4 )
     469             :         extraInfo.Print( fp );
     470             : }
     471             : #endif
     472             : 
     473             : bool
     474           0 : TBCGeneralInfo::ImportToolBarControlData( CustomToolBarImportHelper& helper, std::vector< beans::PropertyValue >& sControlData )
     475             : {
     476           0 :     if ( ( bFlags & 0x5 ) )
     477             :     {
     478           0 :         beans::PropertyValue aProp;
     479             :         // probably access to the header would be a better test than seeing if there is an action, e.g.
     480             :         // if ( rHeader.getTct() == 0x01 && rHeader.getTcID() == 0x01 ) // not defined, probably this is a command
     481           0 :         if ( !extraInfo.getOnAction().isEmpty() )
     482             :         {
     483           0 :             aProp.Name = "CommandURL";
     484           0 :             ooo::vba::MacroResolvedInfo aMacroInf = ooo::vba::resolveVBAMacro( &helper.GetDocShell(), extraInfo.getOnAction(), true );
     485           0 :             if ( aMacroInf.mbFound )
     486           0 :                 aProp.Value = CustomToolBarImportHelper::createCommandFromMacro( aMacroInf.msResolvedMacro );
     487             :             else
     488           0 :                 aProp.Value <<= OUString( "UnResolvedMacro[" ).concat( extraInfo.getOnAction() ).concat( OUString( "]" ) );
     489           0 :             sControlData.push_back( aProp );
     490             :         }
     491             : 
     492           0 :         aProp.Name = "Label";
     493           0 :         aProp.Value = uno::makeAny( customText.getString().replace('&','~') );
     494           0 :         sControlData.push_back( aProp );
     495             : 
     496           0 :         aProp.Name = "Type";
     497           0 :         aProp.Value = uno::makeAny( ui::ItemType::DEFAULT );
     498           0 :         sControlData.push_back( aProp );
     499             : 
     500           0 :         aProp.Name = "Tooltip";
     501           0 :         aProp.Value = uno::makeAny( tooltip.getString() );
     502           0 :         sControlData.push_back( aProp );
     503             : /*
     504             : aToolbarItem(0).Name = "CommandURL" wstrOnAction
     505             : aToolbarItem(0).Value = Command
     506             : aToolbarItem(1).Name = "Label"      customText
     507             : aToolbarItem(1).Value = Label
     508             : aToolbarItem(2).Name = "Type"
     509             : aToolbarItem(2).Value = 0
     510             : aToolbarItem(3).Name = "Visible"
     511             : aToolbarItem(3).Value = true
     512             : */
     513             :     }
     514           0 :     return true;
     515             : }
     516             : 
     517           0 : TBCMenuSpecific::TBCMenuSpecific() : tbid( 0 )
     518             : {
     519           0 : }
     520             : 
     521             : bool
     522           0 : TBCMenuSpecific::Read( SvStream &rS)
     523             : {
     524             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     525           0 :     nOffSet = rS.Tell();
     526           0 :     rS.ReadInt32( tbid );
     527           0 :     if ( tbid == 1 )
     528             :     {
     529           0 :         name.reset( new WString() );
     530           0 :         return name->Read( rS );
     531             :     }
     532           0 :     return true;
     533             : }
     534             : 
     535             : #if OSL_DEBUG_LEVEL > 1
     536             : void
     537             : TBCMenuSpecific::Print( FILE* fp )
     538             : {
     539             :     Indent a;
     540             :     indent_printf( fp, "[ 0x%x ] TBCMenuSpecific -- dump\n", nOffSet );
     541             :     indent_printf( fp, "  tbid 0x%x\n", static_cast< unsigned int >( tbid ) );
     542             :     if ( tbid == 1 )
     543             :         indent_printf( fp, "  name %s\n", OUStringToOString( name->getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     544             : }
     545             : #endif
     546             : 
     547           0 : OUString TBCMenuSpecific::Name()
     548             : {
     549           0 :     OUString aName;
     550           0 :     if ( name.get() )
     551           0 :         aName = name->getString();
     552           0 :     return aName;
     553             : }
     554           0 : TBCBSpecific::TBCBSpecific() : bFlags( 0 )
     555             : {
     556           0 : }
     557             : 
     558           0 : bool TBCBSpecific::Read( SvStream &rS)
     559             : {
     560             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     561           0 :     nOffSet = rS.Tell();
     562           0 :     rS.ReadUChar( bFlags );
     563             : 
     564             :     // bFlags determines what we read next
     565             : 
     566             :     // bFlags.fCustomBitmap = 1 ( 0x8 ) set
     567           0 :     if ( bFlags & 0x8 )
     568             :     {
     569           0 :         icon.reset( new TBCBitMap() );
     570           0 :         iconMask.reset( new TBCBitMap() );
     571           0 :         if ( !icon->Read( rS ) || !iconMask->Read( rS ) )
     572           0 :             return false;
     573             :     }
     574             :     // if bFlags.fCustomBtnFace = 1 ( 0x10 )
     575           0 :     if ( bFlags & 0x10 )
     576             :     {
     577           0 :         iBtnFace.reset( new sal_uInt16 );
     578           0 :         rS.ReadUInt16( *iBtnFace.get() );
     579             :     }
     580             :     // if bFlags.fAccelerator equals 1 ( 0x04 )
     581           0 :     if ( bFlags & 0x04 )
     582             :     {
     583           0 :         wstrAcc.reset( new WString() );
     584           0 :         return wstrAcc->Read( rS );
     585             :     }
     586           0 :     return true;
     587             : }
     588             : 
     589             : 
     590             : #if OSL_DEBUG_LEVEL > 1
     591             : void TBCBSpecific::Print( FILE* fp )
     592             : {
     593             :     Indent a;
     594             :     indent_printf( fp, "[ 0x%x ] TBCBSpecific -- dump\n", nOffSet );
     595             :     indent_printf( fp, "  bFlags 0x%x\n", bFlags );
     596             :     bool bResult = ( icon.get() != NULL );
     597             :     indent_printf( fp, "  icon present? %s\n", bResult ? "true" : "false" );
     598             :     if ( bResult )
     599             :     {
     600             :         Indent b;
     601             :         indent_printf( fp, "  icon: \n");
     602             :         icon->Print( fp ); // will dump size
     603             :     }
     604             :     bResult = ( iconMask.get() != NULL );
     605             :     indent_printf( fp, "  icon mask present? %s\n", bResult ? "true" : "false" );
     606             :     if ( bResult )
     607             :     {
     608             :         Indent c;
     609             :         indent_printf( fp, "  icon mask: \n");
     610             :         iconMask->Print( fp ); // will dump size
     611             :     }
     612             :     if ( iBtnFace.get() )
     613             :     {
     614             :         indent_printf( fp, "  iBtnFace 0x%x\n", *(iBtnFace.get()) );
     615             :     }
     616             :     bResult = ( wstrAcc.get() != NULL );
     617             :     indent_printf( fp, "  option string present? %s ->%s<-\n", bResult ? "true" : "false", bResult ? OUStringToOString( wstrAcc->getString(), RTL_TEXTENCODING_UTF8 ).getStr() : "N/A" );
     618             : }
     619             : #endif
     620             : 
     621             : TBCBitMap*
     622           0 : TBCBSpecific::getIcon()
     623             : {
     624           0 :     return icon.get();
     625             : }
     626             : 
     627             : TBCBitMap*
     628           0 : TBCBSpecific::getIconMask()
     629             : {
     630           0 :     return iconMask.get();
     631             : }
     632             : 
     633           0 : TBCComboDropdownSpecific::TBCComboDropdownSpecific(const TBCHeader& header )
     634             : {
     635           0 :     if ( header.getTcID() == 0x01 )
     636           0 :         data.reset( new TBCCDData() );
     637           0 : }
     638             : 
     639           0 : bool TBCComboDropdownSpecific::Read( SvStream &rS)
     640             : {
     641           0 :     nOffSet = rS.Tell();
     642           0 :     if ( data.get() )
     643           0 :         return data->Read( rS );
     644           0 :     return true;
     645             : }
     646             : 
     647             : #if OSL_DEBUG_LEVEL > 1
     648             : void TBCComboDropdownSpecific::Print( FILE* fp)
     649             : {
     650             :     Indent a;
     651             :     indent_printf(fp,"[ 0x%x ] TBCComboDropdownSpecific -- dump\n", nOffSet );
     652             :     if ( data.get() )
     653             :         data->Print( fp );
     654             :     else
     655             :         indent_printf(fp," no data " );
     656             : }
     657             : #endif
     658             : 
     659           0 : TBCCDData::TBCCDData()
     660             :     : cwstrItems(0)
     661             :     , cwstrMRU(0)
     662             :     , iSel(0)
     663             :     , cLines(0)
     664           0 :     , dxWidth(0)
     665             : {
     666           0 : }
     667             : 
     668           0 : TBCCDData::~TBCCDData()
     669             : {
     670           0 : }
     671             : 
     672           0 : bool TBCCDData::Read( SvStream &rS)
     673             : {
     674           0 :     nOffSet = rS.Tell();
     675           0 :     rS.ReadInt16( cwstrItems );
     676           0 :     if (cwstrItems > 0)
     677             :     {
     678             :         //each WString is at least one byte
     679           0 :         if (rS.remainingSize() < static_cast<size_t>(cwstrItems))
     680           0 :             return false;
     681           0 :         for( sal_Int32 index=0; index < cwstrItems; ++index )
     682             :         {
     683           0 :             WString aString;
     684           0 :             if ( !aString.Read( rS ) )
     685           0 :                 return false;
     686           0 :             wstrList.push_back( aString );
     687           0 :         }
     688             :     }
     689           0 :     rS.ReadInt16( cwstrMRU ).ReadInt16( iSel ).ReadInt16( cLines ).ReadInt16( dxWidth );
     690             : 
     691           0 :     return wstrEdit.Read( rS );
     692             : }
     693             : 
     694             : #if OSL_DEBUG_LEVEL > 1
     695             : void TBCCDData::Print( FILE* fp)
     696             : {
     697             :     Indent a;
     698             :     indent_printf(fp,"[ 0x%x ] TBCCDData -- dump\n", nOffSet );
     699             :     indent_printf(fp,"  cwstrItems items in wstrList 0x%d\n", cwstrItems);
     700             :     for ( sal_Int32 index=0; index < cwstrItems; ++index )
     701             :     {
     702             :         Indent b;
     703             :         indent_printf(fp, "  wstrList[%d] %s", static_cast< int >( index ), OUStringToOString( wstrList[index].getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     704             :     }
     705             :     indent_printf(fp,"  cwstrMRU num most recently used string 0x%d item\n", cwstrMRU);
     706             :     indent_printf(fp,"  iSel index of selected item 0x%d item\n", iSel);
     707             :     indent_printf(fp,"  cLines num of suggested lines to display 0x%d", cLines);
     708             :     indent_printf(fp,"  dxWidth width in pixels 0x%d", dxWidth);
     709             :     indent_printf(fp,"  wstrEdit %s", OUStringToOString( wstrEdit.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     710             : }
     711             : #endif
     712             : 
     713           0 : TBCBitMap::TBCBitMap() : cbDIB( 0 )
     714             : {
     715           0 : }
     716             : 
     717           0 : TBCBitMap::~TBCBitMap()
     718             : {
     719           0 : }
     720             : 
     721           0 : bool TBCBitMap::Read( SvStream& rS)
     722             : {
     723             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     724           0 :     nOffSet = rS.Tell();
     725           0 :     rS.ReadInt32( cbDIB );
     726             :     // cbDIB = sizeOf(biHeader) + sizeOf(colors) + sizeOf(bitmapData) + 10
     727           0 :     return ReadDIB(mBitMap, rS, false, true);
     728             : }
     729             : 
     730             : #if OSL_DEBUG_LEVEL > 1
     731             : void TBCBitMap::Print( FILE* fp )
     732             : {
     733             :     Indent a;
     734             :     indent_printf(fp, "[ 0x%x ] TBCBitMap -- dump\n", nOffSet );
     735             :     indent_printf(fp, "  TBCBitMap size of bitmap data 0x%x\n", static_cast< unsigned int > ( cbDIB ) );
     736             : }
     737             : #endif
     738             : 
     739           0 : TB::TB() : bSignature(0x2),
     740             : bVersion(0x1),
     741             : cCL(0),
     742             : ltbid( 0x1 ),
     743             : ltbtr(0),
     744             : cRowsDefault( 0 ),
     745           0 : bFlags( 0 )
     746             : {
     747           0 : }
     748             : 
     749           0 : bool TB::Read(SvStream &rS)
     750             : {
     751             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     752           0 :     nOffSet = rS.Tell();
     753           0 :     rS.ReadUChar( bSignature ).ReadUChar( bVersion ).ReadInt16( cCL ).ReadInt32( ltbid ).ReadUInt32( ltbtr ).ReadUInt16( cRowsDefault ).ReadUInt16( bFlags );
     754           0 :     name.Read( rS );
     755           0 :     return true;
     756             : 
     757             : }
     758             : 
     759           0 : bool TB::IsEnabled()
     760             : {
     761           0 :     return ( bFlags & 0x01 ) != 0x01;
     762             : }
     763             : 
     764             : #if OSL_DEBUG_LEVEL > 1
     765             : void TB::Print( FILE* fp )
     766             : {
     767             :     Indent a;
     768             :     indent_printf(fp,"[ 0x%x ] TB -- dump\n", nOffSet );
     769             :     indent_printf(fp,"  bSignature 0x%x\n", bSignature );
     770             :     indent_printf(fp,"  bVersion 0x%x\n", bVersion );
     771             :     indent_printf(fp,"  cCL 0x%x\n", cCL );
     772             :     indent_printf(fp,"  ltbid 0x%x\n", ltbid );
     773             :     indent_printf(fp,"  ltbtr 0x%x\n", ltbtr );
     774             :     indent_printf(fp,"  cRowsDefault 0x%x\n", cRowsDefault );
     775             :     indent_printf(fp,"  bFlags 0x%x\n", bFlags );
     776             :     indent_printf(fp, "  name %s\n", OUStringToOString( name.getString(), RTL_TEXTENCODING_UTF8 ).getStr() );
     777             : }
     778             : #endif
     779             : 
     780           0 : TBVisualData::TBVisualData() : tbds(0), tbv(0), tbdsDock(0), iRow(0)
     781             : {
     782           0 : }
     783             : 
     784           0 : bool TBVisualData::Read( SvStream& rS )
     785             : {
     786             :     SAL_INFO("filter.ms", "stream pos " << rS.Tell());
     787           0 :     nOffSet = rS.Tell();
     788           0 :     rS.ReadSChar( tbds ).ReadSChar( tbv ).ReadSChar( tbdsDock ).ReadSChar( iRow );
     789           0 :     rcDock.Read( rS );
     790           0 :     rcFloat.Read( rS );
     791           0 :     return true;
     792             : }
     793             : 
     794             : #if OSL_DEBUG_LEVEL > 1
     795             : void SRECT::Print( FILE* fp )
     796             : {
     797             :     Indent a;
     798             :     indent_printf( fp, "  left 0x%x\n", left);
     799             :     indent_printf( fp, "  top 0x%x\n", top);
     800             :     indent_printf( fp, "  right 0x%x\n", right);
     801             :     indent_printf( fp, "  bottom 0x%x\n", bottom);
     802             : }
     803             : #endif
     804             : 
     805             : #if OSL_DEBUG_LEVEL > 1
     806             : void TBVisualData::Print( FILE* fp )
     807             : {
     808             :     Indent a;
     809             :     indent_printf( fp, "[ 0x%x ] TBVisualData -- dump\n", nOffSet );
     810             :     indent_printf( fp, "  tbds 0x%x\n", tbds);
     811             :     indent_printf( fp, "  tbv  0x%x\n", tbv);
     812             :     indent_printf( fp, "  tbdsDoc  0x%x\n", tbdsDock);
     813             :     indent_printf( fp, "  iRow  0x%x\n", iRow);
     814             :     rcDock.Print( fp );
     815             :     rcFloat.Print( fp );
     816             : }
     817             : #endif
     818             : 
     819             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11