summaryrefslogtreecommitdiffstats
path: root/kdeui/kpassivepopup.h
diff options
context:
space:
mode:
Diffstat (limited to 'kdeui/kpassivepopup.h')
-rw-r--r--kdeui/kpassivepopup.h363
1 files changed, 363 insertions, 0 deletions
diff --git a/kdeui/kpassivepopup.h b/kdeui/kpassivepopup.h
new file mode 100644
index 000000000..40c1e789b
--- /dev/null
+++ b/kdeui/kpassivepopup.h
@@ -0,0 +1,363 @@
+// -*- c++ -*-
+
+/*
+ * Copyright : (C) 2001-2002 by Richard Moore
+ * Copyright : (C) 2004-2005 by Sascha Cunz
+ * License : This file is released under the terms of the LGPL, version 2.
+ * Email : rich@kde.org
+ * Email : sascha.cunz@tiscali.de
+ */
+
+#ifndef KPASSIVEPOPUP_H
+#define KPASSIVEPOPUP_H
+
+#include <qframe.h>
+
+#include <kdelibs_export.h>
+
+class QBoxLayout;
+class QTimer;
+class QLabel;
+class QVBox;
+
+/**
+ * @short A dialog-like popup that displays messages without interupting the user.
+ *
+ * The simplest uses of KPassivePopup are by using the various message() static
+ * methods. The position the popup appears at depends on the type of the parent window:
+ *
+ * @li Normal Windows: The popup is placed adjacent to the icon of the window.
+ * @li System Tray Windows: The popup is placed adjact to the system tray window itself.
+ * @li Skip Taskbar Windows: The popup is placed adjact to the window
+ * itself if it is visible, and at the edge of the desktop otherwise.
+ *
+ * You also have the option of calling show with a QPoint as a parameter that
+ * removes the automatic placing of KPassivePopup and shows it in the point you want.
+ *
+ * The most basic use of KPassivePopup displays a popup containing a piece of text:
+ * \code
+ * KPassivePopup::message( "This is the message", this );
+ * \endcode
+ * We can create popups with titles and icons too, as this example shows:
+ * \code
+ * QPixmap px;
+ * px.load( "hi32-app-logtracker.png" );
+ * KPassivePopup::message( "Some title", "This is the main text", px, this );
+ * \endcode
+ * For more control over the popup, you can use the setView(QWidget *) method
+ * to create a custom popup.
+ * \code
+ * KPassivePopup *pop = new KPassivePopup( parent );
+ *
+ * QVBox *vb = new QVBox( pop );
+ * (void) new QLabel( vb, "<b>Isn't this great?</b>" );
+ *
+ * QHBox *box = new QHBox( vb );
+ * (void) new QPushButton( box, "Yes" );
+ * (void) new QPushButton( box, "No" );
+ *
+ * pop->setView( vb );
+ * pop->show();
+ * \endcode
+ *
+ * @version $Id$
+ * @since 3.1
+ * @author Richard Moore, rich@kde.org
+ * @author Sascha Cunz, sascha.cunz@tiscali.de
+ */
+class KDEUI_EXPORT KPassivePopup : public QFrame
+{
+ Q_OBJECT
+ Q_PROPERTY (bool autoDelete READ autoDelete WRITE setAutoDelete )
+ Q_PROPERTY (int timeout READ timeout WRITE setTimeout )
+
+public:
+ /**
+ * Styles that a KPassivePopup can have.
+ * @since 3.5
+ */
+ enum PopupStyle
+ {
+ Boxed, ///< Information will appear in a framed box (default)
+ Balloon, ///< Information will appear in a comic-alike balloon
+ CustomStyle=128 ///< Ids greater than this are reserved for use by subclasses
+ };
+
+ /**
+ * Creates a popup for the specified widget.
+ */
+ KPassivePopup( QWidget *parent=0, const char *name=0, WFlags f=0 );
+
+ /**
+ * Creates a popup for the specified window.
+ */
+ KPassivePopup( WId parent, const char *name=0, WFlags f=0 );
+
+ /**
+ * Creates a popup for the specified widget.
+ * @since 3.5
+ */
+ KPassivePopup( int popupStyle, QWidget *parent=0, const char *name=0, WFlags f=0 );
+
+ /**
+ * Creates a popup for the specified window.
+ * @since 3.5
+ */
+ KPassivePopup( int popupStyle, WId parent, const char *name=0, WFlags f=0 );
+
+ /**
+ * Cleans up.
+ */
+ virtual ~KPassivePopup();
+
+ /**
+ * Sets the main view to be the specified widget (which must be a child of the popup).
+ */
+ void setView( QWidget *child );
+
+ /**
+ * Creates a standard view then calls setView(QWidget*) .
+ */
+ void setView( const QString &caption, const QString &text = QString::null );
+
+ /**
+ * Creates a standard view then calls setView(QWidget*) .
+ */
+ virtual void setView( const QString &caption, const QString &text, const QPixmap &icon );
+
+ /**
+ * Returns a widget that is used as standard view if one of the
+ * setView() methods taking the QString arguments is used.
+ * You can use the returned widget to customize the passivepopup while
+ * keeping the look similar to the "standard" passivepopups.
+ *
+ * After customizing the widget, pass it to setView( QWidget* )
+ *
+ * @param caption The window caption (title) on the popup
+ * @param text The text for the popup
+ * @param icon The icon to use for the popup
+ * @param parent The parent widget used for the returned QVBox. If left 0L,
+ * then "this", i.e. the passive popup object will be used.
+ *
+ * @return a QVBox containing the given arguments, looking like the
+ * standard passivepopups.
+ * @see setView( QWidget * )
+ * @see setView( const QString&, const QString& )
+ * @see setView( const QString&, const QString&, const QPixmap& )
+ */
+ QVBox * standardView( const QString& caption, const QString& text,
+ const QPixmap& icon, QWidget *parent = 0L );
+
+ /**
+ * Returns the main view.
+ */
+ QWidget *view() const { return msgView; }
+
+ /**
+ * Returns the delay before the popup is removed automatically.
+ */
+ int timeout() const { return hideDelay; }
+
+ /**
+ * Enables / disables auto-deletion of this widget when the timeout
+ * occurs.
+ * The default is false. If you use the class-methods message(),
+ * auto-delection is turned on by default.
+ */
+ virtual void setAutoDelete( bool autoDelete );
+
+ /**
+ * @returns true if the widget auto-deletes itself when the timeout occurs.
+ * @see setAutoDelete
+ */
+ bool autoDelete() const { return m_autoDelete; }
+
+ /**
+ * Sets the anchor of this balloon. The balloon tries automatically to adjust
+ * itself somehow around the point.
+ * @since 3.5
+ */
+ void setAnchor( const QPoint& anchor );
+
+ // TODO KDE4: give all the statics method a const QPoint p = QPoint() that in
+ // case the point is not null calls the show(cosnt QPoint &p) method instead
+ // the show() one.
+ /**
+ * Convenience method that displays popup with the specified message beside the
+ * icon of the specified widget.
+ * Note that the returned object is destroyed when it is hidden.
+ * @see setAutoDelete
+ */
+ static KPassivePopup *message( const QString &text, QWidget *parent, const char *name=0 );
+
+ /**
+ * Convenience method that displays popup with the specified caption and message
+ * beside the icon of the specified widget.
+ * Note that the returned object is destroyed when it is hidden.
+ * @see setAutoDelete
+ */
+ static KPassivePopup *message( const QString &caption, const QString &text,
+ QWidget *parent, const char *name=0 );
+
+ /**
+ * Convenience method that displays popup with the specified icon, caption and
+ * message beside the icon of the specified widget.
+ * Note that the returned object is destroyed when it is hidden.
+ * @see setAutoDelete
+ */
+ static KPassivePopup *message( const QString &caption, const QString &text,
+ const QPixmap &icon,
+ QWidget *parent, const char *name=0, int timeout = -1 );
+
+ /**
+ * Convenience method that displays popup with the specified icon, caption and
+ * message beside the icon of the specified window.
+ * Note that the returned object is destroyed when it is hidden.
+ * @see setAutoDelete
+ */
+ static KPassivePopup *message( const QString &caption, const QString &text,
+ const QPixmap &icon,
+ WId parent, const char *name=0, int timeout = -1 );
+
+ /**
+ * Convenience method that displays popup with the specified popup-style and message beside the
+ * icon of the specified widget.
+ * Note that the returned object is destroyed when it is hidden.
+ * @see setAutoDelete
+ */
+ static KPassivePopup *message( int popupStyle, const QString &text, QWidget *parent,
+ const char *name=0 );
+
+ /**
+ * Convenience method that displays popup with the specified popup-style, caption and message
+ * beside the icon of the specified widget.
+ * Note that the returned object is destroyed when it is hidden.
+ * @see setAutoDelete
+ */
+ static KPassivePopup *message( int popupStyle, const QString &caption, const QString &text,
+ QWidget *parent, const char *name=0 );
+
+ /**
+ * Convenience method that displays popup with the specified popup-style, icon, caption and
+ * message beside the icon of the specified widget.
+ * Note that the returned object is destroyed when it is hidden.
+ * @see setAutoDelete
+ */
+ static KPassivePopup *message( int popupStyle, const QString &caption, const QString &text,
+ const QPixmap &icon,
+ QWidget *parent, const char *name=0, int timeout = -1 );
+
+ /**
+ * Convenience method that displays popup with the specified popup-style, icon, caption and
+ * message beside the icon of the specified window.
+ * Note that the returned object is destroyed when it is hidden.
+ * @see setAutoDelete
+ */
+ static KPassivePopup *message( int popupStyle, const QString &caption, const QString &text,
+ const QPixmap &icon,
+ WId parent, const char *name=0, int timeout = -1 );
+
+
+public slots:
+ /**
+ * Sets the delay for the popup is removed automatically. Setting the delay to 0
+ * disables the timeout, if you're doing this, you may want to connect the
+ * clicked() signal to the hide() slot.
+ * Setting the delay to -1 makes it use the default value.
+ *
+ * @see timeout
+ */
+ void setTimeout( int delay );
+
+ /**
+ * Reimplemented to reposition the popup.
+ */
+ virtual void show();
+
+ /**
+ * Shows the popup in the given point
+ * @since 3.5
+ */
+ void show(const QPoint &p);
+
+signals:
+ /**
+ * Emitted when the popup is clicked.
+ */
+ void clicked();
+
+ /**
+ * Emitted when the popup is clicked.
+ */
+ void clicked( QPoint pos );
+
+protected:
+ /**
+ * This method positions the popup.
+ */
+ virtual void positionSelf();
+
+ /**
+ * Reimplemented to destroy the object when autoDelete() is
+ * enabled.
+ */
+ virtual void hideEvent( QHideEvent * );
+
+ /**
+ * Moves the popup to be adjacent to the icon of the specified rectangle.
+ */
+ void moveNear( QRect target );
+
+ /**
+ * Reimplemented to detect mouse clicks.
+ */
+ virtual void mouseReleaseEvent( QMouseEvent *e );
+
+ /**
+ * If no relative window (eg taskbar button, system tray window) is
+ * available, use this rectangle (pass it to moveNear()).
+ * Basically KWinModule::workArea() with width and height set to 0
+ * so that moveNear uses the upper-left position.
+ * @return The QRect to be passed to moveNear() if no other is
+ * available.
+ */
+ QRect defaultArea() const;
+
+ /**
+ * Updates the transparency mask. Unused if PopupStyle == Boxed
+ * @since 3.5
+ */
+ void updateMask();
+
+ /**
+ * Overwrite to paint the border when PopupStyle == Balloon.
+ * Unused if PopupStyle == Boxed
+ */
+ virtual void paintEvent( QPaintEvent* pe );
+
+private:
+ void init( int popupStyle );
+
+ WId window;
+ QWidget *msgView;
+ QBoxLayout *topLayout;
+ int hideDelay;
+ QTimer *hideTimer;
+
+ QLabel *ttlIcon;
+ QLabel *ttl;
+ QLabel *msg;
+
+ bool m_autoDelete;
+
+ /* @internal */
+ class Private;
+ Private *d;
+};
+
+#endif // KPASSIVEPOPUP_H
+
+// Local Variables:
+// c-basic-offset: 4
+// End:
+