summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/widgets/tqlabel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/widgets/tqlabel.cpp')
-rw-r--r--tqtinterface/qt4/src/widgets/tqlabel.cpp1194
1 files changed, 0 insertions, 1194 deletions
diff --git a/tqtinterface/qt4/src/widgets/tqlabel.cpp b/tqtinterface/qt4/src/widgets/tqlabel.cpp
deleted file mode 100644
index 206a7cd..0000000
--- a/tqtinterface/qt4/src/widgets/tqlabel.cpp
+++ /dev/null
@@ -1,1194 +0,0 @@
-/**********************************************************************
-**
-** Implementation of TQLabel widget class
-**
-** Created : 941215
-**
-** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA.
-**
-** 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 requirements 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 "tqlabel.h"
-#ifndef TQT_NO_LABEL
-#include "tqpainter.h"
-#include "tqdrawutil.h"
-#include "tqaccel.h"
-#include "tqmovie.h"
-#include "tqimage.h"
-#include "tqbitmap.h"
-#include "tqpicture.h"
-#include "tqapplication.h"
-#include "tqsimplerichtext.h"
-#include "tqstylesheet.h"
-#include "tqstyle.h"
-
-class TQLabelPrivate
-{
-public:
- TQLabelPrivate()
- :img(0), pix(0), valid_hints( -1 )
- {}
- TQImage* img; // for scaled contents
- TQPixmap* pix; // for scaled contents
- TQSize sh;
- TQSize msh;
- int valid_hints; // stores the frameWidth() for the stored size hint, -1 otherwise
-};
-
-
-/*!
- \class TQLabel tqlabel.h
- \brief The TQLabel widget provides a text or image display.
-
- \ingroup basic
- \ingroup text
- \mainclass
-
- TQLabel is used for displaying text or an image. No user
- interaction functionality is provided. The visual appearance of
- the label can be configured in various ways, and it can be used
- for specifying a focus accelerator key for another widget.
-
- A TQLabel can contain any of the following content types:
- \table
- \header \i Content \i Setting
- \row \i Plain text
- \i Pass a TQString to setText().
- \row \i Rich text
- \i Pass a TQString that contains rich text to setText().
- \row \i A pixmap
- \i Pass a TQPixmap to setPixmap().
- \row \i A movie
- \i Pass a TQMovie to setMovie().
- \row \i A number
- \i Pass an \e int or a \e double to setNum(), which converts
- the number to plain text.
- \row \i Nothing
- \i The same as an empty plain text. This is the default. Set
- by clear().
- \endtable
-
- When the content is changed using any of these functions, any
- previous content is cleared.
-
- The look of a TQLabel can be tuned in several ways. All the
- settings of TQFrame are available for specifying a widget frame.
- The positioning of the content within the TQLabel widget area can
- be tuned with tqsetAlignment() and setIndent(). For example, this
- code sets up a sunken panel with a two-line text in the bottom
- right corner (both lines being flush with the right side of the
- label):
- \code
- TQLabel *label = new TQLabel( this );
- label->setFrameStyle( TQFrame::Panel | TQFrame::Sunken );
- label->setText( "first line\nsecond line" );
- label->tqsetAlignment( AlignBottom | AlignRight );
- \endcode
-
- A TQLabel is often used as a label for an interactive widget. For
- this use TQLabel provides a useful mechanism for adding an
- accelerator key (see TQAccel) that will set the keyboard focus to
- the other widget (called the TQLabel's "buddy"). For example:
- \code
- TQLineEdit* phoneEdit = new TQLineEdit( this, "phoneEdit" );
- TQLabel* phoneLabel = new TQLabel( phoneEdit, "&Phone:", this, "phoneLabel" );
- \endcode
-
- In this example, keyboard focus is transferred to the label's
- buddy (the TQLineEdit) when the user presses Alt+P. You can
- also use the setBuddy() function to accomplish the same thing.
-
- <img src=qlabel-m.png> <img src=qlabel-w.png>
-
- \sa TQLineEdit, TQTextEdit, TQPixmap, TQMovie,
- \link guibooks.html#fowler GUI Design Handbook: Label\endlink
-*/
-
-/*!
- \fn TQPicture * TQLabel::picture() const
-
- Returns the label's picture or 0 if the label doesn't have a
- picture.
-*/
-
-
-/*!
- Constructs an empty label.
-
- The \a parent, \a name and widget flag \a f, arguments are passed
- to the TQFrame constructor.
-
- \sa tqsetAlignment(), setFrameStyle(), setIndent()
-*/
-
-TQLabel::TQLabel( TQWidget *parent, const char *name, WFlags f )
- : TQFrame( parent, name, f | TQt::WMouseNoMask )
-{
- init();
-}
-
-
-/*!
- Constructs a label that displays the text, \a text.
-
- The \a parent, \a name and widget flag \a f, arguments are passed
- to the TQFrame constructor.
-
- \sa setText(), tqsetAlignment(), setFrameStyle(), setIndent()
-*/
-
-TQLabel::TQLabel( const TQString &text, TQWidget *parent, const char *name,
- WFlags f )
- : TQFrame( parent, name, f | TQt::WMouseNoMask )
-{
- init();
- setText( text );
-}
-
-
-/*!
- Constructs a label that displays the text \a text. The label has a
- buddy widget, \a buddy.
-
- If the \a text contains an underlined letter (a letter preceded by
- an ampersand, \&), and the text is in plain text format, when the
- user presses Alt+ the underlined letter, focus is passed to the
- buddy widget.
-
- The \a parent, \a name and widget flag, \a f, arguments are passed
- to the TQFrame constructor.
-
- \sa setText(), setBuddy(), tqsetAlignment(), setFrameStyle(),
- setIndent()
-*/
-TQLabel::TQLabel( TQWidget *buddy, const TQString &text,
- TQWidget *parent, const char *name, WFlags f )
- : TQFrame( parent, name, f | TQt::WMouseNoMask )
-{
- init();
-#ifndef TQT_NO_ACCEL
- setBuddy( buddy );
-#endif
- setText( text );
-}
-
-/*!
- Destroys the label.
-*/
-
-TQLabel::~TQLabel()
-{
- clearContents();
- delete d;
-}
-
-
-void TQLabel::init()
-{
- lpixmap = 0;
-#ifndef TQT_NO_MOVIE
- lmovie = 0;
-#endif
-#ifndef TQT_NO_ACCEL
- lbuddy = 0;
- accel = 0;
-#endif
- lpixmap = 0;
-#ifndef TQT_NO_PICTURE
- lpicture = 0;
-#endif
- align = TQt::AlignAuto | TQt::AlignVCenter | TQt::ExpandTabs;
- extraMargin = -1;
- autoresize = FALSE;
- scaledcontents = FALSE;
- textformat = TQt::AutoText;
-#ifndef TQT_NO_RICHTEXT
- doc = 0;
-#endif
-
- tqsetSizePolicy( TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred ) );
- d = new TQLabelPrivate;
-}
-
-
-/*!
- \property TQLabel::text
- \brief the label's text
-
- If no text has been set this will return an empty string. Setting
- the text clears any previous content, unless they are the same.
-
- The text will be interpreted either as a plain text or as a rich
- text, depending on the text format setting; see setTextFormat().
- The default setting is \c AutoText, i.e. TQLabel will try to
- auto-detect the format of the text set.
-
- If the text is interpreted as a plain text and a buddy has been
- set, the buddy accelerator key is updated from the new text.
-
- The label resizes itself if auto-resizing is enabled.
-
- Note that Qlabel is well-suited to display small rich text
- documents, i.e. those small documents that get their document
- specific settings (font, text color, link color) from the label's
- palette and font properties. For large documents, use TQTextEdit
- in read-only mode instead. TQTextEdit will flicker less on resize
- and can also provide a scrollbar when necessary.
-
- \sa text, setTextFormat(), setBuddy(), tqalignment
-*/
-
-void TQLabel::setText( const TQString &text )
-{
- if ( ltext == text )
- return;
- TQSize osh = tqsizeHint();
-#ifndef TQT_NO_RICHTEXT
- bool hadRichtext = doc != 0;
-#endif
- clearContents();
- ltext = text;
-#ifndef TQT_NO_RICHTEXT
- bool useRichText = (textformat == TQt::RichText ||
- ( ( textformat == TQt::AutoText ) && TQStyleSheet::mightBeRichText(ltext) ) );
-#else
- bool useRichText = TRUE;
-#endif
-#ifndef TQT_NO_ACCEL
- // ### Setting accelerators for rich text labels will not work.
- // Eg. <b>&gt;Hello</b> will return ALT+G which is clearly
- // not intended.
- if ( !useRichText ) {
- int p = TQAccel::shortcutKey( ltext );
- if ( p ) {
- if ( !accel )
- accel = new TQAccel( this, "accel label accel" );
- accel->connectItem( accel->insertItem( p ),
- this, TQT_SLOT(acceleratorSlot()) );
- }
- }
-#endif
-#ifndef TQT_NO_RICHTEXT
- if ( useRichText ) {
- if ( !hadRichtext )
- align |= TQt::WordBreak;
- TQString t = ltext;
- if ( align & Qt::AlignRight )
- t.prepend( "<div align=\"right\">");
- else if ( align & Qt::AlignHCenter )
- t.prepend( "<div align=\"center\">");
- if ( (align & TQt::WordBreak) == 0 )
- t.prepend( "<nobr>" );
- doc = new TQSimpleRichText( t, font() );
- }
-#endif
-
- updateLabel( osh );
-}
-
-
-/*!
- Clears any label contents. Equivalent to setText( "" ).
-*/
-
-void TQLabel::clear()
-{
- setText( TQString::tqfromLatin1("") );
-}
-
-/*!
- \property TQLabel::pixmap
- \brief the label's pixmap
-
- If no pixmap has been set this will return an invalid pixmap.
-
- Setting the pixmap clears any previous content, and resizes the
- label if \l TQLabel::autoResize() is TRUE. The buddy accelerator,
- if any, is disabled.
-*/
-void TQLabel::setPixmap( const TQPixmap &pixmap )
-{
- TQSize osh = tqsizeHint();
-
- if ( !lpixmap || lpixmap->serialNumber() != pixmap.serialNumber() ) {
- clearContents();
- lpixmap = new TQPixmap( pixmap );
- }
-
- if ( lpixmap->depth() == 1 && !lpixmap->mask() )
- lpixmap->setMask( *((TQBitmap *)lpixmap) );
-
- updateLabel( osh );
-}
-
-#ifndef TQT_NO_PICTURE
-/*!
- Sets the label contents to \a picture. Any previous content is
- cleared.
-
- The buddy accelerator, if any, is disabled.
-
- \sa picture(), setBuddy()
-*/
-
-void TQLabel::setPicture( const TQPicture &picture )
-{
- TQSize osh = tqsizeHint();
- clearContents();
- lpicture = new TQPicture( picture );
-
- updateLabel( osh );
-}
-#endif // TQT_NO_PICTURE
-
-/*!
- Sets the label contents to plain text containing the textual
- representation of integer \a num. Any previous content is cleared.
- Does nothing if the integer's string representation is the same as
- the current contents of the label.
-
- The buddy accelerator, if any, is disabled.
-
- The label resizes itself if auto-resizing is enabled.
-
- \sa setText(), TQString::setNum(), setBuddy()
-*/
-
-void TQLabel::setNum( int num )
-{
- TQString str;
- str.setNum( num );
- setText( str );
-}
-
-/*!
- \overload
-
- Sets the label contents to plain text containing the textual
- representation of double \a num. Any previous content is cleared.
- Does nothing if the double's string representation is the same as
- the current contents of the label.
-
- The buddy accelerator, if any, is disabled.
-
- The label resizes itself if auto-resizing is enabled.
-
- \sa setText(), TQString::setNum(), setBuddy()
-*/
-
-void TQLabel::setNum( double num )
-{
- TQString str;
- str.setNum( num );
- setText( str );
-}
-
-/*!
- \property TQLabel::tqalignment
- \brief the tqalignment of the label's contents
-
- The tqalignment is a bitwise OR of \c TQt::AlignmentFlags and \c
- TQt::TextFlags values. The \c ExpandTabs, \c SingleLine and \c
- ShowPrefix flags apply only if the label contains plain text;
- otherwise they are ignored. The \c DontClip flag is always
- ignored. \c WordBreak applies to both rich text and plain text
- labels. The \c BreakAnywhere flag is not supported in TQLabel.
-
- If the label has a buddy, the \c ShowPrefix flag is forced to
- TRUE.
-
- The default tqalignment is \c{AlignAuto | AlignVCenter | ExpandTabs}
- if the label doesn't have a buddy and \c{AlignAuto | AlignVCenter
- | ExpandTabs | ShowPrefix} if the label has a buddy. If the label
- contains rich text, additionally \c WordBreak is turned on.
-
- \sa TQt::AlignmentFlags, tqalignment, setBuddy(), text
-*/
-
-void TQLabel::tqsetAlignment( int tqalignment )
-{
- if ( tqalignment == align )
- return;
- TQSize osh = tqsizeHint();
-#ifndef TQT_NO_ACCEL
- if ( lbuddy )
- align = tqalignment | TQt::ShowPrefix;
- else
-#endif
- align = tqalignment;
-
-#ifndef TQT_NO_RICHTEXT
- TQString t = ltext;
- if ( !t.isNull() ) {
- ltext = TQString::null;
- setText( t );
- }
-#endif
-
- updateLabel( osh );
-}
-
-
-/*!
- \property TQLabel::indent
- \brief the label's text indent in pixels
-
- If a label displays text, the indent applies to the left edge if
- tqalignment() is \c AlignLeft, to the right edge if tqalignment() is
- \c AlignRight, to the top edge if tqalignment() is \c AlignTop, and
- to to the bottom edge if tqalignment() is \c AlignBottom.
-
- If indent is negative, or if no indent has been set, the label
- computes the effective indent as follows: If frameWidth() is 0,
- the effective indent becomes 0. If frameWidth() is greater than 0,
- the effective indent becomes half the width of the "x" character
- of the widget's current font().
-
- \sa tqalignment, frameWidth(), font()
-*/
-
-void TQLabel::setIndent( int indent )
-{
- extraMargin = indent;
- updateLabel( TQSize( -1, -1 ) );
-}
-
-
-/*!
- \fn bool TQLabel::autoResize() const
-
- \obsolete
-
- Returns TRUE if auto-resizing is enabled, or FALSE if auto-resizing
- is disabled.
-
- Auto-resizing is disabled by default.
-
- \sa setAutoResize()
-*/
-
-/*! \obsolete
- Enables auto-resizing if \a enable is TRUE, or disables it if \a
- enable is FALSE.
-
- When auto-resizing is enabled the label will resize itself to fit
- the contents whenever the contents change. The top-left corner is
- not moved. This is useful for TQLabel widgets that are not managed by
- a TQLayout (e.g., top-level widgets).
-
- Auto-resizing is disabled by default.
-
- \sa autoResize(), adjustSize(), tqsizeHint()
-*/
-
-void TQLabel::setAutoResize( bool enable )
-{
- if ( (bool)autoresize != enable ) {
- autoresize = enable;
- if ( autoresize )
- adjustSize(); // calls resize which repaints
- }
-}
-
-
-
-/*!
- Returns the size that will be used if the width of the label is \a
- w. If \a w is -1, the tqsizeHint() is returned.
-*/
-
-TQSize TQLabel::sizeForWidth( int w ) const
-{
- TQRect br;
- TQPixmap *pix = pixmap();
-#ifndef TQT_NO_PICTURE
- TQPicture *pic = picture();
-#else
- const int pic = 0;
-#endif
-#ifndef TQT_NO_MOVIE
- TQMovie *mov = movie();
-#else
- const int mov = 0;
-#endif
- int hextra = 2 * frameWidth();
- int vextra = hextra;
- TQFontMetrics fm( fontMetrics() );
- int xw = fm.width( 'x' );
- if ( !mov && !pix && !pic ) {
- int m = indent();
- if ( m < 0 && hextra ) // no indent, but we do have a frame
- m = xw / 2 - margin();
- if ( m >= 0 ) {
- int horizAlign = TQApplication::horizontalAlignment( align );
- if ( (horizAlign & Qt::AlignLeft) || (horizAlign & Qt::AlignRight ) )
- hextra += m;
- if ( (align & Qt::AlignTop) || (align & Qt::AlignBottom ) )
- vextra += m;
- }
- }
-
- if ( pix )
- br = pix->rect();
-#ifndef TQT_NO_PICTURE
- else if ( pic )
- br = pic->boundingRect();
-#endif
-#ifndef TQT_NO_MOVIE
- else if ( mov )
- br = mov->framePixmap().rect();
-#endif
-#ifndef TQT_NO_RICHTEXT
- else if ( doc ) {
- int oldW = doc->width();
- if ( align & TQt::WordBreak ) {
- if ( w < 0 )
- doc->adjustSize();
- else
- doc->setWidth( w-hextra );
- }
- br = TQRect( 0, 0, doc->widthUsed(), doc->height() );
- doc->setWidth( oldW );
- }
-#endif
- else {
- bool tryWidth = (w < 0) && (align & TQt::WordBreak);
- if ( tryWidth )
- w = xw * 80;
- else if ( w < 0 )
- w = 2000;
- w -= hextra;
- br = fm.boundingRect( 0, 0, w ,2000, tqalignment(), text() );
- if ( tryWidth && br.height() < 4*fm.lineSpacing() && br.width() > w/2 )
- br = fm.boundingRect( 0, 0, w/2, 2000, tqalignment(), text() );
- if ( tryWidth && br.height() < 2*fm.lineSpacing() && br.width() > w/4 )
- br = fm.boundingRect( 0, 0, w/4, 2000, tqalignment(), text() );
- }
- int wid = br.width() + hextra;
- int hei = br.height() + vextra;
-
- return TQSize( wid, hei );
-}
-
-
-/*!
- \reimp
-*/
-
-int TQLabel::heightForWidth( int w ) const
-{
- if (
-#ifndef TQT_NO_RICHTEXT
- doc ||
-#endif
- (align & TQt::WordBreak) )
- return sizeForWidth( w ).height();
- return TQWidget::heightForWidth( w );
-}
-
-
-
-/*!\reimp
-*/
-TQSize TQLabel::tqsizeHint() const
-{
- if ( d->valid_hints != frameWidth() )
- (void) TQLabel::tqminimumSizeHint();
- return d->sh;
-}
-
-/*!
- \reimp
-*/
-
-TQSize TQLabel::tqminimumSizeHint() const
-{
- if ( d->valid_hints == frameWidth() )
- return d->msh;
-
- constPolish();
- d->valid_hints = frameWidth();
- d->sh = sizeForWidth( -1 );
- TQSize sz( -1, -1 );
-
- if (
-#ifndef TQT_NO_RICHTEXT
- !doc &&
-#endif
- (align & TQt::WordBreak) == 0 ) {
- sz = d->sh;
- } else {
- // think about caching these for performance
- sz.rwidth() = sizeForWidth( 0 ).width();
- sz.rheight() = sizeForWidth(TQWIDGETSIZE_MAX).height();
- if ( d->sh.height() < sz.height() )
- sz.rheight() = d->sh.height();
- }
- if ( tqsizePolicy().horData() == TQSizePolicy::Ignored )
- sz.rwidth() = -1;
- if ( tqsizePolicy().verData() == TQSizePolicy::Ignored )
- sz.rheight() = -1;
- d->msh = sz;
- return sz;
-}
-
-/*!
- \reimp
-*/
-void TQLabel::resizeEvent( TQResizeEvent* e )
-{
- TQFrame::resizeEvent( e );
-
-#ifdef TQT_NO_RICHTEXT
- static const bool doc = FALSE;
-#endif
-
- // optimize for standard labels
- if ( frameShape() == NoFrame && (align & TQt::WordBreak) == 0 && !doc &&
- ( e->oldSize().width() >= e->size().width() && (align & Qt::AlignLeft ) == Qt::AlignLeft )
- && ( e->oldSize().height() >= e->size().height() && (align & Qt::AlignTop ) == Qt::AlignTop ) ) {
- setWFlags( TQt::WResizeNoErase );
- return;
- }
-
- clearWFlags( TQt::WResizeNoErase );
- TQRect cr = contentsRect();
- if ( !lpixmap || !cr.isValid() ||
- // masked pixmaps can only reduce flicker when being top/left
- // aligned and when we do not perform scaled contents
- ( lpixmap->hasAlpha() && ( scaledcontents || ( ( align & (Qt::AlignLeft|Qt::AlignTop) ) != (Qt::AlignLeft|Qt::AlignTop) ) ) ) )
- return;
-
- setWFlags( TQt::WResizeNoErase );
-
- if ( !scaledcontents ) {
- // don't we all love TQFrame? Reduce pixmap flicker
- TQRegion reg = TQRect( TQPoint(0, 0), e->size() );
- reg = reg.subtract( cr );
- int x = cr.x();
- int y = cr.y();
- int w = lpixmap->width();
- int h = lpixmap->height();
- if ( (align & TQt::AlignVCenter) == TQt::AlignVCenter )
- y += cr.height()/2 - h/2;
- else if ( (align & TQt::AlignBottom) == TQt::AlignBottom)
- y += cr.height() - h;
- if ( (align & TQt::AlignRight) == TQt::AlignRight )
- x += cr.width() - w;
- else if ( (align & TQt::AlignHCenter) == TQt::AlignHCenter )
- x += cr.width()/2 - w/2;
- if ( x > cr.x() )
- reg = reg.unite( TQRect( cr.x(), cr.y(), x - cr.x(), cr.height() ) );
- if ( y > cr.y() )
- reg = reg.unite( TQRect( cr.x(), cr.y(), cr.width(), y - cr.y() ) );
-
- if ( x + w < cr.right() )
- reg = reg.unite( TQRect( x + w, cr.y(), cr.right() - x - w, cr.height() ) );
- if ( y + h < cr.bottom() )
- reg = reg.unite( TQRect( cr.x(), y + h, cr.width(), cr.bottom() - y - h ) );
-
- erase( reg );
- }
-}
-
-
-/*!
- Draws the label contents using the painter \a p.
-*/
-
-void TQLabel::drawContents( TQPainter *p )
-{
- TQRect cr = contentsRect();
-
- TQPixmap *pix = pixmap();
-#ifndef TQT_NO_PICTURE
- TQPicture *pic = picture();
-#else
- const int pic = 0;
-#endif
-#ifndef TQT_NO_MOVIE
- TQMovie *mov = movie();
-#else
- const int mov = 0;
-#endif
-
- if ( !mov && !pix && !pic ) {
- int m = indent();
- if ( m < 0 && frameWidth() ) // no indent, but we do have a frame
- m = fontMetrics().width('x') / 2 - margin();
- if ( m > 0 ) {
- int hAlign = TQApplication::horizontalAlignment( align );
- if ( hAlign & Qt::AlignLeft )
- cr.setLeft( cr.left() + m );
- if ( hAlign & Qt::AlignRight )
- cr.setRight( cr.right() - m );
- if ( align & Qt::AlignTop )
- cr.setTop( cr.top() + m );
- if ( align & Qt::AlignBottom )
- cr.setBottom( cr.bottom() - m );
- }
- }
-
-#ifndef TQT_NO_MOVIE
- if ( mov ) {
- // ### should add movie to qDrawItem
- TQRect r = tqstyle().tqitemRect( p, cr, align, isEnabled(), &(mov->framePixmap()),
- TQString() );
- // ### could resize movie frame at this point
- p->drawPixmap(r.x(), r.y(), mov->framePixmap() );
- }
- else
-#endif
-#ifndef TQT_NO_RICHTEXT
- if ( doc ) {
- doc->setWidth(p, cr.width() );
- int rh = doc->height();
- int yo = 0;
- if ( align & Qt::AlignVCenter )
- yo = (cr.height()-rh)/2;
- else if ( align & Qt::AlignBottom )
- yo = cr.height()-rh;
- if (! isEnabled() &&
- tqstyle().tqstyleHint(TQStyle::SH_EtchDisabledText, this)) {
- TQColorGroup cg = tqcolorGroup();
- cg.setColor( TQColorGroup::Text, cg.light() );
- doc->draw(p, cr.x()+1, cr.y()+yo+1, cr, cg, 0);
- }
-
- // TQSimpleRichText always draws with TQColorGroup::Text as with
- // background mode PaletteBase. TQLabel typically has
- // background mode PaletteBackground, so we create a temporary
- // color group with the text color adjusted.
- TQColorGroup cg = tqcolorGroup();
- if ( backgroundMode() != TQt::PaletteBase && isEnabled() )
- cg.setColor( TQColorGroup::Text, paletteForegroundColor() );
-
- doc->draw(p, cr.x(), cr.y()+yo, cr, cg, 0);
- } else
-#endif
-#ifndef TQT_NO_PICTURE
- if ( pic ) {
- TQRect br = pic->boundingRect();
- int rw = br.width();
- int rh = br.height();
- if ( scaledcontents ) {
- p->save();
- p->translate( cr.x(), cr.y() );
-#ifndef TQT_NO_TRANSFORMATIONS
- p->scale( (double)cr.width()/rw, (double)cr.height()/rh );
-#endif
- p->drawPicture( -br.x(), -br.y(), *pic );
- p->restore();
- } else {
- int xo = 0;
- int yo = 0;
- if ( align & Qt::AlignVCenter )
- yo = (cr.height()-rh)/2;
- else if ( align & Qt::AlignBottom )
- yo = cr.height()-rh;
- if ( align & Qt::AlignRight )
- xo = cr.width()-rw;
- else if ( align & Qt::AlignHCenter )
- xo = (cr.width()-rw)/2;
- p->drawPicture( cr.x()+xo-br.x(), cr.y()+yo-br.y(), *pic );
- }
- } else
-#endif
- {
-#ifndef TQT_NO_IMAGE_SMOOTHSCALE
- if ( scaledcontents && pix ) {
- if ( !d->img )
- d->img = new TQImage( lpixmap->convertToImage() );
-
- if ( !d->pix )
- d->pix = new TQPixmap;
- if ( d->pix->size() != cr.size() )
- d->pix->convertFromImage( d->img->smoothScale( cr.width(), cr.height() ) );
- pix = d->pix;
- }
-#endif
- int tqalignment = align;
- if ((align & TQt::ShowPrefix) && !tqstyle().tqstyleHint(TQStyle::SH_UnderlineAccelerator, this))
- tqalignment |= TQt::NoAccel;
- // ordinary text or pixmap label
- tqstyle().drawItem( p, cr, tqalignment, tqcolorGroup(), isEnabled(),
- pix, ltext );
- }
-}
-
-
-/*!
- Updates the label, but not the frame.
-*/
-
-void TQLabel::updateLabel( TQSize oldSizeHint )
-{
- d->valid_hints = -1;
- TQSizePolicy policy = tqsizePolicy();
- bool wordBreak = align & TQt::WordBreak;
- policy.setHeightForWidth( wordBreak );
- if ( policy != tqsizePolicy() )
- tqsetSizePolicy( policy );
- if ( tqsizeHint() != oldSizeHint )
- updateGeometry();
- if ( autoresize ) {
- adjustSize();
- update( contentsRect() );
- } else {
- update( contentsRect() );
- }
-}
-
-
-/*!
- \internal
-
- Internal slot, used to set focus for accelerator labels.
-*/
-#ifndef TQT_NO_ACCEL
-void TQLabel::acceleratorSlot()
-{
- if ( !lbuddy )
- return;
- TQWidget * w = lbuddy;
- while ( w->focusProxy() )
- w = TQT_TQWIDGET(w->focusProxy());
- if ( !w->hasFocus() &&
- w->isEnabled() &&
- w->isVisible() &&
- w->focusPolicy() != Qt::NoFocus ) {
-#ifdef USE_QT4
- w->setFocus( TQFocusEvent::Shortcut );
-#else // USE_QT4
- TQFocusEvent::setReason( TQFocusEvent::Shortcut );
- w->setFocus();
- TQFocusEvent::resetReason();
-#endif // USE_QT4
- }
-}
-#endif
-
-/*!
- \internal
-
- Internal slot, used to clean up if the buddy widget dies.
-*/
-#ifndef TQT_NO_ACCEL
-void TQLabel::buddyDied() // I can't remember if I cried.
-{
- lbuddy = 0;
-}
-
-/*!
- Sets this label's buddy to \a buddy.
-
- When the user presses the accelerator key indicated by this label,
- the keyboard focus is transferred to the label's buddy widget.
-
- The buddy mechanism is only available for TQLabels that contain
- plain text in which one letter is prefixed with an ampersand, \&.
- This letter is set as the accelerator key. The letter is displayed
- underlined, and the '\&' is not displayed (i.e. the \c ShowPrefix
- tqalignment flag is turned on; see tqsetAlignment()).
-
- In a dialog, you might create two data entry widgets and a label
- for each, and set up the tqgeometry tqlayout so each label is just to
- the left of its data entry widget (its "buddy"), for example:
- \code
- TQLineEdit *nameEd = new TQLineEdit( this );
- TQLabel *nameLb = new TQLabel( "&Name:", this );
- nameLb->setBuddy( nameEd );
- TQLineEdit *phoneEd = new TQLineEdit( this );
- TQLabel *phoneLb = new TQLabel( "&Phone:", this );
- phoneLb->setBuddy( phoneEd );
- // ( tqlayout setup not shown )
- \endcode
-
- With the code above, the focus jumps to the Name field when the
- user presses Alt+N, and to the Phone field when the user presses
- Alt+P.
-
- To unset a previously set buddy, call this function with \a buddy
- set to 0.
-
- \sa buddy(), setText(), TQAccel, tqsetAlignment()
-*/
-
-void TQLabel::setBuddy( TQWidget *buddy )
-{
- if ( buddy )
- tqsetAlignment( tqalignment() | TQt::ShowPrefix );
- else
- tqsetAlignment( tqalignment() & ~TQt::ShowPrefix );
-
- if ( lbuddy )
- disconnect( lbuddy, TQT_SIGNAL(destroyed()), this, TQT_SLOT(buddyDied()) );
-
- lbuddy = buddy;
-
- if ( !lbuddy )
- return;
-#ifndef TQT_NO_RICHTEXT
- if ( !( textformat == TQt::RichText || (textformat == TQt::AutoText &&
- TQStyleSheet::mightBeRichText(ltext) ) ) )
-#endif
- {
- int p = TQAccel::shortcutKey( ltext );
- if ( p ) {
- if ( !accel )
- accel = new TQAccel( this, "accel label accel" );
- accel->connectItem( accel->insertItem( p ),
- this, TQT_SLOT(acceleratorSlot()) );
- }
- }
-
- connect( lbuddy, TQT_SIGNAL(destroyed()), this, TQT_SLOT(buddyDied()) );
-}
-
-
-/*!
- Returns this label's buddy, or 0 if no buddy is currently set.
-
- \sa setBuddy()
-*/
-
-TQWidget * TQLabel::buddy() const
-{
- return lbuddy;
-}
-#endif //TQT_NO_ACCEL
-
-
-#ifndef TQT_NO_MOVIE
-void TQLabel::movieUpdated(const TQRect& rect)
-{
- TQMovie *mov = movie();
- if ( mov && !mov->isNull() ) {
- TQRect r = contentsRect();
- r = tqstyle().tqitemRect( 0, r, align, isEnabled(), &(mov->framePixmap()),
- TQString() );
- r.moveBy(rect.x(), rect.y());
- r.setWidth(TQMIN(r.width(), rect.width()));
- r.setHeight(TQMIN(r.height(), rect.height()));
- tqrepaint( r, mov->framePixmap().mask() != 0 );
- }
-}
-
-void TQLabel::movieResized( const TQSize& size )
-{
- d->valid_hints = -1;
- if ( autoresize )
- adjustSize();
- movieUpdated( TQRect( TQPoint(0,0), size ) );
- updateGeometry();
-}
-
-/*!
- Sets the label contents to \a movie. Any previous content is
- cleared.
-
- The buddy accelerator, if any, is disabled.
-
- The label resizes itself if auto-resizing is enabled.
-
- \sa movie(), setBuddy()
-*/
-
-void TQLabel::setMovie( const TQMovie& movie )
-{
- TQSize osh = tqsizeHint();
- clearContents();
-
- lmovie = new TQMovie( movie );
- lmovie->connectResize(this, TQT_SLOT(movieResized(const TQSize&)));
- lmovie->connectUpdate(this, TQT_SLOT(movieUpdated(const TQRect&)));
-
- if ( !lmovie->running() ) // Assume that if the movie is running,
- updateLabel( osh ); // resize/update Q_SIGNALS will come soon enough
-}
-
-#endif // TQT_NO_MOVIE
-
-/*!
- \internal
-
- Clears any contents, without updating/repainting the label.
-*/
-
-void TQLabel::clearContents()
-{
-#ifndef TQT_NO_RICHTEXT
- delete doc;
- doc = 0;
-#endif
-
- delete lpixmap;
- lpixmap = 0;
-#ifndef TQT_NO_PICTURE
- delete lpicture;
- lpicture = 0;
-#endif
- delete d->img;
- d->img = 0;
- delete d->pix;
- d->pix = 0;
-
- ltext = TQString::null;
-#ifndef TQT_NO_ACCEL
- if ( accel )
- accel->clear();
-#endif
-#ifndef TQT_NO_MOVIE
- if ( lmovie ) {
- lmovie->disconnectResize(this, TQT_SLOT(movieResized(const TQSize&)));
- lmovie->disconnectUpdate(this, TQT_SLOT(movieUpdated(const TQRect&)));
- delete lmovie;
- lmovie = 0;
- }
-#endif
-}
-
-
-#ifndef TQT_NO_MOVIE
-
-/*!
- Returns a pointer to the label's movie, or 0 if no movie has been
- set.
-
- \sa setMovie()
-*/
-
-TQMovie* TQLabel::movie() const
-{
- return lmovie;
-}
-
-#endif // TQT_NO_MOVIE
-
-/*!
- \property TQLabel::backgroundMode
- \brief the label's background mode
-
- Get this property with backgroundMode().
-
- \sa TQWidget::setBackgroundMode()
-*/
-
-/*!
- \property TQLabel::textFormat
- \brief the label's text format
-
- See the \c TQt::TextFormat enum for an explanation of the possible
- options.
-
- The default format is \c AutoText.
-
- \sa text
-*/
-
-TQt::TextFormat TQLabel::textFormat() const
-{
- return textformat;
-}
-
-void TQLabel::setTextFormat( TQt::TextFormat format )
-{
- if ( format != textformat ) {
- textformat = format;
- TQString t = ltext;
- if ( !t.isNull() ) {
- ltext = TQString::null;
- setText( t );
- }
- }
-}
-
-/*!
- \reimp
-*/
-
-void TQLabel::fontChange( const TQFont & )
-{
- if ( !ltext.isEmpty() ) {
-#ifndef TQT_NO_RICHTEXT
- if ( doc )
- doc->setDefaultFont( font() );
-#endif
- updateLabel( TQSize( -1, -1 ) );
- }
-}
-
-#ifndef TQT_NO_IMAGE_SMOOTHSCALE
-/*!
- \property TQLabel::scaledContents
- \brief whether the label will scale its contents to fill all
- available space.
-
- When enabled and the label shows a pixmap, it will scale the
- pixmap to fill the available space.
-
- This property's default is FALSE.
-
- \sa setScaledContents()
-*/
-bool TQLabel::hasScaledContents() const
-{
- return scaledcontents;
-}
-
-void TQLabel::setScaledContents( bool enable )
-{
- if ( (bool)scaledcontents == enable )
- return;
- scaledcontents = enable;
- if ( !enable ) {
- delete d->img;
- d->img = 0;
- delete d->pix;
- d->pix = 0;
- }
- update( contentsRect() );
-}
-
-#endif // TQT_NO_IMAGE_SMOOTHSCALE
-
-/*!
- Sets the font used on the TQLabel to font \a f.
-*/
-
-void TQLabel::setFont( const TQFont &f )
-{
- TQFrame::setFont( f );
-}
-
-#endif // TQT_NO_LABEL