110 lines
2.5 KiB
C++
110 lines
2.5 KiB
C++
|
// Ryzom Core - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
|
||
|
// Copyright (C) 2010 Winch Gate Property Limited
|
||
|
//
|
||
|
// This program is free software: you can redistribute it and/or modify
|
||
|
// it under the terms of the GNU Affero General Public License as
|
||
|
// published by the Free Software Foundation, either version 3 of the
|
||
|
// License, or (at your option) any later version.
|
||
|
//
|
||
|
// This program is distributed in the hope that it will be useful,
|
||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
// GNU Affero General Public License for more details.
|
||
|
//
|
||
|
// You should have received a copy of the GNU Affero General Public License
|
||
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||
|
|
||
|
|
||
|
#include "splash_screen.h"
|
||
|
#include <QPainter>
|
||
|
#include <QStyleOptionProgressBarV2>
|
||
|
#include <QCoreApplication>
|
||
|
#include <QPixmap>
|
||
|
|
||
|
SplashScreen::SplashScreen() :
|
||
|
QSplashScreen()
|
||
|
{
|
||
|
progress = 0;
|
||
|
textX = 5;
|
||
|
textY = 20;
|
||
|
pbLeft = 2;
|
||
|
pbTop = 0;
|
||
|
pbWidth = 100;
|
||
|
pbHeight = 20;
|
||
|
}
|
||
|
|
||
|
SplashScreen::~SplashScreen()
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void SplashScreen::setPixmap( const QPixmap &pixmap )
|
||
|
{
|
||
|
QSplashScreen::setPixmap( pixmap );
|
||
|
|
||
|
if( this->pixmap().width() > 0 )
|
||
|
pbWidth = this->pixmap().width() - 4;
|
||
|
|
||
|
if( this->pixmap().height() > 0 )
|
||
|
pbTop = this->pixmap().height() - pbHeight - 2;
|
||
|
|
||
|
textY = pbTop - pbHeight / 2;
|
||
|
}
|
||
|
|
||
|
void SplashScreen::setText( const QString &text )
|
||
|
{
|
||
|
this->text = text;
|
||
|
repaint();
|
||
|
QCoreApplication::instance()->processEvents();
|
||
|
}
|
||
|
|
||
|
void SplashScreen::clearText()
|
||
|
{
|
||
|
setText( "" );
|
||
|
}
|
||
|
|
||
|
void SplashScreen::setProgress( int percent )
|
||
|
{
|
||
|
progress = percent;
|
||
|
repaint();
|
||
|
QCoreApplication::instance()->processEvents();
|
||
|
}
|
||
|
|
||
|
void SplashScreen::advanceProgress( int percent )
|
||
|
{
|
||
|
progress += percent;
|
||
|
repaint();
|
||
|
QCoreApplication::instance()->processEvents();
|
||
|
}
|
||
|
|
||
|
void SplashScreen::drawContents( QPainter *painter )
|
||
|
{
|
||
|
QSplashScreen::drawContents( painter );
|
||
|
|
||
|
if( progressBarEnabled )
|
||
|
{
|
||
|
QStyleOptionProgressBarV2 pbStyle;
|
||
|
pbStyle.initFrom( this );
|
||
|
pbStyle.state = QStyle::State_Enabled;
|
||
|
pbStyle.textVisible = false;
|
||
|
pbStyle.minimum = 0;
|
||
|
pbStyle.maximum = 100;
|
||
|
pbStyle.progress = progress;
|
||
|
pbStyle.invertedAppearance = false;
|
||
|
pbStyle.rect = QRect( pbLeft, pbTop, pbWidth, pbHeight );
|
||
|
|
||
|
style()->drawControl( QStyle::CE_ProgressBar, &pbStyle, painter, this );
|
||
|
}
|
||
|
|
||
|
if( !text.isEmpty() )
|
||
|
{
|
||
|
QPen oldPen = painter->pen();
|
||
|
QPen pen;
|
||
|
pen.setColor( Qt::white );
|
||
|
painter->setPen( pen );
|
||
|
painter->drawText( textX, textY, text );
|
||
|
painter->setPen( oldPen );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|