summaryrefslogtreecommitdiffstats
path: root/tdeui/twindowinfo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tdeui/twindowinfo.cpp')
-rw-r--r--tdeui/twindowinfo.cpp178
1 files changed, 178 insertions, 0 deletions
diff --git a/tdeui/twindowinfo.cpp b/tdeui/twindowinfo.cpp
new file mode 100644
index 000000000..436aa5227
--- /dev/null
+++ b/tdeui/twindowinfo.cpp
@@ -0,0 +1,178 @@
+/*
+ * copyright : (C) 2001-2002 by Richard Moore
+ * License : This file is released under the terms of the LGPL, version 2.
+ * email : rich@kde.org
+ */
+
+#include <tqobjectlist.h>
+#include <tqpixmap.h>
+#include <tqtimer.h>
+#include <tqtooltip.h>
+#include <ksystemtray.h>
+#include <twin.h>
+
+#include "twindowinfo.h"
+#include "twindowinfo.moc"
+
+static const int UNSPECIFIED_TIMEOUT = -1;
+static const int DEFAULT_MESSAGE_TIMEOUT = 3000;
+
+KWindowInfo::KWindowInfo( TQWidget *parent, const char *name )
+ : TQObject( parent, name ), win( parent ), autoDel( false )
+{
+}
+
+KWindowInfo::~KWindowInfo()
+{
+}
+
+void KWindowInfo::showMessage( TQWidget *window, const TQString &text, int timeout )
+{
+ KWindowInfo *info = new KWindowInfo( window );
+ info->autoDel = true;
+ info->message( text, timeout );
+ if ( timeout == 0 )
+ delete info;
+}
+
+void KWindowInfo::showMessage( TQWidget *window, const TQString &text, const TQPixmap &pix, int timeout )
+{
+ KWindowInfo *info = new KWindowInfo( window );
+ info->autoDel = true;
+ info->message( text, pix, timeout );
+}
+
+void KWindowInfo::message( const TQString &text )
+{
+ message( text, TQPixmap(), UNSPECIFIED_TIMEOUT );
+}
+
+void KWindowInfo::message( const TQString &text, const TQPixmap &pix )
+{
+ message( text, pix, UNSPECIFIED_TIMEOUT );
+}
+
+void KWindowInfo::message( const TQString &text, int timeout )
+{
+ message( text, TQPixmap(), timeout );
+}
+
+void KWindowInfo::message( const TQString &text, const TQPixmap &pix, int timeout )
+{
+ if ( timeout != 0 )
+ save();
+
+ display( text, pix );
+
+ if ( timeout < 0 )
+ timeout = DEFAULT_MESSAGE_TIMEOUT;
+ if ( timeout != 0 )
+ TQTimer::singleShot( timeout, this, TQT_SLOT( restore() ) );
+}
+
+void KWindowInfo::permanent( const TQString &text )
+{
+#ifdef Q_WS_X11
+ oldMiniIcon = KWin::icon( win->winId(), 16, 16, true );
+ oldIcon = KWin::icon( win->winId(), 34, 34, false );
+ if ( oldIcon.isNull() )
+ oldIcon = KWin::icon( win->winId(), 32, 32, true );
+#endif
+
+ permanent( text, oldIcon );
+}
+
+void KWindowInfo::permanent( const TQString &text, const TQPixmap &pix )
+{
+ if ( !oldText.isNull() ) {
+ TQObjectList *l = queryList( TQTIMER_OBJECT_NAME_STRING );
+ TQObjectListIt it( *l );
+ TQObject *obj;
+
+ while ( (obj = it.current()) != 0 ) {
+ ++it;
+ delete obj;
+ }
+ delete l;
+ }
+
+ oldText = TQString::null;
+ display( text, pix );
+}
+
+void KWindowInfo::display( const TQString &text, const TQPixmap &pix )
+{
+ TQPixmap icon;
+ if ( pix.isNull() )
+ icon.load( "bell.png" );
+ else
+ icon = pix;
+
+ if ( win->inherits( "KSystemTray" ) ) {
+ KSystemTray *tray = static_cast<KSystemTray *>( win );
+ tray->setPixmap( icon );
+ TQToolTip::add( tray, text );
+ return;
+ }
+
+ win->setCaption( text );
+ win->setIcon( icon );
+#ifdef Q_WS_X11
+ KWin::setIcons( win->winId(), icon, icon );
+#endif
+}
+
+void KWindowInfo::save()
+{
+ if ( !oldText.isNull() )
+ return;
+
+ if ( win->inherits( "KSystemTray" ) ) {
+ KSystemTray *tray = static_cast<KSystemTray *>( win );
+ oldIcon = *(tray->pixmap());
+ oldText = TQToolTip::textFor( tray );
+ return;
+ }
+
+ oldText = win->caption();
+#ifdef Q_WS_X11
+ oldMiniIcon = KWin::icon( win->winId(), 16, 16, true );
+ oldIcon = KWin::icon( win->winId(), 34, 34, false );
+ if ( oldIcon.isNull() )
+ oldIcon = KWin::icon( win->winId(), 32, 32, true );
+#endif
+
+ if ( oldIcon.isNull() ) {
+ const TQPixmap *px = win->icon();
+ if ( px )
+ oldIcon = *px;
+ else
+ oldIcon.resize( 0, 0 );
+ }
+}
+
+void KWindowInfo::restore()
+{
+ if ( win->inherits( "KSystemTray" ) ) {
+ KSystemTray *tray = static_cast<KSystemTray *>( win );
+ tray->setPixmap( oldIcon );
+ TQToolTip::add( tray, oldText );
+ oldText = TQString::null;
+ return;
+ }
+
+ win->setIcon( oldIcon );
+#ifdef Q_WS_X11
+ KWin::setIcons( win->winId(), oldIcon, oldMiniIcon );
+#endif
+ win->setCaption( oldText );
+ oldText = TQString::null;
+
+ if ( autoDel )
+ delete this;
+}
+
+
+
+
+