diff options
Diffstat (limited to 'src/widgets/paneldeco.cpp')
-rw-r--r-- | src/widgets/paneldeco.cpp | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/src/widgets/paneldeco.cpp b/src/widgets/paneldeco.cpp new file mode 100644 index 0000000..8045a5b --- /dev/null +++ b/src/widgets/paneldeco.cpp @@ -0,0 +1,173 @@ +/*************************************************************************** +* Copyright (C) 2003 by Unai Garro (ugarro@users.sourceforge.net) * +* * +* * +* 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 "paneldeco.h" + +#include <tqpainter.h> +#include <tqpoint.h> +#include <tqrect.h> + +#include <kiconloader.h> +#include <kpixmap.h> +#include <kpixmapeffect.h> + + +// Panel decoration + +PanelDeco::PanelDeco( TQWidget *parent, const char *name, const TQString &title, const TQString &iconName ) : TQVBox( parent, name ) +{ + + // Top decoration + tDeco = new TopDeco( this, "TopDecoration", title, iconName ); + + hbox = new TQHBox( this ); + + //Left decoration + lDeco = new LeftDeco( hbox, "LeftDecoration" ); + + //The widget stack (panels) + stack = new TQWidgetStack( hbox ); + stack->setSizePolicy( TQSizePolicy( TQSizePolicy::MinimumExpanding, TQSizePolicy::MinimumExpanding ) ); + +} + + +PanelDeco::~PanelDeco() +{} + +void PanelDeco::childEvent( TQChildEvent *e ) +{ + if ( e->type() == TQEvent::ChildInserted ) { + TQObject * obj = e->child(); + if ( obj->inherits( "TQWidget" ) ) { + TQWidget * w = ( TQWidget* ) obj; + if ( w != hbox && w != tDeco ) + w->reparent( stack, TQPoint( 0, 0 ) ); + } + } +} + + +int PanelDeco::id( TQWidget* w ) +{ + return ( stack->id( w ) ); +} + +void PanelDeco::raise( TQWidget *w ) +{ + TQWidget * old_w = visiblePanel(); + + stack->raiseWidget( w ); + + if ( old_w != w ) + emit panelRaised( w, old_w ); +} + +TQWidget* PanelDeco::visiblePanel( void ) +{ + return ( stack->visibleWidget() ); +} + +void PanelDeco::setHeader( const TQString &title, const TQString &icon ) +{ + tDeco->setHeader( title, icon ); +} + +// Left part of the decoration + +LeftDeco::LeftDeco( TQWidget *parent, const char *name ) : + TQWidget( parent, name, TQt::WNoAutoErase ) +{} + +LeftDeco::~LeftDeco() +{} + +// Top part of the decoration + +TopDeco::TopDeco( TQWidget *parent, const char *name, const TQString &title, const TQString &iconName ) : + TQWidget( parent, name, TQt::WNoAutoErase ) +{ + setMinimumHeight( 30 ); + icon = 0; + panelTitle = TQString::null; + if ( !iconName.isNull() ) { + TDEIconLoader il; + icon = new TQPixmap( il.loadIcon( iconName, TDEIcon::NoGroup, 22 ) ); + } + + if ( !title.isNull() ) { + panelTitle = title; + } +} + +TopDeco::~TopDeco() +{ + delete icon; +} + + +void TopDeco::paintEvent( TQPaintEvent * ) +{ + // Get gradient colors + TQColor c1 = colorGroup().button().light( 120 ); + TQColor c2 = paletteBackgroundColor(); + + // Draw the gradient + KPixmap kpm; + kpm.resize( size() ); + KPixmapEffect::unbalancedGradient ( kpm, c1, c2, KPixmapEffect::VerticalGradient, 150, 150 ); + + // Add a line on top + TQPainter painter( &kpm ); + painter.setPen( colorGroup().button().dark( 130 ) ); + painter.drawLine( 0, 0, width(), 0 ); + + // Now Add the icon + int xpos = 0, ypos = 0; + if ( icon ) { + xpos = 20; + ypos = ( height() - icon->height() ) / 2 - 1; + painter.drawPixmap( xpos, ypos, *icon ); + xpos += icon->width(); // Move it so that later we can easily place the text + } + + // Finally, draw the text besides the icon + if ( !panelTitle.isNull() ) { + xpos += 15; + TQRect r = rect(); + r.setLeft( xpos ); + painter.setPen( TQColor( 0x00, 0x00, 0x00 ) ); + TQFont ft = font(); + ft.setBold( true ); + painter.setFont( ft ); + painter.drawText( r, TQt::AlignVCenter, panelTitle ); + } + painter.end(); + // Copy the pixmap to the widget + bitBlt( this, 0, 0, &kpm ); +} + +void TopDeco::setHeader( const TQString &title, const TQString &iconName ) +{ + if ( !title.isNull() ) + panelTitle = title; + if ( !iconName.isNull() ) { + TDEIconLoader il; + icon = new TQPixmap( il.loadIcon( iconName, TDEIcon::NoGroup, 22 ) ); + } + if ( !title.isNull() || !iconName.isNull() ) + update(); +} + +TQSize TopDeco::sizeHint( void ) +{ + return ( TQSize( parentWidget() ->width(), 30 ) ); +} + +#include "paneldeco.moc" |