kdeui Library API Documentation

kwindowinfo.cpp

00001 /*
00002  *   copyright            : (C) 2001-2002 by Richard Moore
00003  *   License              : This file is released under the terms of the LGPL, version 2.
00004  *   email                : rich@kde.org
00005  */
00006 
00007 #include <qobjectlist.h>
00008 #include <qpixmap.h>
00009 #include <qtimer.h>
00010 #include <qtooltip.h>
00011 #include <ksystemtray.h>
00012 #include <kwin.h>
00013 
00014 #include "kwindowinfo.h"
00015 #include "kwindowinfo.moc"
00016 
00017 static const int UNSPECIFIED_TIMEOUT = -1;
00018 static const int DEFAULT_MESSAGE_TIMEOUT = 3000;
00019 
00020 KWindowInfo::KWindowInfo( QWidget *parent, const char *name )
00021     : QObject( parent, name ), win( parent ), autoDel( false )
00022 {
00023 }
00024 
00025 KWindowInfo::~KWindowInfo()
00026 {
00027 }
00028 
00029 void KWindowInfo::showMessage( QWidget *window, const QString &text, int timeout )
00030 {
00031     KWindowInfo *info = new KWindowInfo( window );
00032     info->autoDel = true;
00033     info->message( text, timeout );
00034     if ( timeout == 0 )
00035     delete info;
00036 }
00037 
00038 void KWindowInfo::showMessage( QWidget *window, const QString &text, const QPixmap &pix, int timeout )
00039 {
00040     KWindowInfo *info = new KWindowInfo( window );
00041     info->autoDel = true;
00042     info->message( text, pix, timeout );
00043 }
00044 
00045 void KWindowInfo::message( const QString &text )
00046 {
00047     message( text, QPixmap(), UNSPECIFIED_TIMEOUT );
00048 }
00049 
00050 void KWindowInfo::message( const QString &text, const QPixmap &pix )
00051 {
00052     message( text, pix, UNSPECIFIED_TIMEOUT );
00053 }
00054 
00055 void KWindowInfo::message( const QString &text, int timeout )
00056 {
00057     message( text, QPixmap(), timeout );
00058 }
00059 
00060 void KWindowInfo::message( const QString &text, const QPixmap &pix, int timeout )
00061 {
00062     if ( timeout != 0 )
00063     save();
00064 
00065     display( text, pix );
00066 
00067     if ( timeout < 0 )
00068     timeout = DEFAULT_MESSAGE_TIMEOUT;
00069     if ( timeout != 0 )
00070     QTimer::singleShot( timeout, this, SLOT( restore() ) );
00071 }
00072 
00073 void KWindowInfo::permanent( const QString &text )
00074 {
00075     oldMiniIcon = KWin::icon( win->winId(), 16, 16, true );
00076     oldIcon = KWin::icon( win->winId(), 34, 34, false );
00077     if ( oldIcon.isNull() )
00078     oldIcon = KWin::icon( win->winId(), 32, 32, true );
00079 
00080     permanent( text, oldIcon );
00081 }
00082 
00083 void KWindowInfo::permanent( const QString &text, const QPixmap &pix )
00084 {
00085     if ( !oldText.isNull() ) {
00086     QObjectList *l = queryList( "QTimer" );
00087     QObjectListIt it( *l );
00088     QObject *obj;
00089 
00090     while ( (obj = it.current()) != 0 ) {
00091         ++it;
00092         delete obj;
00093     }
00094     delete l;
00095     }
00096 
00097     oldText = QString::null;
00098     display( text, pix );
00099 }
00100 
00101 void KWindowInfo::display( const QString &text, const QPixmap &pix )
00102 {
00103     QPixmap icon;
00104     if ( pix.isNull() )
00105     icon.load( "bell.png" );
00106     else
00107     icon = pix;
00108 
00109     if ( win->inherits( "KSystemTray" ) ) {
00110     KSystemTray *tray = static_cast<KSystemTray *>( win );
00111     tray->setPixmap( icon );
00112     QToolTip::add( tray, text );
00113     return;
00114     }
00115 
00116     win->setCaption( text );
00117     win->setIcon( icon );
00118     KWin::setIcons( win->winId(), icon, icon );
00119 }
00120 
00121 void KWindowInfo::save()
00122 {
00123     if ( !oldText.isNull() )
00124     return;
00125 
00126     if ( win->inherits( "KSystemTray" ) ) {
00127     KSystemTray *tray = static_cast<KSystemTray *>( win );
00128     oldIcon = *(tray->pixmap());
00129     oldText = QToolTip::textFor( tray );
00130     return;
00131     }
00132 
00133     oldText = win->caption();
00134     oldMiniIcon = KWin::icon( win->winId(), 16, 16, true );
00135     oldIcon = KWin::icon( win->winId(), 34, 34, false );
00136     if ( oldIcon.isNull() )
00137     oldIcon = KWin::icon( win->winId(), 32, 32, true );
00138 
00139     if ( oldIcon.isNull() ) {
00140     const QPixmap *px = win->icon();
00141     if ( px )
00142         oldIcon = *px;
00143     else
00144         oldIcon.resize( 0, 0 );
00145     }
00146 }
00147 
00148 void KWindowInfo::restore()
00149 {
00150     if ( win->inherits( "KSystemTray" ) ) {
00151     KSystemTray *tray = static_cast<KSystemTray *>( win );
00152     tray->setPixmap( oldIcon );
00153     QToolTip::add( tray, oldText );
00154     oldText = QString::null;
00155     return;
00156     }
00157 
00158     win->setIcon( oldIcon );
00159     KWin::setIcons( win->winId(), oldIcon, oldMiniIcon );
00160     win->setCaption( oldText );
00161     oldText = QString::null;
00162 
00163     if ( autoDel )
00164     delete this;
00165 }
00166 
00167 
00168 
00169 
00170 
KDE Logo
This file is part of the documentation for kdelibs Version 3.1.4.
Documentation copyright © 1996-2002 the KDE developers.
Generated on Sun Feb 27 22:15:05 2005 by doxygen 1.3.4 written by Dimitri van Heesch, © 1997-2001