You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdesdk/kbugbuster/gui/cwloadingwidget.cpp

257 lines
7.7 KiB

/*
cwloadingwidget.cpp - Widget to be shown while loading data
copyright : (c) 2001 by Martijn Klingens
email : klingens@kde.org
*************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
*************************************************************************
*/
#include "cwloadingwidget.h"
#include <tqpainter.h>
#include <tqpixmap.h>
#include <kpixmap.h>
#include <kpixmapeffect.h>
#include <kstandarddirs.h>
#include <klocale.h>
#include <kglobalsettings.h>
using namespace KBugBusterMainWindow;
CWLoadingWidget::CWLoadingWidget( WidgetMode mode, TQWidget *tqparent,
const char * name )
: TQFrame( tqparent, name )
{
init( mode );
}
CWLoadingWidget::CWLoadingWidget( const TQString &text, WidgetMode mode,
TQWidget *tqparent, const char * name )
: TQFrame( tqparent, name )
{
init( mode );
setText( text );
}
void CWLoadingWidget::init( WidgetMode mode )
{
m_mode = mode;
TQPalette pal = palette();
pal.setColor( TQPalette::Active, TQColorGroup::Background,
TQColor( 49, 121, 173 ) );
pal.setColor( TQPalette::Inactive, TQColorGroup::Background,
TQColor( 49, 121, 173 ) );
pal.setColor( TQPalette::Disabled, TQColorGroup::Background,
TQColor( 49, 121, 173 ) );
setPalette( pal );
setFrameShape( StyledPanel );
setFrameShadow( Sunken );
setLineWidth( 2 );
setBackgroundMode( NoBackground ); // no flicker
// Load images and prepare pixmap effect
if( m_mode == TopFrame )
{
m_logoPixmap =
new TQPixmap( locate( "data", "kbugbuster/pics/logo.png" ) );
m_topRightPixmap =
new TQPixmap( locate( "data", "kbugbuster/pics/top-right.png" ) );
m_barsPixmap =
new TQPixmap( locate( "data", "kbugbuster/pics/bars.png" ) );
m_toolsPixmap = 0L;
m_toolsPixmapEffect = 0L;
}
else
{
m_toolsPixmap =
new TQPixmap( locate( "data", "kbugbuster/pics/tools.png" ) );
m_toolsPixmapEffect = new KPixmap( m_toolsPixmap->size() );
TQPainter pb;
pb.begin( m_toolsPixmapEffect );
pb.fillRect( 0, 0, m_toolsPixmap->width(), m_toolsPixmap->height(),
TQBrush( TQColor( 49, 121, 172 ) ) );
pb.drawPixmap( 0, 0, *m_toolsPixmap );
pb.end();
KPixmapEffect::fade( *m_toolsPixmapEffect, 0.75, white );
m_logoPixmap = 0L;
m_topRightPixmap = 0L;
m_barsPixmap = 0L;
}
// Create and fill the buffer
m_buffer = new TQPixmap;
}
void CWLoadingWidget::resizeEvent( TQResizeEvent * )
{
updatePixmap();
}
void CWLoadingWidget::setText( const TQString &text )
{
m_text = text;
updatePixmap();
tqrepaint();
}
void CWLoadingWidget::updatePixmap()
{
TQRect cr = contentsRect();
cr.setWidth( cr.width() + 2 );
cr.setHeight( cr.height() + 2 );
m_buffer->resize( cr.width(), cr.height() );
TQPainter p( m_buffer );
// fill background
p.fillRect( 0, 0, cr.width(), cr.height(),
TQBrush( TQColor( 49, 121, 173 ) ) );
if( m_mode == TopFrame )
{
TQFont bigFont = TQFont( KGlobalSettings::generalFont().family(),
28, TQFont::Bold, true );
int xoffset = m_logoPixmap->width();
// Draw bars tiled
int xpos = xoffset;
if( width() > xpos )
p.drawTiledPixmap( xpos, 0, cr.width() - xpos,
m_barsPixmap->height(), *m_barsPixmap );
// Draw logo
p.drawPixmap(width() - m_topRightPixmap->width(), 0, *m_topRightPixmap);
p.drawPixmap( 0, 0, *m_logoPixmap );
// Draw title text
p.setPen( black );
p.drawText( 150, 84, cr.width() - 150, 108 - 84,
AlignAuto | AlignVCenter, m_text );
// Draw intro text
TQString desc = i18n( "Welcome to KBugBuster, a tool to manage the "
"KDE Bug Report System. With KBugBuster you can "
"manage outstanding bug reports for KDE from a "
"convenient front end." );
p.setPen( black );
p.drawText( 28, 128, cr.width() - 28, 184 - 128,
AlignAuto | AlignVCenter | WordBreak, desc );
// Draw the caption text
TQString caption = i18n( "KBugBuster" );
p.setFont( bigFont );
p.setPen( TQColor(139, 183, 222) );
p.drawText( 220, 60, caption );
p.setPen( black );
p.drawText( 217, 57, caption );
}
else
{
// draw tools image
if( cr.height() <= 24 )
return;
int toolsEffectY = cr.height() - m_toolsPixmap->height();
int toolsEffectX = cr.width() - m_toolsPixmap->width();
if ( toolsEffectX < 0)
toolsEffectX = 0;
if ( height() < 24 + m_toolsPixmap->height() )
toolsEffectY = 24;
p.drawPixmap( toolsEffectX, toolsEffectY, *m_toolsPixmap );
// draw textbox
if( cr.height() <= 24 + 50 )
return;
int fheight = fontMetrics().height();
int boxX = 25;
int boxY = 24 + 50;
int boxW = cr.width() - 2 * boxX - 2 * 10;
if( boxW > 500 )
boxW = 500;
TQRect br = fontMetrics().boundingRect( boxX, boxY,
boxW, cr.height() - boxY - 10 - 2 * fheight,
AlignAuto | AlignTop | WordBreak, m_text );
TQRect box = br;
box.setHeight( box.height() + 2 * fheight );
box.setWidth( box.width() + 2 * 10 );
if( box.width() < cr.width() - 2 * boxX )
box.setWidth( TQMIN( cr.width() - 2 * boxX, 500 + 2 * 10 ) );
if( box.height() < 100 )
box.setHeight( TQMIN( cr.height() - boxY - 2 * fheight - 10, 100 ) );
p.setClipRect( box );
p.fillRect( box, TQBrush( TQColor( 204, 222, 234 ) ) );
p.drawPixmap( toolsEffectX, toolsEffectY, *m_toolsPixmapEffect );
p.setViewport( box );
p.setWindow( 0, 0, box.width(), box.height() );
p.drawText( 10, fheight, br.width(),
TQMAX( br.height(), box.height() - 2 * fheight ),
AlignAuto | AlignVCenter | WordBreak, m_text );
}
}
CWLoadingWidget::~CWLoadingWidget()
{
if( m_toolsPixmap )
delete m_toolsPixmap;
if( m_logoPixmap )
delete m_logoPixmap;
if( m_topRightPixmap )
delete m_topRightPixmap;
if( m_barsPixmap )
delete m_barsPixmap;
if( m_toolsPixmapEffect )
delete m_toolsPixmapEffect;
delete m_buffer;
m_toolsPixmap = 0L;
m_logoPixmap = 0L;
m_topRightPixmap = 0L;
m_barsPixmap = 0L;
m_toolsPixmapEffect = 0L;
m_buffer = 0L;
}
void CWLoadingWidget::mouseReleaseEvent( TQMouseEvent * )
{
emit clicked();
}
void CWLoadingWidget::drawContents( TQPainter *p )
{
if( !m_buffer || m_buffer->isNull() )
p->fillRect( contentsRect(), TQBrush( TQColor( 255, 121, 172 ) ) );
else
p->drawPixmap( TQPoint( contentsRect().x(), contentsRect().y()),
*m_buffer, contentsRect() );
}
#include "cwloadingwidget.moc"
/* vim: set et ts=4 sw=4 softtabstop=4: */