blob: 7351b7791bb5f876917f85d396bfdd71f8d94bac [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#include <com/sun/star/lang/XServiceInfo.hpp>
#include <com/sun/star/uno/Exception.hpp>
#include <com/sun/star/uno/Reference.h>
#include <com/sun/star/lang/XComponent.hpp>
#include <com/sun/star/task/XStatusIndicator.hpp>
#include <com/sun/star/lang/XInitialization.hpp>
#include <cppuhelper/implbase2.hxx>
#include <cppuhelper/interfacecontainer.h>
#include <vcl/introwin.hxx>
#include <vcl/bitmapex.hxx>
#include <com/sun/star/lang/XSingleServiceFactory.hpp>
#include <osl/mutex.hxx>
#include <vcl/virdev.hxx>
using namespace ::rtl;
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::lang;
using namespace ::com::sun::star::task;
namespace desktop {
class SplashScreen
: public ::cppu::WeakImplHelper2< XStatusIndicator, XInitialization >
, public IntroWindow
{
private:
struct FullScreenProgressRatioValue
{
double _fXRelPos;
double _fYRelPos;
double _fRelWidth;
double _fRelHeight;
};
enum BitmapMode { BM_FULLSCREEN, BM_DEFAULTMODE };
// don't allow anybody but ourselves to create instances of this class
SplashScreen(const SplashScreen&);
SplashScreen(void);
SplashScreen operator =(const SplashScreen&);
SplashScreen(const Reference< XMultiServiceFactory >& xFactory);
DECL_LINK( AppEventListenerHdl, VclWindowEvent * );
virtual ~SplashScreen();
void loadConfig();
void initBitmap();
void updateStatus();
bool findScreenBitmap(rtl::OUString const & path);
bool findAppBitmap(rtl::OUString const & path);
bool findBitmap(rtl::OUString const & path);
bool loadBitmap(
rtl::OUString const & path, const rtl::OUString &rBmpFileName );
void determineProgressRatioValues( double& rXRelPos, double& rYRelPos, double& rRelWidth, double& rRelHeight );
static SplashScreen *_pINSTANCE;
static osl::Mutex _aMutex;
Reference< XMultiServiceFactory > _rFactory;
VirtualDevice _vdev;
BitmapEx _aIntroBmp;
Color _cProgressFrameColor;
bool _bShowProgressFrame;
Color _cProgressBarColor;
bool _bNativeProgress;
OUString _sAppName;
OUString _sProgressText;
std::vector< FullScreenProgressRatioValue > _sFullScreenProgressRatioValues;
sal_Int32 _iMax;
sal_Int32 _iProgress;
BitmapMode _eBitmapMode;
sal_Bool _bPaintBitmap;
sal_Bool _bPaintProgress;
sal_Bool _bVisible;
sal_Bool _bShowLogo;
sal_Bool _bFullScreenSplash;
sal_Bool _bProgressEnd;
long _height, _width, _tlx, _tly, _barwidth;
long _barheight, _barspace;
double _fXPos, _fYPos;
double _fWidth, _fHeight;
const long _xoffset, _yoffset;
public:
static const char* interfaces[];
static const sal_Char *serviceName;
static const sal_Char *implementationName;
static const sal_Char *supportedServiceNames[];
static Reference< XInterface > getInstance(const Reference < XMultiServiceFactory >& xFactory);
// XStatusIndicator
virtual void SAL_CALL end() throw ( RuntimeException );
virtual void SAL_CALL reset() throw ( RuntimeException );
virtual void SAL_CALL setText(const OUString& aText) throw ( RuntimeException );
virtual void SAL_CALL setValue(sal_Int32 nValue) throw ( RuntimeException );
virtual void SAL_CALL start(const OUString& aText, sal_Int32 nRange) throw ( RuntimeException );
// XInitialize
virtual void SAL_CALL initialize( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any>& aArguments )
throw ( RuntimeException );
// workwindow
virtual void Paint( const Rectangle& );
};
}