22#include <com/sun/star/embed/ElementModes.hpp>
23#include <com/sun/star/embed/XStorage.hpp>
24#include <com/sun/star/graphic/GraphicProvider.hpp>
25#include <com/sun/star/graphic/XGraphicProvider.hpp>
26#include <com/sun/star/io/XStream.hpp>
29#include <osl/file.hxx>
56 explicit ButtonsImpl(
const OUString& rURL );
58 Reference< XInputStream > getInputStream(
const OUString& rName );
60 bool getGraphic(
const Reference< XGraphicProvider >& xGraphicProvider,
const OUString& rName,
Graphic& rGraphic );
62 bool copyGraphic(
const OUString& rName,
const OUString& rPath );
70ButtonsImpl::ButtonsImpl(
const OUString& rURL )
82Reference< XInputStream > ButtonsImpl::getInputStream(
const OUString& rName )
84 Reference< XInputStream > xInputStream;
87 Reference< XStream >
xStream(
mxStorage->openStreamElement( rName, ElementModes::READ ) );
89 xInputStream =
xStream->getInputStream();
98bool ButtonsImpl::getGraphic(
const Reference< XGraphicProvider >& xGraphicProvider,
const OUString& rName,
Graphic& rGraphic )
100 Reference< XInputStream > xInputStream( getInputStream( rName ) );
101 if( xInputStream.is() && xGraphicProvider.is() )
try
104 "InputStream", xInputStream) };
105 Reference< XGraphic > xGraphic( xGraphicProvider->queryGraphic( aMediaProperties ) );
109 rGraphic =
Graphic( xGraphic );
120bool ButtonsImpl::copyGraphic(
const OUString& rName,
const OUString& rPath )
122 Reference< XInputStream > xInput( getInputStream( rName ) );
123 if( xInput.is() )
try
125 osl::File::remove( rPath );
126 osl::File aOutputFile( rPath );
127 if( aOutputFile.open( osl_File_OpenFlag_Write|osl_File_OpenFlag_Create ) == osl::FileBase::E_None )
149 bool getPreview(
int nSet,
const std::vector< OUString >& rButtons,
Image& rImage );
150 bool exportButton(
int nSet,
const OUString& rPath,
const OUString& rName );
156 std::vector< std::shared_ptr< ButtonsImpl > >
maButtons;
162 static const char sSubPath[] =
"/wizard/web/buttons" ;
175 osl::Directory aDirectory( rPath );
176 if( aDirectory.open() != osl::FileBase::E_None )
179 osl::DirectoryItem aItem;
180 while( aDirectory.getNextItem( aItem, 2211 ) == osl::FileBase::E_None )
182 osl::FileStatus aStatus( osl_FileStatus_Mask_FileName|osl_FileStatus_Mask_FileURL );
183 if( aItem.getFileStatus( aStatus ) == osl::FileBase::E_None )
185 OUString sFileName( aStatus.getFileName() );
186 if( sFileName.endsWithIgnoreAsciiCase(
".zip" ) )
187 maButtons.push_back( std::make_shared< ButtonsImpl >( aStatus.getFileURL() ) );
203 std::vector< Graphic > aGraphics;
206 pDev->SetMapMode(
MapMode(MapUnit::MapPixel));
209 std::vector< OUString >::const_iterator aIter( rButtons.begin() );
210 while( aIter != rButtons.end() )
216 aGraphics.push_back(aGraphic);
224 if( aIter != rButtons.end() )
228 pDev->SetOutputSizePixel( aSize );
232 for(
const Graphic& aGraphic : aGraphics )
234 aGraphic.Draw(*pDev, aPos);
236 aPos.
AdjustX(aGraphic.GetSizePixel().Width() + 3 );
239 rImage =
Image( pDev->GetBitmapEx(
Point(), aSize ) );
251 return rSet.copyGraphic( rName, rPath );
260 Reference< XComponentContext > xComponentContext = ::comphelper::getProcessComponentContext();
277 return mpImpl->getCount();
282 return mpImpl->getPreview( nSet, rButtons, rImage );
287 return mpImpl->exportButton( nSet, rPath, rName );
Size GetSizePixel(const OutputDevice *pRefDevice=nullptr) const
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long Height() const
tools::Long AdjustWidth(tools::Long n)
void setHeight(tools::Long nHeight)
constexpr tools::Long Width() const
const OUString & GetConfigPath() const
const OUString & GetUserConfigPath() const
static void CopyInputToOutput(const css::uno::Reference< css::io::XInputStream > &xInput, const css::uno::Reference< css::io::XOutputStream > &xOutput)
static css::uno::Reference< css::embed::XStorage > GetStorageOfFormatFromURL(const OUString &aFormat, const OUString &aURL, sal_Int32 nStorageMode, const css::uno::Reference< css::uno::XComponentContext > &rxContext=css::uno::Reference< css::uno::XComponentContext >())
#define TOOLS_WARN_EXCEPTION(area, stream)
css::beans::PropertyValue makePropertyValue(const OUString &rName, T &&rValue)
constexpr std::enable_if_t< std::is_signed_v< T >, std::make_unsigned_t< T > > make_unsigned(T value)
Reference< XNameContainer > mxStorage