summaryrefslogtreecommitdiffstats
path: root/src/widgets/qsplashscreen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/qsplashscreen.cpp')
-rw-r--r--src/widgets/qsplashscreen.cpp271
1 files changed, 271 insertions, 0 deletions
diff --git a/src/widgets/qsplashscreen.cpp b/src/widgets/qsplashscreen.cpp
new file mode 100644
index 000000000..ab528a7a3
--- /dev/null
+++ b/src/widgets/qsplashscreen.cpp
@@ -0,0 +1,271 @@
+/****************************************************************************
+**
+** Definition of TQSplashScreen class
+**
+** Copyright (C) 2005-2008 Trolltech ASA. All rights reserved.
+**
+** This file is part of the widgets module of the TQt GUI Toolkit.
+**
+** This file may be used under the terms of the GNU General
+** Public License versions 2.0 or 3.0 as published by the Free
+** Software Foundation and appearing in the files LICENSE.GPL2
+** and LICENSE.GPL3 included in the packaging of this file.
+** Alternatively you may (at your option) use any later version
+** of the GNU General Public License if such license has been
+** publicly approved by Trolltech ASA (or its successors, if any)
+** and the KDE Free TQt Foundation.
+**
+** Please review the following information to ensure GNU General
+** Public Licensing retquirements will be met:
+** http://trolltech.com/products/qt/licenses/licensing/opensource/.
+** If you are unsure which license is appropriate for your use, please
+** review the following information:
+** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
+** or contact the sales department at sales@trolltech.com.
+**
+** This file may be used under the terms of the Q Public License as
+** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
+** included in the packaging of this file. Licensees holding valid TQt
+** Commercial licenses may use this file in accordance with the TQt
+** Commercial License Agreement provided with the Software.
+**
+** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
+** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
+** herein.
+**
+**********************************************************************/
+
+#include "qsplashscreen.h"
+
+#ifndef QT_NO_SPLASHSCREEN
+
+#include "qapplication.h"
+#include "qpainter.h"
+#include "qpixmap.h"
+
+class TQSplashScreenPrivate
+{
+public:
+ TQPixmap pixmap;
+ TQString currStatus;
+ TQColor currColor;
+ int currAlign;
+};
+
+/*!
+ \class TQSplashScreen qsplashscreen.h
+ \brief The TQSplashScreen widget provides a splash screen that can
+ be shown during application startup.
+
+ \ingroup misc
+ \mainclass
+
+ A splash screen is a widget that is usually displayed when an
+ application is being started. Splash screens are often used for
+ applications that have long start up times (e.g. database or
+ networking applications that take time to establish connections) to
+ provide the user with feedback that the application is loading.
+
+ The splash screen appears centered on the screen. It may be useful to add
+ the \c WStyle_StaysOnTop if you desire to keep above all the windows in the
+ GUI.
+
+ Some X11 window managers do not support the "stays on top" flag. A
+ solution is to set up a timer that periodically calls raise() on
+ the splash screen to simulate the "stays on top" effect.
+
+ The most common usage is to show a splash screen before the main
+ widget is displayed on the screen. This is illustrated in the
+ following code snippet.
+
+ \code
+ int main( int argc, char **argv )
+ {
+ TQApplication app( argc, argv );
+ TQPixmap pixmap( "splash.png" );
+ TQSplashScreen *splash = new TQSplashScreen( pixmap );
+ splash->show();
+ TQMainWindow *mainWin = new TQMainWindow;
+ ...
+ app.setMainWidget( mainWin );
+ mainWin->show();
+ splash->finish( mainWin );
+ delete splash;
+ return app.exec();
+ }
+ \endcode
+
+ It is sometimes useful to update the splash screen with messages,
+ for example, announcing connections established or modules loaded
+ as the application starts up. TQSplashScreen supports this with the
+ message() function. If you wish to do your own drawing you can
+ get a pointer to the pixmap used in the splash screen with pixmap().
+ Alternatively, you can subclass TQSplashScreen and reimplement
+ drawContents().
+
+ The user can hide the splash screen by clicking on it with the
+ mouse. Since the splash screen is typically displayed before the
+ event loop has started running, it is necessary to periodically
+ call TQApplication::processEvents() to receive the mouse clicks.
+
+ \code
+ TQPixmap pixmap( "splash.png" );
+ TQSplashScreen *splash = new TQSplashScreen( pixmap );
+ splash->show();
+ ... // Loading some items
+ splash->message( "Loaded modules" );
+ qApp->processEvents();
+ ... // Establishing connections
+ splash->message( "Established connections" );
+ qApp->processEvents();
+ \endcode
+
+*/
+
+/*!
+ Construct a splash screen that will display the \a pixmap.
+
+ There should be no need to set the widget flags, \a f, except
+ perhaps \c WDestructiveClose or \c WStyle_StaysOnTop.
+*/
+TQSplashScreen::TQSplashScreen( const TQPixmap &pixmap, WFlags f )
+ : TQWidget( 0, 0, WStyle_Customize | WStyle_Splash | f )
+{
+ d = new TQSplashScreenPrivate();
+ d->pixmap = pixmap;
+ setPixmap( d->pixmap ); // Does an implicit repaint
+}
+
+/*!
+ Destructor.
+*/
+TQSplashScreen::~TQSplashScreen()
+{
+ delete d;
+}
+
+/*!
+ \reimp
+*/
+void TQSplashScreen::mousePressEvent( TQMouseEvent * )
+{
+ hide();
+}
+
+/*!
+ This overrides TQWidget::repaint(). It differs from the standard
+ repaint function in that it also calls TQApplication::flush() to
+ ensure the updates are displayed, even when there is no event loop
+ present.
+*/
+void TQSplashScreen::repaint()
+{
+ drawContents();
+ TQWidget::repaint();
+ TQApplication::flush();
+}
+
+/*!
+ \fn TQSplashScreen::messageChanged( const TQString &message )
+
+ This signal is emitted when the message on the splash screen
+ changes. \a message is the new message and is a null-string
+ when the message has been removed.
+
+ \sa message(), clear()
+*/
+
+
+
+/*!
+ Draws the \a message text onto the splash screen with color \a
+ color and aligns the text according to the flags in \a alignment.
+
+ \sa TQt::AlignmentFlags clear()
+*/
+void TQSplashScreen::message( const TQString &message, int alignment,
+ const TQColor &color )
+{
+ d->currStatus = message;
+ d->currAlign = alignment;
+ d->currColor = color;
+ emit messageChanged( d->currStatus );
+ repaint();
+}
+
+/*!
+ Removes the message being displayed on the splash screen
+
+ \sa message()
+ */
+void TQSplashScreen::clear()
+{
+ d->currStatus = TQString::null;
+ emit messageChanged( d->currStatus );
+ repaint();
+}
+
+/*!
+ Makes the splash screen wait until the widget \a mainWin is displayed
+ before calling close() on itself.
+*/
+void TQSplashScreen::finish( TQWidget *mainWin )
+{
+ if ( mainWin ) {
+#if defined(Q_WS_X11)
+ extern void qt_wait_for_window_manager( TQWidget *mainWin );
+ qt_wait_for_window_manager( mainWin );
+#endif
+ }
+ close();
+}
+
+/*!
+ Sets the pixmap that will be used as the splash screen's image to
+ \a pixmap.
+*/
+void TQSplashScreen::setPixmap( const TQPixmap &pixmap )
+{
+ d->pixmap = pixmap;
+ TQRect r(0, 0, d->pixmap.size().width(), d->pixmap.size().height());
+ resize( d->pixmap.size() );
+ move( TQApplication::desktop()->screenGeometry().center() - r.center() );
+ repaint();
+}
+
+/*!
+ Returns the pixmap that is used in the splash screen. The image
+ does not have any of the text drawn by message() calls.
+*/
+TQPixmap* TQSplashScreen::pixmap() const
+{
+ return &( d->pixmap );
+}
+
+/*!
+ \internal
+*/
+void TQSplashScreen::drawContents()
+{
+ TQPixmap textPix = d->pixmap;
+ TQPainter painter( &textPix, this );
+ drawContents( &painter );
+ setErasePixmap( textPix );
+}
+
+/*!
+ Draw the contents of the splash screen using painter \a painter.
+ The default implementation draws the message passed by message().
+ Reimplement this function if you want to do your own drawing on
+ the splash screen.
+*/
+void TQSplashScreen::drawContents( TQPainter *painter )
+{
+ painter->setPen( d->currColor );
+ TQRect r = rect();
+ r.setRect( r.x() + 5, r.y() + 5, r.width() - 10, r.height() - 10 );
+ painter->drawText( r, d->currAlign, d->currStatus );
+}
+
+#endif //QT_NO_SPLASHSCREEN