summaryrefslogtreecommitdiffstats
path: root/src/widgets/paneldeco.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/paneldeco.cpp')
-rw-r--r--src/widgets/paneldeco.cpp173
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"