00001
00002
00003
00004
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
#ifdef Q_WS_X11
00076
oldMiniIcon = KWin::icon( win->winId(), 16, 16,
true );
00077 oldIcon = KWin::icon( win->winId(), 34, 34,
false );
00078
if ( oldIcon.isNull() )
00079 oldIcon = KWin::icon( win->winId(), 32, 32,
true );
00080
#endif
00081
00082
permanent( text, oldIcon );
00083 }
00084
00085 void KWindowInfo::permanent(
const QString &text,
const QPixmap &pix )
00086 {
00087
if ( !oldText.isNull() ) {
00088
QObjectList *l = queryList(
"QTimer" );
00089 QObjectListIt it( *l );
00090
QObject *obj;
00091
00092
while ( (obj = it.current()) != 0 ) {
00093 ++it;
00094
delete obj;
00095 }
00096
delete l;
00097 }
00098
00099 oldText = QString::null;
00100
display( text, pix );
00101 }
00102
00103 void KWindowInfo::display(
const QString &text,
const QPixmap &pix )
00104 {
00105
QPixmap icon;
00106
if ( pix.isNull() )
00107 icon.load(
"bell.png" );
00108
else
00109 icon = pix;
00110
00111
if ( win->inherits(
"KSystemTray" ) ) {
00112
KSystemTray *tray = static_cast<KSystemTray *>( win );
00113 tray->
setPixmap( icon );
00114 QToolTip::add( tray, text );
00115
return;
00116 }
00117
00118 win->setCaption( text );
00119 win->setIcon( icon );
00120
#ifdef Q_WS_X11
00121
KWin::setIcons( win->winId(), icon, icon );
00122
#endif
00123
}
00124
00125 void KWindowInfo::save()
00126 {
00127
if ( !oldText.isNull() )
00128
return;
00129
00130
if ( win->inherits(
"KSystemTray" ) ) {
00131
KSystemTray *tray = static_cast<KSystemTray *>( win );
00132 oldIcon = *(tray->pixmap());
00133 oldText = QToolTip::textFor( tray );
00134
return;
00135 }
00136
00137 oldText = win->caption();
00138
#ifdef Q_WS_X11
00139
oldMiniIcon = KWin::icon( win->winId(), 16, 16,
true );
00140 oldIcon = KWin::icon( win->winId(), 34, 34,
false );
00141
if ( oldIcon.isNull() )
00142 oldIcon = KWin::icon( win->winId(), 32, 32,
true );
00143
#endif
00144
00145
if ( oldIcon.isNull() ) {
00146
const QPixmap *px = win->icon();
00147
if ( px )
00148 oldIcon = *px;
00149
else
00150 oldIcon.resize( 0, 0 );
00151 }
00152 }
00153
00154 void KWindowInfo::restore()
00155 {
00156
if ( win->inherits(
"KSystemTray" ) ) {
00157
KSystemTray *tray = static_cast<KSystemTray *>( win );
00158 tray->
setPixmap( oldIcon );
00159 QToolTip::add( tray, oldText );
00160 oldText = QString::null;
00161
return;
00162 }
00163
00164 win->setIcon( oldIcon );
00165
#ifdef Q_WS_X11
00166
KWin::setIcons( win->winId(), oldIcon, oldMiniIcon );
00167
#endif
00168
win->setCaption( oldText );
00169 oldText = QString::null;
00170
00171
if ( autoDel )
00172
delete this;
00173 }
00174
00175
00176
00177
00178