summaryrefslogtreecommitdiffstats
path: root/kbugbuster/gui/cwloadingwidget.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kbugbuster/gui/cwloadingwidget.cpp')
-rw-r--r--kbugbuster/gui/cwloadingwidget.cpp256
1 files changed, 256 insertions, 0 deletions
diff --git a/kbugbuster/gui/cwloadingwidget.cpp b/kbugbuster/gui/cwloadingwidget.cpp
new file mode 100644
index 00000000..ddd218a5
--- /dev/null
+++ b/kbugbuster/gui/cwloadingwidget.cpp
@@ -0,0 +1,256 @@
+/*
+ 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 <qpainter.h>
+#include <qpixmap.h>
+#include <kpixmap.h>
+#include <kpixmapeffect.h>
+
+#include <kstandarddirs.h>
+#include <klocale.h>
+#include <kglobalsettings.h>
+
+using namespace KBugBusterMainWindow;
+
+CWLoadingWidget::CWLoadingWidget( WidgetMode mode, QWidget *parent,
+ const char * name )
+: QFrame( parent, name )
+{
+ init( mode );
+}
+
+CWLoadingWidget::CWLoadingWidget( const QString &text, WidgetMode mode,
+ QWidget *parent, const char * name )
+: QFrame( parent, name )
+{
+ init( mode );
+ setText( text );
+}
+
+void CWLoadingWidget::init( WidgetMode mode )
+{
+ m_mode = mode;
+
+ QPalette pal = palette();
+ pal.setColor( QPalette::Active, QColorGroup::Background,
+ QColor( 49, 121, 173 ) );
+ pal.setColor( QPalette::Inactive, QColorGroup::Background,
+ QColor( 49, 121, 173 ) );
+ pal.setColor( QPalette::Disabled, QColorGroup::Background,
+ QColor( 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 QPixmap( locate( "data", "kbugbuster/pics/logo.png" ) );
+ m_topRightPixmap =
+ new QPixmap( locate( "data", "kbugbuster/pics/top-right.png" ) );
+ m_barsPixmap =
+ new QPixmap( locate( "data", "kbugbuster/pics/bars.png" ) );
+ m_toolsPixmap = 0L;
+ m_toolsPixmapEffect = 0L;
+ }
+ else
+ {
+ m_toolsPixmap =
+ new QPixmap( locate( "data", "kbugbuster/pics/tools.png" ) );
+
+ m_toolsPixmapEffect = new KPixmap( m_toolsPixmap->size() );
+
+ QPainter pb;
+ pb.begin( m_toolsPixmapEffect );
+ pb.fillRect( 0, 0, m_toolsPixmap->width(), m_toolsPixmap->height(),
+ QBrush( QColor( 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 QPixmap;
+}
+
+void CWLoadingWidget::resizeEvent( QResizeEvent * )
+{
+ updatePixmap();
+}
+
+void CWLoadingWidget::setText( const QString &text )
+{
+ m_text = text;
+ updatePixmap();
+ repaint();
+}
+
+void CWLoadingWidget::updatePixmap()
+{
+ QRect cr = contentsRect();
+ cr.setWidth( cr.width() + 2 );
+ cr.setHeight( cr.height() + 2 );
+ m_buffer->resize( cr.width(), cr.height() );
+
+ QPainter p( m_buffer );
+
+ // fill background
+ p.fillRect( 0, 0, cr.width(), cr.height(),
+ QBrush( QColor( 49, 121, 173 ) ) );
+
+ if( m_mode == TopFrame )
+ {
+ QFont bigFont = QFont( KGlobalSettings::generalFont().family(),
+ 28, QFont::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
+ QString 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
+ QString caption = i18n( "KBugBuster" );
+ p.setFont( bigFont );
+ p.setPen( QColor(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;
+
+ QRect br = fontMetrics().boundingRect( boxX, boxY,
+ boxW, cr.height() - boxY - 10 - 2 * fheight,
+ AlignAuto | AlignTop | WordBreak, m_text );
+
+ QRect box = br;
+ box.setHeight( box.height() + 2 * fheight );
+ box.setWidth( box.width() + 2 * 10 );
+ if( box.width() < cr.width() - 2 * boxX )
+ box.setWidth( QMIN( cr.width() - 2 * boxX, 500 + 2 * 10 ) );
+ if( box.height() < 100 )
+ box.setHeight( QMIN( cr.height() - boxY - 2 * fheight - 10, 100 ) );
+
+ p.setClipRect( box );
+ p.fillRect( box, QBrush( QColor( 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(),
+ QMAX( 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( QMouseEvent * )
+{
+ emit clicked();
+}
+
+void CWLoadingWidget::drawContents( QPainter *p )
+{
+ if( !m_buffer || m_buffer->isNull() )
+ p->fillRect( contentsRect(), QBrush( QColor( 255, 121, 172 ) ) );
+ else
+ p->drawPixmap( QPoint( contentsRect().x(), contentsRect().y()),
+ *m_buffer, contentsRect() );
+}
+
+#include "cwloadingwidget.moc"
+
+/* vim: set et ts=4 sw=4 softtabstop=4: */