diff options
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqwidget.cpp')
-rw-r--r-- | tqtinterface/qt4/src/kernel/tqwidget.cpp | 8753 |
1 files changed, 0 insertions, 8753 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqwidget.cpp b/tqtinterface/qt4/src/kernel/tqwidget.cpp deleted file mode 100644 index 31b7fc9..0000000 --- a/tqtinterface/qt4/src/kernel/tqwidget.cpp +++ /dev/null @@ -1,8753 +0,0 @@ -/**************************************************************************** -** -** Implementation of TQWidget class -** -** Created : 931031 -** -** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. -** -** This file is part of the kernel 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 [email protected]. -** -** 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 "tqobjectlist.h" -#include "tqwidget.h" -#include "tqwidgetlist.h" -#include "tqwidgetintdict.h" -#include "tqptrdict.h" -#include "tqfocusdata.h" -#include "tqcursor.h" -#include "tqpixmap.h" -#include "tqapplication.h" -#include "tqapplication_p.h" -#include "tqbrush.h" -#include "tqlayout.h" -#include "tqstylefactory.h" -#include "tqcleanuphandler.h" -#include "tqstyle.h" -#include "tqmetaobject.h" -#include "tqguardedptr.h" -#if defined(TQT_ACCESSIBILITY_SUPPORT) -#include "tqaccessible.h" -#endif -#if defined(TQ_WS_WIN) -#include "tqt_windows.h" -#include "tqinputcontext_p.h" -#endif -#if defined(TQ_WS_TQWS) -#include "tqwsmanager_qws.h" -#endif -#include "tqfontdata_p.h" - -#ifdef USE_QT4 - -TQObject* convertFromTQT_BASE_OBJECT_NAMEPointer( TQT_BASE_OBJECT_NAME* x ) { - return static_cast<TQObject*>(static_cast<TQT_BASE_OBJECT_NAME*>(x)); -} - -const TQObject* convertFromTQT_BASE_OBJECT_NAMEPointerConst( const TQT_BASE_OBJECT_NAME* x ) { - return static_cast<const TQObject*>(static_cast<const TQT_BASE_OBJECT_NAME*>(x)); -} - -void TQWidget::reparent(QWidget *parent, const QPoint &p, bool showIt) { - setParent(parent, windowFlags() & ~Qt::WindowType_Mask); - setGeometry(p.x(),p.y(),width(),height()); - if (showIt) show(); -} - -bool TQWidget::close(bool alsoDelete) { - QPointer<QWidget> that = this; - bool accepted = QWidget::close(); - if (alsoDelete && accepted && that) - deleteLater(); - return accepted; -} - -// void TQWidget::showEvent(QShowEvent *e) { -// // if (!testAttribute(Qt::WA_Resized) && (isWindow() || !layout())) // Logic taken from Qt4 qwidget.cpp tqsetVisible... -// // if (!testAttribute(Qt::WA_Resized)) -// // if (!isVisible()) -// // adjustSize(); // NOTE: Qt4 does not allow adjustSize to be overridden, therefore it must be called here -// if (isVisible()) { -// // setAttribute(Qt::WA_Resized, TRUE); //not a user resize -// if (tqt_internal_show_called_event == FALSE) show(); // NOTE: Qt4 does not allow show to be overridden, therefore it must be called here -// // if ( !isTopLevel() && parentWidget() ) QApplication::postEvent( parentWidget(), new TQEvent( TQEvent::LayoutHint) ); // Needed for layouts to work -// tqt_internal_show_called_event = FALSE; -// } -// showEvent(static_cast<TQShowEvent*>(e)); -// } - -uint TQWidget::windowState() const { - return (uint)(QWidget::windowState()); -} - -void TQWidget::setWindowState(uint newstate) { - QWidget::setWindowState((Qt::WindowStates)newstate); -} - -void TQWidget::showEvent(QShowEvent *e) { - if (isVisible()) { - // Spontaneous event - if (tqt_internal_show_called_event == FALSE) show(); // NOTE: Qt4 does not allow show to be overridden, therefore it must be called here - showEvent(static_cast<TQShowEvent*>(e)); - } - else { - // Non-spontaneous event - showEvent(static_cast<TQShowEvent*>(e)); - if (tqt_internal_show_called_event == FALSE) show(); // NOTE: Qt4 does not allow show to be overridden, therefore it must be called here - } - tqt_internal_show_called_event = FALSE; -} - -void TQWidget::hideEvent(QHideEvent *e) { - hideEvent(static_cast<TQHideEvent*>(e)); - if ( !isTopLevel() && parentWidget() ) QApplication::postEvent( parentWidget(), new TQEvent( TQEvent::LayoutHint) ); // Needed for layouts to work -} - -void TQWidget::show() { - if ( testWState(WState_Visible) ) - return; - tqt_internal_show_called_event = TRUE; - if ( !isTopLevel() && parentWidget() ) - QApplication::postEvent( parentWidget(), new TQEvent( TQEvent::LayoutHint) ); // Needed for layouts to work - if (parentWidget()) { - if ( !isTopLevel() && !parentWidget()->isVisible() ) { - // return; - } - } - else { - QApplication::sendPostedEvents( this, TQEvent::ChildInserted ); - if ( parentWidget() ) - QApplication::sendPostedEvents( parentWidget(), TQEvent::ChildInserted ); - // Required for Mac, not sure whether we should always do that [this? see tqwidget.cpp ::show() for Qt3.3] - if( isTopLevel() ) - QApplication::sendPostedEvents(0, TQEvent::LayoutHint); - } - QWidget::show(); -} - -TQWidget* TQWidget::tqt_ensure_valid_widget_painting(TQWidget* w) { - if (w) w->setAttribute(Qt::WA_PaintOutsidePaintEvent, TRUE); - return w; -} - -void TQWidget::showWindow() { - printf("[FIXME] TQWidget::showWindow unimplemented\n\r"); -} - -void TQWidget::hideWindow() { - printf("[FIXME] TQWidget::hideWindow unimplemented\n\r"); -} - -void TQWidget::timerEvent(QTimerEvent *e) { - timerEvent(static_cast<TQTimerEvent*>(e)); -} - -void TQWidget::childEvent(QChildEvent *e) { - TQT_TQOBJECT_CHILDEVENT_CONDITIONAL childEvent(static_cast<TQChildEvent*>(e)); -} - -void TQWidget::customEvent(QEvent *e) { - customEvent(static_cast<TQCustomEvent*>(e)); -} - -void TQWidget::tqrepaint() { - repaint(); -} - -void TQWidget::setFocus() { - setFocus(Qt::OtherFocusReason); -} - -void TQWidget::polish() { - QApplication::sendPostedEvents( this, TQEvent::ChildInserted ); - ensurePolished(); -} - -void TQWidget::mousePressEvent(QMouseEvent *e) { - TQT_TQWIDGET_FIX_BROKEN_POPUP_MOUSE_FOCUS mousePressEvent(static_cast<TQMouseEvent*>(e)); -} - -void TQWidget::mouseReleaseEvent(QMouseEvent *e) { - TQT_TQWIDGET_FIX_BROKEN_POPUP_MOUSE_FOCUS mouseReleaseEvent(static_cast<TQMouseEvent*>(e)); -} - -void TQWidget::mouseDoubleClickEvent(QMouseEvent *e) { - TQT_TQWIDGET_FIX_BROKEN_POPUP_MOUSE_FOCUS mouseDoubleClickEvent(static_cast<TQMouseEvent*>(e)); -} - -void TQWidget::mouseMoveEvent(QMouseEvent *e) { - TQT_TQWIDGET_FIX_BROKEN_POPUP_MOUSE_FOCUS mouseMoveEvent(static_cast<TQMouseEvent*>(e)); -} - -void TQWidget::createTLSysExtra( void ) { - printf("[TQT UNIMPLEMENTED CALL] createTLSysExtra()\n\r"); -} - -void TQWidget::destroyInputContext( void ) { - printf("[TQT UNIMPLEMENTED CALL] destroyInputContext()\n\r"); -} - -TQWidget::TQWidget( QWidget* parent, const char* name, WFlags f ) : QWidget( parent, (Qt::WindowFlags)(f&(~WTQtFlagMask)) ), TQtUpperWidgetFlags((WFlags)0) { - TQtUpperWidgetFlags = f & WTQtFlagMask; - TQT_TQWIDGET_REQUIRED_INITIALIZATION - static_cast<QWidget*>(this)->setObjectName(QString::fromAscii(name)); - TQT_TQOBJECT_REQUIRED_INITIALIZATION(parent) -} - -void TQWidget::setActiveWindow( void ) { - activateWindow(); -} - -Display * TQWidget::x11Display( void ) { - return this->x11Info().display(); -} - -int TQWidget::x11Screen( void ) { - return this->x11Info().screen(); -} - -TQWidget * TQWidget::parentWidget( bool sameWindow ) const { - TQ_UNUSED(sameWindow); - return TQT_TQWIDGET(QWidget::parentWidget()); -} - -TQCString TQWidget::normalizeSignalSlot( const char *signalSlot ) { - return TQObject::normalizeSignalSlot(signalSlot); -} - -TQMetaObject *TQWidget::tqmetaObject() const { - return TQT_TQOBJECT_CONST(this)->tqmetaObject(); -} - -TQWidget * TQWidget::find( WId w ) { - return static_cast<TQWidget*>(find(w)); -} - -bool TQWidget::isShown() const { - return !isHidden(); -} - -TQWidget *TQWidget::tqchildAt( int x, int y, bool includeThis ) const { - TQ_UNUSED(includeThis); - return static_cast<TQWidget*>(childAt(x, y)); -} - -TQWidget *TQWidget::tqchildAt( const TQPoint &p, bool includeThis ) const { - TQ_UNUSED(includeThis); - return static_cast<TQWidget*>(childAt(p)); -} - -TQWidget *TQWidget::tqtopLevelWidget() const { - return static_cast<TQWidget*>(topLevelWidget()); -} - -TQWExtra *TQWidget::extraData() { - return extra; -} - -TQTLWExtra *TQWidget::topData() { - createTLExtra(); - return extra->topextra; -} - -void TQWidget::setName(const char *aName) { - TQT_TQOBJECT(this)->setName(aName); -} - -TQWidget *TQWidget::parentWidget( bool sameWindow ) { - TQ_UNUSED(sameWindow); - return static_cast<TQWidget*>(this->QWidget::parent()); -} - -bool TQWidget::isDialog() const { - return (windowType() == Qt::Dialog); -} - -TQObject *TQWidget::child( const char *objName, const char *inheritsClass, bool recursiveSearch ) { - return TQT_TQOBJECT(this)->child( objName, inheritsClass, recursiveSearch ); -} - -const TQRect TQWidget::tqgeometry() const { - return TQT_TQRECT_OBJECT(geometry()); -} - -QSize TQWidget::sizeHint() const { - return tqsizeHint(); -} - -QSize TQWidget::minimumSizeHint() const { - return tqminimumSizeHint(); -} - -TQSize TQWidget::tqminimumSize() const { - return QWidget::minimumSize(); -} - -TQSize TQWidget::tqmaximumSize() const { - return QWidget::maximumSize(); -} - -TQColorGroup TQWidget::tqcolorGroup() const { - return TQColorGroup(palette()); -} - -void TQWidget::iconify() { - showMinimized(); -} - -void TQWidget::constPolish() const { - ensurePolished(); -} - -bool TQWidget::hasMouse() const { - return testAttribute(Qt::WA_UnderMouse); -} - -bool TQWidget::ownCursor() const { - return testAttribute(Qt::WA_SetCursor); -} - -bool TQWidget::ownFont() const { - return testAttribute(Qt::WA_SetFont); -} - -const TQPixmap *TQWidget::backgroundPixmap() const { - return erasePixmap(); -} - -void TQWidget::tqsetSizePolicy(QSizePolicy qsp) { - setSizePolicy(qsp); -} - -void TQWidget::tqsetSizePolicy(QSizePolicy::Policy horizontal, QSizePolicy::Policy vertical) { - setSizePolicy(horizontal, vertical); -} - -void TQWidget::tqsetSizePolicy(QSizePolicy::Policy hor, QSizePolicy::Policy ver, bool hfw) { - QSizePolicy sp(hor, ver); - sp.setHeightForWidth(hfw); - setSizePolicy(sp); -} - -void TQWidget::setInputMethodEnabled(bool b) { - setAttribute(Qt::WA_InputMethodEnabled, b); -} - -bool TQWidget::isInputMethodEnabled() const { - return testAttribute(Qt::WA_InputMethodEnabled); -} - -bool TQWidget::isPopup() const { - return windowType() == Qt::Popup; -} - -TQString TQWidget::caption() const { - return windowTitle(); -} - -void TQWidget::setCaption(const QString &c) { - setWindowTitle(c); -} - -TQRect TQWidget::tqchildrenRect() const { - return childrenRect(); -} - -TQRegion TQWidget::tqchildrenRegion() const { - return childrenRegion(); -} - -void TQWidget::unsetFont() { - setFont(QFont()); -} - -bool TQWidget::ownPalette() const { - return testAttribute(Qt::WA_SetPalette); -} - -void TQWidget::unsetPalette() { - setPalette(QPalette()); -} - -const TQPalette &TQWidget::tqpalette() const { - return TQT_TQPALETTE_OBJECT(palette()); -} - -bool TQWidget::isUpdatesEnabled() const { - return updatesEnabled(); -} - -void TQWidget::tqrepaint(int x, int y, int w, int h) { - return repaint(x, y, w, h); -} - -void TQWidget::tqrepaint(const QRect &r) { - return repaint(r); -} - -void TQWidget::tqrepaint(const QRegion &r) { - return repaint(r); -} - -void TQWidget::tqrepaint(bool eraseme) { - if (eraseme) erase(); - repaint(); -} - -void TQWidget::tqrepaint(int x, int y, int w, int h, bool) { - repaint(x,y,w,h); -} - -void TQWidget::tqrepaint(const QRect &r, bool) { - repaint(r); -} - -void TQWidget::tqrepaint(const QRegion &rgn, bool) { - repaint(rgn); -} - -TQSizePolicy TQWidget::tqsizePolicy() const { - return TQT_TQSIZEPOLICY_OBJECT(sizePolicy()); -} - -TQPoint TQWidget::backgroundOffset() const { - return TQPoint(); -} - -bool TQWidget::tqsignalsBlocked() const { - return signalsBlocked(); -} - -TQObjectList *TQWidget::queryList( const char *inheritsClass, const char *objName, bool regexpMatch, bool recursiveSearch ) const { - return TQT_TQOBJECT_CONST(this)->queryList(inheritsClass, objName, regexpMatch, recursiveSearch); -} - -TQWidget *TQWidget::tqfocusWidget() const { - return TQT_TQWIDGET(focusWidget()); -} - -void TQWidget::setBackgroundOrigin(BackgroundOrigin) { -} - -TQWidget::BackgroundOrigin TQWidget::backgroundOrigin() const { - return WindowOrigin; -} - -void TQWidget::setIconText(const QString &it) { - setWindowIconText(it); -} - -void TQWidget::insertChild( TQObject *object ) { - TQT_TQOBJECT(this)->insertChild(object); -} - -void TQWidget::removeChild( TQObject *object ) { - TQT_TQOBJECT(this)->removeChild(object); -} - -bool TQWidget::close() { - return QWidget::close(); -} - -void TQWidget::setFocus(Qt::FocusReason reason) { - return QWidget::setFocus(reason); -} - -void TQWidget::setBackgroundMode( TQt::BackgroundMode tqbm ) { - setBackgroundMode(tqbm, TQt::PaletteBackground); -} - -const QColor &TQWidget::paletteForegroundColor() const { - return palette().color(foregroundRole()); -} - -void TQWidget::setPaletteForegroundColor(const QColor &c) { - QPalette p = palette(); - p.setColor(foregroundRole(), c); - setPalette(p); -} - -const QColor &TQWidget::paletteBackgroundColor() const { - return palette().color(backgroundRole()); -} - -void TQWidget::setPaletteBackgroundColor(const QColor &c) { - QPalette p = palette(); - p.setColor(backgroundRole(), c); - setPalette(p); -} - -const TQPixmap *TQWidget::paletteBackgroundPixmap() const { - QPalette p = palette(); - const QPixmap& pm = p.brush(backgroundRole()).texture(); - if (pm.isNull()) - return 0; - return TQT_TQPIXMAP_CONST(&pm); -} - -void TQWidget::setPaletteBackgroundPixmap(const QPixmap &pm) { - QPalette p = palette(); - p.setBrush(backgroundRole(), QBrush(pm)); - setPalette(p); -} - -const TQColor &TQWidget::backgroundColor() const { - return TQT_TQCOLOR_OBJECT(palette().color(backgroundRole())); -} - -void TQWidget::setBackgroundColor(const QColor &c) { - QPalette p = palette(); - p.setColor(backgroundRole(), c); - setPalette(p); -} - -const TQColor &TQWidget::eraseColor() const { - return TQT_TQCOLOR_OBJECT(palette().color(backgroundRole())); -} - -void TQWidget::setEraseColor(const QColor &c) { - QPalette p = palette(); - p.setColor(backgroundRole(), c); - setPalette(p); -} - -const TQPixmap *TQWidget::erasePixmap() const { - QPalette p = palette(); - const QPixmap& pm = p.brush(backgroundRole()).texture(); - if (pm.isNull()) - return 0; - return TQT_TQPIXMAP_CONST(&pm); -} - -void TQWidget::setErasePixmap(const QPixmap &pm) { - QPalette p = palette(); - p.setBrush(backgroundRole(), QBrush(pm)); - setPalette(p); -} - -const TQColor &TQWidget::foregroundColor() const { - return TQT_TQCOLOR_OBJECT(palette().color(foregroundRole())); -} - -void TQWidget::erase() { - erase_helper(0, 0, QWidget::width(), QWidget::height()); -} - -void TQWidget::erase(int x, int y, int w, int h) { - erase_helper(x, y, w, h); -} - -void TQWidget::erase(const QRect &r) { - erase_helper(r.x(), r.y(), r.width(), r.height()); -} - -const char *TQWidget::name(const char *defaultName) const { - TQString s = objectName(); - return s.isEmpty()?defaultName:s.latin1_helper(); -} - -void TQWidget::tqsetPalette( const TQPalette &p, bool ) { - setPalette( p ); -} - -bool TQWidget::isDesktop() const { - return testWFlags(WType_Desktop); -} - -bool TQWidget::isFocusEnabled() const { - return focusPolicy() != Qt::NoFocus; -} - -// Qt4 handler interface -bool TQWidget::eventFilter( QObject *q, QEvent *e ) { - return eventFilter(static_cast<TQObject*>(q), static_cast<TQEvent*>(e)); -} - -bool TQWidget::event( QEvent *e ) { - return event(static_cast<TQEvent*>(e)); -} - -#ifndef QT_NO_WHEELEVENT -void TQWidget::wheelEvent(QWheelEvent *e) { - wheelEvent(static_cast<TQWheelEvent*>(e)); -} -#endif - -void TQWidget::keyPressEvent(QKeyEvent *e) { - keyPressEvent(static_cast<TQKeyEvent*>(e)); -} - -void TQWidget::keyReleaseEvent(QKeyEvent *e) { - keyReleaseEvent(static_cast<TQKeyEvent*>(e)); -} - -void TQWidget::focusInEvent(QFocusEvent *e) { - focusInEvent(static_cast<TQFocusEvent*>(e)); -} - -void TQWidget::focusOutEvent(QFocusEvent *e) { - focusOutEvent(static_cast<TQFocusEvent*>(e)); -} - -void TQWidget::enterEvent(QEvent *e) { - enterEvent(static_cast<TQEvent*>(e)); -} - -void TQWidget::leaveEvent(QEvent *e) { - leaveEvent(static_cast<TQEvent*>(e)); -} - -void TQWidget::paintEvent(QPaintEvent *e) { - paintEvent(static_cast<TQPaintEvent*>(e)); -} - -void TQWidget::moveEvent(QMoveEvent *e) { - moveEvent(static_cast<TQMoveEvent*>(e)); -} - -void TQWidget::resizeEvent(QResizeEvent *e) { - resizeEvent(static_cast<TQResizeEvent*>(e)); -} - -void TQWidget::closeEvent(QCloseEvent *e) { - closeEvent(static_cast<TQCloseEvent*>(e)); -} - -#ifndef QT_NO_CONTEXTMENU -void TQWidget::contextMenuEvent(QContextMenuEvent *e) { - contextMenuEvent(static_cast<TQContextMenuEvent*>(e)); -} -#endif - -#ifndef QT_NO_TABLETEVENT -void TQWidget::tabletEvent(QTabletEvent *e) { - tabletEvent(static_cast<TQTabletEvent*>(e)); -} -#endif - -TQConnectionList *TQWidget::tqreceivers( const char* signal ) const { - return TQT_TQOBJECT_CONST(this)->tqreceivers(signal); -} - -TQConnectionList *TQWidget::tqreceivers( int signal ) const { - return TQT_TQOBJECT_CONST(this)->tqreceivers(signal); -} - -void TQWidget::activate_signal( int signal ) { - TQT_TQOBJECT(this)->activate_signal(signal); -} - -void TQWidget::activate_signal( TQConnectionList *clist, TQUObject *o ) { - TQT_TQOBJECT(this)->activate_signal(clist, o); -} - -void TQWidget::tqt_handle_qt_destroyed(QObject* obj) { - emit destroyed(TQT_TQOBJECT(obj)); -} - -bool TQWidget::isVisibleToTLW() const { - return isVisible(); -} - -/*! - \property TQWidget::backgroundBrush - \brief the widget's background brush - - The background brush depends on a widget's palette and its - background mode. - - \sa backgroundColor(), backgroundPixmap(), eraseColor(), palette, - TQApplication::setPalette() -*/ -const TQBrush& TQWidget::backgroundBrush() const -{ - static TQBrush noBrush; -#ifndef TQT_NO_PALETTE - TQt::BackgroundMode mode = extra ? (TQt::BackgroundMode) extra->bg_mode_visual : TQt::PaletteBackground; - switch( mode ) { - case TQt::FixedColor: - case TQt::FixedPixmap : - case TQt::NoBackground: - case TQt::X11ParentRelative: - return noBrush; - default: - TQColorGroup::ColorRole role = TQPalette::backgroundRoleFromMode( mode ); - return tqcolorGroup().tqbrush( role ); - } -#else - return noBrush; -#endif -} - -/*! - \internal - Creates the widget extra data. -*/ - -// [FIXME] Fix the commented out lines - -void TQWidget::createExtra() -{ - if ( !extra ) { // if not exists - extra = new TQWExtra; - TQ_CHECK_PTR( extra ); - extra->minw = extra->minh = 0; - extra->maxw = extra->maxh = TQWIDGETSIZE_MAX; - extra->bg_pix = 0; - extra->focus_proxy = 0; -#ifndef TQT_NO_CURSOR - extra->curs = 0; -#endif - extra->topextra = 0; - extra->bg_mode = TQt::PaletteBackground; - extra->bg_mode_visual = TQt::PaletteBackground; -// extra->bg_origin = TQt::WidgetOrigin; -#ifndef TQT_NO_STYLE - extra->style = 0; -#endif - extra->size_policy = TQSizePolicy( TQSizePolicy::Preferred, - TQSizePolicy::Preferred ); -// createSysExtra(); - } -} - - -/*! - \internal - Deletes the widget extra data. -*/ - -// [FIXME] Fix the commented out lines - -void TQWidget::deleteExtra() -{ - if ( extra ) { // if exists - delete extra->bg_pix; -#ifndef TQT_NO_CURSOR - delete extra->curs; -#endif -// deleteSysExtra(); - if ( extra->topextra ) { -// deleteTLSysExtra(); -#ifndef TQT_NO_WIDGET_TOPEXTRA - delete extra->topextra->icon; -#endif -// delete extra->topextra->focusData; -#if defined(TQ_WS_TQWS) && !defined(TQT_NO_TQWS_MANAGER) - delete extra->topextra->qwsManager; -#endif - delete extra->topextra; - } - delete extra; - // extra->xic destroyed in TQWidget::destroy() - extra = 0; - } -} - -void TQWidget::setBackgroundPixmap(const QPixmap &pm) { - // Is this object really a TQWidget (or based on a TQWidget)? If so use the internal virtual function instead... - if (inherits("TQObject") == TRUE) { - tqsetBackgroundPixmap(pm); - } - else { - QPalette p = palette(); - p.setBrush(backgroundRole(), QBrush(pm)); - setPalette(p); - } -} - -void TQWidget::tqsetBackgroundPixmap(const QPixmap &pm) { - QPalette p = palette(); - p.setBrush(backgroundRole(), QBrush(pm)); - setPalette(p); -} - -void TQWidget::setWFlags( WFlags flags ) { - if (this->inherits("TQWidget")) - TQtUpperWidgetFlags = TQtUpperWidgetFlags | (flags & WTQtFlagMask); - overrideWindowFlags((Qt::WindowFlags) (windowFlags() | (flags&(~WTQtFlagMask)))); - if (this->inherits("TQWidget")) - processUpperWidgetFlags(); -} - -void TQWidget::clearWFlags( WFlags flags ) { - unsigned long long upperflags = 0ULL; - if (this->inherits("TQWidget")) - upperflags = TQtUpperWidgetFlags; - unsigned long long oldFlags = windowFlags() | upperflags; - unsigned long long newFlags = (oldFlags &= (~flags)); - if ( ((newFlags & (WType_Dialog & (~WType_TopLevel))) != 0) - || ((newFlags & (WType_Popup & (~WType_TopLevel))) != 0) - || ((newFlags & (WType_Desktop & (~WType_TopLevel))) != 0)) - newFlags = newFlags | WType_TopLevel; - overrideWindowFlags((Qt::WindowFlags)(newFlags&(~WTQtFlagMask))); - if (this->inherits("TQWidget")) - processUpperWidgetFlags(); -} - -WFlags TQWidget::getWFlags() const { - unsigned long long upperflags = 0ULL; - if (this->inherits("TQWidget")) - upperflags = TQtUpperWidgetFlags; - return windowFlags() | upperflags; -} - -WFlags TQWidget::testWFlags( WFlags f ) const { - unsigned long long upperflags = 0ULL; - if (this->inherits("TQWidget")) - upperflags = TQtUpperWidgetFlags; - return ((windowFlags() | upperflags) & f); -} - -void TQWidget::reparent(QWidget *parent, WFlags f, const QPoint &p, bool showIt) { - if (this->inherits("TQWidget")) { - TQtUpperWidgetFlags = f & WTQtFlagMask; - processUpperWidgetFlags(); - } - setParent(parent, (Qt::WindowFlags)(f&(~WTQtFlagMask))); - setGeometry(p.x(),p.y(),width(),height()); - if (showIt) show(); -} - -void TQWidget::processUpperWidgetFlags() { - unsigned long long flags = TQtUpperWidgetFlags&WTQtFlagMask; - - // Process each extended TQt window flag that was defined in tqnamespace.h - if (flags & WNoAutoErase) - setAutoFillBackground(false); - else - setAutoFillBackground(true); - - if (flags & WMouseNoMask) - setAttribute(Qt::WA_MouseNoMask, true); - else - setAttribute(Qt::WA_MouseNoMask, false); - - if ((flags & WPaintOnScreen) || (flags & WPaintUnclipped)) - setAttribute(Qt::WA_PaintOnScreen, true); - else - setAttribute(Qt::WA_PaintOnScreen, false); - - if (flags & WPaintUnclipped) - setAttribute(Qt::WA_PaintUnclipped, true); - else - setAttribute(Qt::WA_PaintUnclipped, false); -} - -void TQWidget::setDefaultWidgetFlags() { - TQtUpperWidgetFlags = TQtUpperWidgetFlags | WPaintOnScreen; -} - -/*! - Enables key event compression, if \a compress is TRUE, and - disables it if \a compress is FALSE. - - Key compression is off by default (except for TQLineEdit and - TQTextEdit), so widgets receive one key press event for each key - press (or more, since autorepeat is usually on). If you turn it on - and your program doesn't keep up with key input, TQt may try to - compress key events so that more than one character can be - processed in each event. - - For example, a word processor widget might receive 2, 3 or more - characters in each TQKeyEvent::text(), if the tqlayout recalculation - takes too long for the CPU. - - If a widget supports multiple character tqunicode input, it is - always safe to turn the compression on. - - TQt performs key event compression only for printable characters. - Modifier keys, cursor movement keys, function keys and - miscellaneous action keys (e.g. Escape, Enter, Backspace, - PrintScreen) will stop key event compression, even if there are - more compressible key events available. - - Not all platforms support this compression, in which case turning - it on will have no effect. - - \sa TQKeyEvent::text(); -*/ - -void TQWidget::setKeyCompression(bool compress) -{ - if ( compress ) - setWState( TQt::WState_CompressKeys ); - else - clearWState( TQt::WState_CompressKeys ); -} - -/*! - Returns the focus data for this widget's top-level widget. - - Focus data always belongs to the top-level widget. The focus data - list contains all the widgets in this top-level widget that can - accept focus, in tab order. An iterator points to the current - focus widget (tqfocusWidget() returns a pointer to this widget). - - This information is useful for implementing advanced versions of - focusNextPrevChild(). -*/ -TQFocusData * TQWidget::focusData() -{ - return focusData( TRUE ); -} - -/*! - \internal - - Internal function which lets us ask for the focus data, creating - it if it doesn't exist and \a create is TRUE. -*/ -TQFocusData * TQWidget::focusData( bool create ) -{ - TQWidget * tlw = tqtopLevelWidget(); - TQWExtra * ed = tlw->extraData(); - if ( !ed || !ed->topextra ) { - if ( !create ) - return 0; - tlw->createTLExtra(); - ed = tlw->extraData(); - } - if ( create && !ed->topextra->focusData ) - ed->topextra->focusData = new TQFocusData; - - return ed->topextra->focusData; - - // [FIXME] What does this do and how can I do it in Qt4? - printf("[WARNING] TQWidget::focusData( bool create ) unimplemented\n\r"); - return 0; -} - -void TQWidget::createTLExtra() -{ - if ( !extra ) - createExtra(); - if ( !extra->topextra ) { - TQTLWExtra* x = extra->topextra = new TQTLWExtra; -#if defined( TQ_WS_WIN ) || defined( TQ_WS_MAC ) - x->opacity = 255; -#endif -#ifndef TQT_NO_WIDGET_TOPEXTRA - x->icon = 0; -#endif - x->focusData = 0; - x->fleft = x->fright = x->ftop = x->fbottom = 0; - x->incw = x->inch = 0; - x->basew = x->baseh = 0; - x->normalGeometry = TQRect(0,0,-1,-1); -#if defined(TQ_WS_X11) - x->embedded = 0; - x->parentWinId = 0; - x->spont_unmapped = 0; - x->dnd = 0; - x->uspos = 0; - x->ussize = 0; -#endif - x->savedFlags = 0; -#if defined(TQ_WS_TQWS) && !defined(TQT_NO_TQWS_MANAGER) - x->decor_allocated_region = TQRegion(); - x->qwsManager = 0; -#endif - createTLSysExtra(); - } -} - -/*! - \property TQWidget::autoMask - \brief whether the auto mask feature is enabled for the widget - - Transparent widgets use a mask to define their visible region. - TQWidget has some built-in support to make the task of - recalculating the mask easier. When setting auto mask to TRUE, - updateMask() will be called whenever the widget is resized or - changes its focus state. Note that you must reimplement - updateMask() (which should include a call to setMask()) or nothing - will happen. - - Note: when you re-implement resizeEvent(), focusInEvent() or - focusOutEvent() in your custom widgets and still want to ensure - that the auto mask calculation works, you should add: - - \code - if ( autoMask() ) - updateMask(); - \endcode - - at the end of your event handlers. This is true for all member - functions that change the appearance of the widget in a way that - requires a recalculation of the mask. - - While being a technically appealing concept, masks have a big - drawback: when using complex masks that cannot be expressed easily - with relatively simple regions, they can be very slow on some - window systems. The classic example is a transparent label. The - complex tqshape of its contents makes it necessary to represent its - mask by a bitmap, which consumes both memory and time. If all you - want is to blend the background of several neighboring widgets - together seamlessly, you will probably want to use - setBackgroundOrigin() rather than a mask. - - \sa autoMask() updateMask() setMask() clearMask() setBackgroundOrigin() -*/ - -// [FIXME] -// Verify that (WState)TQt::WState_AutoMask is a valid window state in Qt4, or at least -// does not conflict with any Qt4 window states (i.e. can live alone without stomping on anything!) - -bool TQWidget::autoMask() const -{ - return testWState((WState)TQt::WState_AutoMask); -} - -void TQWidget::setAutoMask( bool enable ) -{ - if ( enable == autoMask() ) - return; - - if ( enable ) { - setWState((WState)TQt::WState_AutoMask); - updateMask(); - } else { - clearWState((WState)TQt::WState_AutoMask); - clearMask(); - } -} - -void TQWidget::setFocus(TQFocusEvent::Reason reason) -{ - setFocus((Qt::FocusReason)reason); -} - -TQObject *TQWidget::parent() const { - return TQT_TQOBJECT(parent()); -} - -// const TQObjectList *TQWidget::childrenListObject() const { -// QObjectList qlr; -// TQObjectList* tqt_tqobject_list = new TQObjectList(); -// qlr = this->children(); -// tqt_tqobject_list->clear(); -// for (int i = 0; i < qlr.size(); ++i) { -// tqt_tqobject_list->append(static_cast<TQObject*>(qlr.at(i))); -// } -// return tqt_tqobject_list; -// } - -TQObjectList TQWidget::childrenListObject() { - QObjectList qlr; - TQObjectList tqt_tqobject_list; - qlr = this->children(); - tqt_tqobject_list.clear(); - for (int i = 0; i < qlr.size(); ++i) { - tqt_tqobject_list.append(static_cast<TQObject*>(qlr.at(i))); - } - return tqt_tqobject_list; -} - -const TQObjectList TQWidget::childrenListObject() const { - QObjectList qlr; - TQObjectList tqt_tqobject_list; - qlr = this->children(); - tqt_tqobject_list.clear(); - for (int i = 0; i < qlr.size(); ++i) { - tqt_tqobject_list.append(static_cast<TQObject*>(qlr.at(i))); - } - return tqt_tqobject_list; -} - -const char *TQWidget::tqname() const { - if (dynamic_cast<const TQWidget*>(static_cast<const QWidget*>(static_cast<const QObject*>(this)))) { - static_object_name = TQT_OBJECT_NAME_HANDLER(objectName()); - return static_object_name.ascii(); - } - else { - printf("[WARNING] Attempted to call TQWidget::tqname() on an object without a constructed TQWidget object or base object. Returning \"\"\n\r"); - return ""; - } -} - -const char *TQWidget::name() const { - if (dynamic_cast<const TQWidget*>(static_cast<const QWidget*>(static_cast<const QObject*>(this)))) { - static_object_name = TQT_OBJECT_NAME_HANDLER(objectName()); - return static_object_name.ascii(); - } - else { - printf("[WARNING] Attempted to call TQWidget::name() on an object without a constructed TQWidget object or base object. Returning \"\"\n\r"); - return ""; - } -} - -TQLayout *TQWidget::tqlayout() const { - return TQT_TQLAYOUT(QWidget::layout()); -} - -/*! - Clear the rectangle at point (\a x, \a y) of width \a w and height - \a h. - - \warning This is best done in a paintEvent(). -*/ -void TQWidget::erase_helper(int x, int y, int w, int h) -{ -// if (testAttribute(Qt::WA_NoSystemBackground) || testAttribute(Qt::WA_UpdatesDisabled) || !testAttribute(Qt::WA_WState_Visible)) -// return; - if (w < 0) -// w = data->crect.width() - x; - w = QWidget::x() - x; - if (h < 0) -// h = data->crect.height() - y; - h = QWidget::y() - y; - if (w != 0 && h != 0) { -// if (paintingActive()) { - if (paintingActive() && paintEngine()->isActive()) { - QPainter* p = paintEngine()->painter(); - if (p) { - printf("[WARNING] A painter was aready active when TQWidget::erase(...) was called. Attempting to use existing painter for erasure...\n\r"); - p->eraseRect(QRect(x, y, w, h)); - } - else { - printf("[WARNING] A painter was aready active when TQWidget::erase(...) was called. Attempted to use existing painter for erasure but that FAILED!\n\r"); - } - } - else { - QPainter p(this); - p.eraseRect(QRect(x, y, w, h)); - } - } -} - -/*! - \overload - - Clear the given region, \a rgn. - - Drawing may only take place in a QPaintEvent. Overload - paintEvent() to do your erasing and call update() to schedule a - replaint whenever necessary. See also QPainter. -*/ -void TQWidget::erase(const QRegion& rgn) -{ - if (testAttribute(Qt::WA_NoSystemBackground) || testAttribute(Qt::WA_UpdatesDisabled) || !testAttribute(Qt::WA_WState_Visible)) - return; - - QPainter p(this); - p.setClipRegion(rgn); - p.eraseRect(rgn.boundingRect()); -} - -/*! - Returns the color role used for painting the widget's background. - - Use QPalette(backgroundRole(()) instead. -*/ -TQt::BackgroundMode TQWidget::backgroundMode() const -{ - if (testAttribute(Qt::WA_NoSystemBackground)) - return TQt::NoBackground; - switch(backgroundRole()) { - case QPalette::WindowText: - return TQt::PaletteForeground; - case QPalette::Button: - return TQt::PaletteButton; - case QPalette::Light: - return TQt::PaletteLight; - case QPalette::Midlight: - return TQt::PaletteMidlight; - case QPalette::Dark: - return TQt::PaletteDark; - case QPalette::Mid: - return TQt::PaletteMid; - case QPalette::Text: - return TQt::PaletteText; - case QPalette::BrightText: - return TQt::PaletteBrightText; - case QPalette::Base: - return TQt::PaletteBase; - case QPalette::Window: - return TQt::PaletteBackground; - case QPalette::Shadow: - return TQt::PaletteShadow; - case QPalette::Highlight: - return TQt::PaletteHighlight; - case QPalette::HighlightedText: - return TQt::PaletteHighlightedText; - case QPalette::ButtonText: - return TQt::PaletteButtonText; - case QPalette::Link: - return TQt::PaletteLink; - case QPalette::LinkVisited: - return TQt::PaletteLinkVisited; - default: - break; - } - return TQt::NoBackground; -} - -/*! - \fn void QWidget::setBackgroundMode(Qt::BackgroundMode - widgetBackground, Qt::BackgroundMode paletteBackground) - - Sets the color role used for painting the widget's background to - background mode \a widgetBackground. The \a paletteBackground mode - parameter is ignored. -*/ -void TQWidget::setBackgroundMode(TQt::BackgroundMode m, TQt::BackgroundMode) -{ - if(m == TQt::NoBackground) { - setAttribute(Qt::WA_NoSystemBackground, true); - return; - } - setAttribute(Qt::WA_NoSystemBackground, false); - setForegroundRole(QPalette::NoRole); - QPalette::ColorRole role = backgroundRole(); - switch(m) { - case TQt::FixedColor: - case TQt::FixedPixmap: - break; - case TQt::PaletteForeground: - role = QPalette::WindowText; - break; - case TQt::PaletteButton: - role = QPalette::Button; - break; - case TQt::PaletteLight: - role = QPalette::Light; - break; - case TQt::PaletteMidlight: - role = QPalette::Midlight; - break; - case TQt::PaletteDark: - role = QPalette::Dark; - break; - case TQt::PaletteMid: - role = QPalette::Mid; - break; - case TQt::PaletteText: - role = QPalette::Text; - break; - case TQt::PaletteBrightText: - role = QPalette::BrightText; - break; - case TQt::PaletteBase: - role = QPalette::Base; - break; - case TQt::PaletteBackground: - role = QPalette::Window; - break; - case TQt::PaletteShadow: - role = QPalette::Shadow; - break; - case TQt::PaletteHighlight: - role = QPalette::Highlight; - break; - case TQt::PaletteHighlightedText: - role = QPalette::HighlightedText; - break; - case TQt::PaletteButtonText: - role = QPalette::ButtonText; - break; - case TQt::PaletteLink: - role = QPalette::Link; - break; - case TQt::PaletteLinkVisited: - role = QPalette::LinkVisited; - break; - case TQt::X11ParentRelative: - role = QPalette::NoRole; - setForegroundRole(role); - default: - break; - } - setBackgroundRole(role); -} -/* -TQRect TQWidget::tqeffectiveRectFor(const QRect &rect) const -{ -// #ifndef QT_NO_GRAPHICSEFFECT -// if (graphicsEffect() && graphicsEffect()->isEnabled()) -// return graphicsEffect()->boundingRectFor(rect).toAlignedRect(); -// #endif //QT_NO_GRAPHICSEFFECT - return rect; -}*/ - -/* - Returns the widget's clipping rectangle. -*/ -TQRect TQWidget::tqclipRect() const -{ -// Q_Q(const QWidget); - const QWidget * w = this; - if (!w->isVisible()) - return QRect(); -// QRect r = tqeffectiveRectFor(this->rect()); // [FIXME] - QRect r = this->rect(); - int ox = 0; - int oy = 0; - while (w - && w->isVisible() - && !w->isWindow() - && w->parentWidget()) { - ox -= w->x(); - oy -= w->y(); - w = w->parentWidget(); - r &= QRect(ox, oy, w->width(), w->height()); - } - return r; -} - -/*! - Use visibleRegion() instead. -*/ -TQRect TQWidget::visibleRect() const -{ - return tqclipRect(); -} - -/*! - Returns the unobscured region where paint events can occur. - - For visible widgets, this is an approximation of the area not - covered by other widgets; otherwise, this is an empty region. - - The tqrepaint() function calls this function if necessary, so in - general you do not need to call it. - -*/ -TQRegion TQWidget::clipRegion() const -{ - return visibleRect(); -} - -void TQWidget::setIcon(const QPixmap &i) -{ - setWindowIcon(i); -} - -/*! - \property TQWidget::customWhatsThis - \brief whether the widget wants to handle What's This help manually - - The default implementation of customWhatsThis() returns FALSE, - which means the widget will not receive any events in Whats This - mode. - - The widget may leave What's This mode by calling - TQWhatsThis::leaveWhatsThisMode(), with or without actually - displaying any help text. - - You can also reimplement customWhatsThis() if your widget is a - "passive interactor" supposed to work under all circumstances. - Simply don't call TQWhatsThis::leaveWhatsThisMode() in that case. - - \sa TQWhatsThis::inWhatsThisMode() TQWhatsThis::leaveWhatsThisMode() -*/ -bool TQWidget::customWhatsThis() const -{ - return FALSE; -} - -const TQPixmap *TQWidget::icon() const { - const_cast<TQWidget*>(this)->setProperty("TQT_WIDGET_ICON", TQPixmap(windowIcon().pixmap(QSize(14, 14)))); // [FIXME] Is there any way around hardcoding these sizes?? - const QPixmap& ptrRef = property("TQT_WIDGET_ICON").value<QPixmap>(); - return TQT_TQPIXMAP_CONST(&ptrRef); -} - -const TQPixmap TQWidget::iconPixmap() const { - return TQPixmap(windowIcon().pixmap(QSize(14, 14))); // [FIXME] Is there any way around hardcoding these sizes?? -} - -/*! - This function can be reimplemented in a subclass to support - transparent widgets. It should be called whenever a widget changes - state in a way that means that the tqshape mask must be recalculated. - - \sa setAutoMask(), updateMask(), setMask(), clearMask() -*/ -void TQWidget::updateMask() -{ -} - -/*! - Returns the GUI style for this widget - - \sa TQWidget::setStyle(), TQApplication::setStyle(), TQApplication::style() -*/ - -TQStyle& TQWidget::tqstyle() const -{ -// if ( extra && extra->style ) -// return *extra->style; - TQStyle &ret = tqApp->tqstyle(); - return ret; -} - -/*! - Sets the widget's GUI style to \a style. Ownership of the style - object is not transferred. - - If no style is set, the widget uses the application's style, - TQApplication::style() instead. - - Setting a widget's style has no effect on existing or future child - widgets. - - \warning This function is particularly useful for demonstration - purposes, where you want to show TQt's styling capabilities. Real - applications should avoid it and use one consistent GUI style - instead. - - \sa style(), TQStyle, TQApplication::style(), TQApplication::setStyle() -*/ - -void TQWidget::setStyle( TQStyle *style ) -{ - QWidget::setStyle(style); -} - -/*! - \overload - - Sets the widget's GUI style to \a style using the TQStyleFactory. -*/ -TQStyle* TQWidget::setStyle( const TQString &style ) -{ - TQStyle *s = TQStyleFactory::create( style ); - setStyle( s ); - return s; -} - -/*! - \property TQWidget::tqsizeHint - \brief the recommended size for the widget - - If the value of this property is an invalid size, no size is - recommended. - - The default implementation of tqsizeHint() returns an invalid size - if there is no tqlayout for this widget, and returns the tqlayout's - preferred size otherwise. - - \sa TQSize::isValid(), tqminimumSizeHint(), sizePolicy(), - setMinimumSize(), updateGeometry() -*/ - -TQSize TQWidget::tqsizeHint() const -{ -#ifndef TQT_NO_LAYOUT - if ( tqlayout() ) - return tqlayout()->totalSizeHint(); -#endif - return TQSize( -1, -1 ); -} - -/*! - \property TQWidget::tqminimumSizeHint - \brief the recommended minimum size for the widget - - If the value of this property is an invalid size, no minimum size - is recommended. - - The default implementation of tqminimumSizeHint() returns an invalid - size if there is no tqlayout for this widget, and returns the - tqlayout's minimum size otherwise. Most built-in widgets reimplement - tqminimumSizeHint(). - - \l TQLayout will never resize a widget to a size smaller than - tqminimumSizeHint. - - \sa TQSize::isValid(), resize(), setMinimumSize(), sizePolicy() -*/ -TQSize TQWidget::tqminimumSizeHint() const -{ -#ifndef TQT_NO_LAYOUT - if ( tqlayout() ) - return tqlayout()->totalMinimumSize(); -#endif - return TQSize( -1, -1 ); -} - -/*! - \property TQWidget::updatesEnabled - \brief whether updates are enabled - - Calling update() and tqrepaint() has no effect if updates are - disabled. Paint events from the window system are processed - normally even if updates are disabled. - - setUpdatesEnabled() is normally used to disable updates for a - short period of time, for instance to avoid screen flicker during - large changes. - - Example: - \code - setUpdatesEnabled( FALSE ); - bigVisualChanges(); - setUpdatesEnabled( TRUE ); - tqrepaint(); - \endcode - - \sa update(), tqrepaint(), paintEvent() -*/ -void TQWidget::tqsetUpdatesEnabled( bool enable ) -{ -// if ( enable ) -// clearWState( WState_BlockUpdates ); -// else -// setWState( WState_BlockUpdates ); - - // Borrowed from Qt4 - if (enable && !isWindow() && parentWidget() && !parentWidget()->updatesEnabled()) - return; // nothing we can do - - if (enable != testAttribute(Qt::WA_UpdatesDisabled)) - return; // nothing to do - - setAttribute(Qt::WA_UpdatesDisabled, !enable); -// if (enable) -// update(); - - Qt::WidgetAttribute attribute = enable ? Qt::WA_ForceUpdatesDisabled : Qt::WA_UpdatesDisabled; - for (int i = 0; i < children().size(); ++i) { - TQWidget *w = TQT_TQWIDGET(qobject_cast<QWidget *>(children().at(i))); - if (w && !w->isWindow() && !w->testAttribute(attribute)) - w->tqsetUpdatesEnabled(enable); - } -} - -// USE_QT4 - -// PRIVATE API FROM QT4 -// THIS MAY HAVE TO BE SYNCED WITH QT4 ON OCCASION -/*! - \internal - \class QWidgetBackingStoreTracker - \brief Class which allows tracking of which widgets are using a given backing store - - QWidgetBackingStoreTracker is a thin wrapper around a QWidgetBackingStore pointer, - which maintains a list of the QWidgets which are currently using the backing - store. This list is modified via the registerWidget and unregisterWidget functions. - */ - -QWidgetBackingStoreTracker::QWidgetBackingStoreTracker() - : m_ptr(0) -{ - -} - -QWidgetBackingStoreTracker::~QWidgetBackingStoreTracker() -{ - delete m_ptr; -} - -#if 0 - -/*! - \internal - Destroy the contained QWidgetBackingStore, if not null, and clear the list of - widgets using the backing store, then create a new QWidgetBackingStore, providing - the QWidget. - */ -void QWidgetBackingStoreTracker::create(QWidget *widget) -{ - destroy(); - m_ptr = new QWidgetBackingStore(widget); -} - -/*! - \internal - Destroy the contained QWidgetBackingStore, if not null, and clear the list of - widgets using the backing store. - */ -void QWidgetBackingStoreTracker::destroy() -{ - delete m_ptr; - m_ptr = 0; - m_widgets.clear(); -} - -/*! - \internal - Add the widget to the list of widgets currently using the backing store. - If the widget was already in the list, this function is a no-op. - */ -void QWidgetBackingStoreTracker::registerWidget(QWidget *w) -{ - Q_ASSERT(m_ptr); - Q_ASSERT(w->internalWinId()); - Q_ASSERT(qt_widget_private(w)->maybeBackingStore() == m_ptr); - m_widgets.insert(w); -} - -/*! - \internal - Remove the widget from the list of widgets currently using the backing store. - If the widget was in the list, and removing it causes the list to be empty, - the backing store is deleted. - If the widget was not in the list, this function is a no-op. - */ -void QWidgetBackingStoreTracker::unregisterWidget(QWidget *w) -{ - if (m_widgets.remove(w) && m_widgets.isEmpty()) { - delete m_ptr; - m_ptr = 0; - } -} - -#endif - -// END PRIVATE API - -// TQMetaObject *TQWidget::tqstaticMetaObject() { -// return const_cast<TQMetaObject*>(static_cast<const TQMetaObject*>(&TQT_BASE_OBJECT_NAME::staticMetaObject)); -// } - -/*! - This is the main event handler; it handles event \a e. You can - reimplement this function in a subclass, but we recommend using - one of the specialized event handlers instead. - - The main event handler first passes an event through all \link - TQObject::installEventFilter() event filters\endlink that have been - installed. If none of the filters intercept the event, it calls - one of the specialized event handlers. - - Key press and release events are treated differently from other - events. event() checks for Tab and Shift+Tab and tries to move the - focus appropriately. If there is no widget to move the focus to - (or the key press is not Tab or Shift+Tab), event() calls - keyPressEvent(). - - This function returns TRUE if it is able to pass the event over to - someone (i.e. someone wanted the event); otherwise returns FALSE. - - \sa closeEvent(), focusInEvent(), focusOutEvent(), enterEvent(), - keyPressEvent(), keyReleaseEvent(), leaveEvent(), - mouseDoubleClickEvent(), mouseMoveEvent(), mousePressEvent(), - mouseReleaseEvent(), moveEvent(), paintEvent(), resizeEvent(), - TQObject::event(), TQObject::timerEvent() -*/ - -bool TQWidget::event( TQEvent *e ) -{ - switch ( e->type() ) { -// case TQEvent::MouseMove: -// mouseMoveEvent( (TQMouseEvent*)e ); -// if ( ! ((TQMouseEvent*)e)->isAccepted() ) -// return FALSE; -// break; -// -// case TQEvent::MouseButtonPress: -// resetInputContext(); -// mousePressEvent( (TQMouseEvent*)e ); -// if ( ! ((TQMouseEvent*)e)->isAccepted() ) -// return FALSE; -// break; -// -// case TQEvent::MouseButtonRelease: -// mouseReleaseEvent( (TQMouseEvent*)e ); -// if ( ! ((TQMouseEvent*)e)->isAccepted() ) -// return FALSE; -// break; -// -// case TQEvent::MouseButtonDblClick: -// mouseDoubleClickEvent( (TQMouseEvent*)e ); -// if ( ! ((TQMouseEvent*)e)->isAccepted() ) -// return FALSE; -// break; -// #ifndef TQT_NO_WHEELEVENT -// case TQEvent::Wheel: -// wheelEvent( (TQWheelEvent*)e ); -// if ( ! ((TQWheelEvent*)e)->isAccepted() ) -// return FALSE; -// break; -// #endif -// // case TQEvent::TabletMove: -// // case TQEvent::TabletPress: -// // case TQEvent::TabletRelease: -// // tabletEvent( (TQTabletEvent*)e ); -// // if ( ! ((TQTabletEvent*)e)->isAccepted() ) -// // return FALSE; -// // break; -// // case TQEvent::Accel: -// // ((TQKeyEvent*)e)->ignore(); -// // return FALSE; -// case TQEvent::KeyPress: { -// TQKeyEvent *k = (TQKeyEvent *)e; -// bool res = FALSE; -// if ( !(k->state() & ControlButton || k->state() & TQt::AltButton) ) { -// if ( k->key() == Qt::Key_Backtab || -// (k->key() == Qt::Key_Tab && -// (k->state() & ShiftButton)) ) { -// res = focusNextPrevChild( FALSE ); -// -// } else if ( k->key() == Qt::Key_Tab ) { -// res = focusNextPrevChild( TRUE ); -// } -// if ( res ) -// break; -// } -// keyPressEvent( k ); -// if ( !k->isAccepted() ) -// return FALSE; -// } -// break; -// -// case TQEvent::KeyRelease: -// keyReleaseEvent( (TQKeyEvent*)e ); -// if ( ! ((TQKeyEvent*)e)->isAccepted() ) -// return FALSE; -// break; -// // -// // case TQEvent::IMStart: { -// // TQIMEvent *i = (TQIMEvent *) e; -// // imStartEvent(i); -// // if (! i->isAccepted()) -// // return FALSE; -// // } -// // break; -// // -// // case TQEvent::IMCompose: { -// // TQIMEvent *i = (TQIMEvent *) e; -// // imComposeEvent(i); -// // if (! i->isAccepted()) -// // return FALSE; -// // } -// // break; -// // -// // case TQEvent::IMEnd: { -// // TQIMEvent *i = (TQIMEvent *) e; -// // imEndEvent(i); -// // if (! i->isAccepted()) -// // return FALSE; -// // } -// // break; -// // -// // case TQEvent::FocusIn: -// // focusInEvent( (TQFocusEvent*)e ); -// // setFontSys(); -// // break; -// -// case TQEvent::FocusOut: -// focusOutEvent( (TQFocusEvent*)e ); -// break; -// -// case TQEvent::Enter: -// enterEvent( e ); -// break; -// -// case TQEvent::Leave: -// leaveEvent( e ); -// break; -// -// case TQEvent::Paint: -// // At this point the event has to be delivered, regardless -// // whether the widget isVisible() or not because it -// // already went through the filters -// paintEvent( (TQPaintEvent*)e ); -// break; -// -// case TQEvent::Move: -// moveEvent( (TQMoveEvent*)e ); -// break; -// -// case TQEvent::Resize: -// resizeEvent( (TQResizeEvent*)e ); -// break; -// -// case TQEvent::Close: { -// TQCloseEvent *c = (TQCloseEvent *)e; -// closeEvent( c ); -// if ( !c->isAccepted() ) -// return FALSE; -// } -// break; -// // -// // case TQEvent::ContextMenu: { -// // TQContextMenuEvent *c = (TQContextMenuEvent *)e; -// // contextMenuEvent( c ); -// // if ( !c->isAccepted() ) -// // return FALSE; -// // } -// // break; -// // -// // #ifndef TQT_NO_DRAGANDDROP -// // case TQEvent::Drop: -// // dropEvent( (TQDropEvent*) e); -// // break; -// // -// // case TQEvent::DragEnter: -// // dragEnterEvent( (TQDragEnterEvent*) e); -// // break; -// // -// // case TQEvent::DragMove: -// // dragMoveEvent( (TQDragMoveEvent*) e); -// // break; -// // -// // case TQEvent::DragLeave: -// // dragLeaveEvent( (TQDragLeaveEvent*) e); -// // break; -// // #endif -// // -// case TQEvent::Show: -// showEvent( (TQShowEvent*) e); -// break; -// -// case TQEvent::Hide: -// hideEvent( (TQHideEvent*) e); -// break; -// -// // case TQEvent::ShowWindowRequest: -// // if ( isShown() ) -// // showWindow(); -// // break; -// // -// // case TQEvent::ParentFontChange: -// // if ( isTopLevel() ) -// // break; -// // // fall through -// // case TQEvent::ApplicationFontChange: -// // if ( own_font ) -// // setFont( fnt.resolve( qt_naturalWidgetFont( this ) ) ); -// // else -// // unsetFont(); -// // break; -// // -// // #ifndef TQT_NO_PALETTE -// // case TQEvent::ParentPaletteChange: -// // if ( isTopLevel() ) -// // break; -// // // fall through -// // case TQEvent::ApplicationPaletteChange: -// // if ( !own_palette && !isDesktop() ) -// // unsetPalette(); -// // # if defined(TQ_WS_TQWS) && !defined (TQT_NO_TQWS_MANAGER) -// // if ( isTopLevel() && topData()->qwsManager ) { -// // TQRegion r( topData()->qwsManager->region() ); -// // TQApplication::postEvent(topData()->qwsManager, new TQPaintEvent(r, FALSE) ); -// // } -// // # endif -// // break; -// // #endif -// // -// case TQEvent::WindowActivate: -// case TQEvent::WindowDeactivate: -// windowActivationChange( e->type() != TQEvent::WindowActivate ); -// if ( childrenListObject() ) { -// TQObjectListIt it( *childrenListObject() ); -// TQObject *o; -// while( ( o = it.current() ) != 0 ) { -// ++it; -// if ( o->isWidgetType() && -// ((TQWidget*)o)->isVisible() && -// !((TQWidget*)o)->isTopLevel() ) -// TQApplication::sendEvent( o, e ); -// } -// } -// break; -// // -// // case TQEvent::LanguageChange: -// // case TQEvent::LocaleChange: -// // if ( childrenListObject() ) { -// // TQObjectListIt it( *childrenListObject() ); -// // TQObject *o; -// // while( ( o = it.current() ) != 0 ) { -// // ++it; -// // TQApplication::sendEvent( o, e ); -// // } -// // } -// // if ( e->type() == TQEvent::LanguageChange ) { -// // int index = tqmetaObject()->findSlot( "languageChange()", TRUE ); -// // if ( index >= 0 ) -// // qt_invoke( index, 0 ); -// // } -// // update(); -// // break; -// // #ifndef TQT_NO_LAYOUT -// // case TQEvent::LayoutDirectionChange: -// // if ( tqlayout() ) { -// // tqlayout()->activate(); -// // } else { -// // TQObjectList* llist = queryList( "TQLayout", 0, TRUE, TRUE ); -// // TQObjectListIt lit( *llist ); -// // TQLayout *lay; -// // while ( ( lay = (TQLayout*)lit.current() ) != 0 ) { -// // ++lit; -// // lay->activate(); -// // } -// // delete llist; -// // } -// // update(); -// // break; -// // #endif -// // - case TQEvent::WindowStateChange: - { - if (tqt_internal_ignore_next_windowstatechange_event == FALSE) { - TQEvent::Type type; - if (isMinimized()) - type = TQEvent::ShowMinimized; - else if (isFullScreen()) - type = TQEvent::ShowFullScreen; - else if (isMaximized()) - type = TQEvent::ShowMaximized; - else - type = TQEvent::ShowNormal; - TQApplication::postEvent(this, new TQEvent(type)); - } - else { - tqt_internal_ignore_next_windowstatechange_event = FALSE; - } - break; - } - -// case TQEvent::WindowBlocked: -// case TQEvent::WindowUnblocked: -// if ( childrenListObject() ) { -// TQObjectListIt it( *childrenListObject() ); -// TQObject *o; -// while( ( o = it.current() ) != 0 ) { -// ++it; -// TQWidget *w = ::tqqt_cast<TQWidget*>(o); -// if (w && !w->testWFlags(TQt::WShowModal)) -// TQApplication::sendEvent( o, e ); -// } -// } -// break; - - case TQEvent::ChildInserted: -// case TQEvent::ChildRemoved: // Causes a recursion loop if uncommented - childEvent( (TQChildEvent*)e ); - return TRUE; - - default: - if ( TQT_TQOBJECT(this)->TQObject::event( e ) ) - return TRUE; - return QWidget::event(e); - } - - return TRUE; -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive mouse move events for the widget. - - If mouse tracking is switched off, mouse move events only occur if - a mouse button is pressed while the mouse is being moved. If mouse - tracking is switched on, mouse move events occur even if no mouse - button is pressed. - - TQMouseEvent::pos() reports the position of the mouse cursor, - relative to this widget. For press and release events, the - position is usually the same as the position of the last mouse - move event, but it might be different if the user's hand shakes. - This is a feature of the underlying window system, not TQt. - - \sa setMouseTracking(), mousePressEvent(), mouseReleaseEvent(), - mouseDoubleClickEvent(), event(), TQMouseEvent -*/ - -void TQWidget::mouseMoveEvent( TQMouseEvent * e) -{ - e->ignore(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive mouse press events for the widget. - - If you create new widgets in the mousePressEvent() the - mouseReleaseEvent() may not end up where you expect, depending on - the underlying window system (or X11 window manager), the widgets' - location and maybe more. - - The default implementation implements the closing of popup widgets - when you click outside the window. For other widget types it does - nothing. - - \sa mouseReleaseEvent(), mouseDoubleClickEvent(), - mouseMoveEvent(), event(), TQMouseEvent -*/ - -void TQWidget::mousePressEvent( TQMouseEvent *e ) -{ - e->ignore(); - if ( isPopup() ) { - e->accept(); - TQWidget* w; - while ( (w = TQT_TQWIDGET(tqApp->activePopupWidget()) ) && w != this ){ - w->close(); - if (tqApp->activePopupWidget() == w) // widget does not want to dissappear - w->hide(); // hide at least - } - if (!TQT_TQRECT_OBJECT(rect()).contains(e->pos()) ){ - close(); - } - } -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive mouse release events for the widget. - - \sa mouseReleaseEvent(), mouseDoubleClickEvent(), - mouseMoveEvent(), event(), TQMouseEvent -*/ - -void TQWidget::mouseReleaseEvent( TQMouseEvent * e ) -{ - e->ignore(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive mouse double click events for the widget. - - The default implementation generates a normal mouse press event. - - Note that the widgets gets a mousePressEvent() and a - mouseReleaseEvent() before the mouseDoubleClickEvent(). - - \sa mousePressEvent(), mouseReleaseEvent() mouseMoveEvent(), - event(), TQMouseEvent -*/ - -void TQWidget::mouseDoubleClickEvent( TQMouseEvent *e ) -{ - mousePressEvent( e ); // try mouse press event -} - -#ifndef TQT_NO_WHEELEVENT -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive wheel events for the widget. - - If you reimplement this handler, it is very important that you - \link TQWheelEvent ignore()\endlink the event if you do not handle - it, so that the widget's parent can interpret it. - - The default implementation ignores the event. - - \sa TQWheelEvent::ignore(), TQWheelEvent::accept(), event(), - TQWheelEvent -*/ - -void TQWidget::wheelEvent( TQWheelEvent *e ) -{ - e->ignore(); -} -#endif - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive tablet events for the widget. - - If you reimplement this handler, it is very important that you - \link TQTabletEvent ignore()\endlink the event if you do not handle - it, so that the widget's parent can interpret it. - - The default implementation ignores the event. - - \sa TQTabletEvent::ignore(), TQTabletEvent::accept(), event(), - TQTabletEvent -*/ - -void TQWidget::tabletEvent( TQTabletEvent *e ) -{ - e->ignore(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive key press events for the widget. - - A widget must call setFocusPolicy() to accept focus initially and - have focus in order to receive a key press event. - - If you reimplement this handler, it is very important that you - explicitly \link TQKeyEvent::ignore() ignore\endlink the event - if you do not understand it, so that the widget's parent can - interpret it; otherwise, the event will be implicitly accepted. - Although top-level widgets are able to choose whether to accept - or ignore unknown events because they have no parent widgets that - could otherwise handle them, it is good practice to explicitly - ignore events to make widgets as reusable as possible. - - The default implementation closes popup widgets if the user - presses <b>Esc</b>. Otherwise the event is ignored. - - \sa keyReleaseEvent(), TQKeyEvent::ignore(), setFocusPolicy(), - focusInEvent(), focusOutEvent(), event(), TQKeyEvent -*/ - -void TQWidget::keyPressEvent( TQKeyEvent *e ) -{ - if ( isPopup() && e->key() == Key_Escape ) { - e->accept(); - close(); - } else { - e->ignore(); - } -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive key release events for the widget. - - A widget must \link setFocusPolicy() accept focus\endlink - initially and \link hasFocus() have focus\endlink in order to - receive a key release event. - - If you reimplement this handler, it is very important that you - \link TQKeyEvent ignore()\endlink the release if you do not - understand it, so that the widget's parent can interpret it. - - The default implementation ignores the event. - - \sa keyPressEvent(), TQKeyEvent::ignore(), setFocusPolicy(), - focusInEvent(), focusOutEvent(), event(), TQKeyEvent -*/ - -void TQWidget::keyReleaseEvent( TQKeyEvent *e ) -{ - e->ignore(); -} - -/*! - This event handler can be reimplemented in a subclass to receive - keyboard focus events (focus received) for the widget. - - A widget normally must setFocusPolicy() to something other than - \c NoFocus in order to receive focus events. (Note that the - application programmer can call setFocus() on any widget, even - those that do not normally accept focus.) - - The default implementation updates the widget (except for toplevel - widgets that do not specify a focusPolicy() ). It also calls - setMicroFocusHint(), hinting any system-specific input tools about - the focus of the user's attention. - - \sa focusOutEvent(), setFocusPolicy(), keyPressEvent(), - keyReleaseEvent(), event(), TQFocusEvent -*/ - -void TQWidget::focusInEvent( TQFocusEvent * ) -{ - if ( focusPolicy() != Qt::NoFocus || !isTopLevel() ) { - update(); - if ( testWState(TQt::WState_AutoMask) ) - updateMask(); - setMicroFocusHint(width()/2, 0, 1, height(), FALSE); - } -} - -/*! - This event handler can be reimplemented in a subclass to receive - keyboard focus events (focus lost) for the widget. - - A widget normally must setFocusPolicy() to something other than - \c NoFocus in order to receive focus events. (Note that the - application programmer can call setFocus() on any widget, even - those that do not normally accept focus.) - - The default implementation updates the widget (except for toplevel - widgets that do not specify a focusPolicy() ). It also calls - setMicroFocusHint(), hinting any system-specific input tools about - the focus of the user's attention. - - \sa focusInEvent(), setFocusPolicy(), keyPressEvent(), - keyReleaseEvent(), event(), TQFocusEvent -*/ - -void TQWidget::focusOutEvent( TQFocusEvent * ) -{ - if ( focusPolicy() != Qt::NoFocus || !isTopLevel() ){ - update(); - if ( testWState(TQt::WState_AutoMask) ) - updateMask(); - } -} - -/*! - \property TQWidget::microFocusHint - \brief the currently set micro focus hint for this widget. - - See the documentation of setMicroFocusHint() for more information. -*/ -TQRect TQWidget::microFocusHint() const -{ - if ( !extra ) - return TQRect(width()/2, 0, 1, height() ); - else if ( extra->micro_focus_hint.isEmpty() ) - return TQRect(width()/2, 0, 1, height() ); - else - return extra->micro_focus_hint; -} - -/*! - This event handler can be reimplemented in a subclass to receive - widget enter events. - - An event is sent to the widget when the mouse cursor enters the - widget. - - \sa leaveEvent(), mouseMoveEvent(), event() -*/ - -void TQWidget::enterEvent( TQEvent * ) -{ -} - -/*! - This event handler can be reimplemented in a subclass to receive - widget leave events. - - A leave event is sent to the widget when the mouse cursor leaves - the widget. - - \sa enterEvent(), mouseMoveEvent(), event() -*/ - -void TQWidget::leaveEvent( TQEvent * ) -{ -} - -/*! - This event handler can be reimplemented in a subclass to receive - paint events. - - A paint event is a request to tqrepaint all or part of the widget. - It can happen as a result of tqrepaint() or update(), or because the - widget was obscured and has now been uncovered, or for many other - reasons. - - Many widgets can simply tqrepaint their entire surface when asked - to, but some slow widgets need to optimize by painting only the - requested region: TQPaintEvent::region(). This speed optimization - does not change the result, as painting is clipped to that region - during event processing. TQListView and TQCanvas do this, for - example. - - TQt also tries to speed up painting by merging multiple paint - events into one. When update() is called several times or the - window system sends several paint events, TQt merges these events - into one event with a larger region (see TQRegion::unite()). - tqrepaint() does not permit this optimization, so we suggest using - update() when possible. - - When the paint event occurs, the update region has normally been - erased, so that you're painting on the widget's background. There - are a couple of exceptions and TQPaintEvent::erased() tells you - whether the widget has been erased or not. - - The background can be set using setBackgroundMode(), - setPaletteBackgroundColor() or setBackgroundPixmap(). The - documentation for setBackgroundMode() elaborates on the - background; we recommend reading it. - - \sa event(), tqrepaint(), update(), TQPainter, TQPixmap, TQPaintEvent -*/ - -void TQWidget::paintEvent( TQPaintEvent *e ) -{ -// // At least let Qt4 get a shot at painting it -// QWidget::paintEvent(e); -} - - -/*! - This event handler can be reimplemented in a subclass to receive - widget move events. When the widget receives this event, it is - already at the new position. - - The old position is accessible through TQMoveEvent::oldPos(). - - \sa resizeEvent(), event(), move(), TQMoveEvent -*/ - -void TQWidget::moveEvent( TQMoveEvent * ) -{ -} - - -/*! - This event handler can be reimplemented in a subclass to receive - widget resize events. When resizeEvent() is called, the widget - already has its new tqgeometry. The old size is accessible through - TQResizeEvent::oldSize(). - - The widget will be erased and receive a paint event immediately - after processing the resize event. No drawing need be (or should - be) done inside this handler. - - Widgets that have been created with the \c WNoAutoErase flag - will not be erased. Nevertheless, they will receive a paint event - for their entire area afterwards. Again, no drawing needs to be - done inside this handler. - - The default implementation calls updateMask() if the widget has - \link TQWidget::setAutoMask() automatic masking\endlink enabled. - - \sa moveEvent(), event(), resize(), TQResizeEvent, paintEvent() -*/ - -void TQWidget::resizeEvent( TQResizeEvent * ) -{ - if ( testWState(TQt::WState_AutoMask) ) - updateMask(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive widget close events. - - The default implementation calls e->accept(), which hides this - widget. See the \l TQCloseEvent documentation for more details. - - \sa event(), hide(), close(), TQCloseEvent -*/ - -void TQWidget::closeEvent( TQCloseEvent *e ) -{ - e->accept(); -} - - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive widget context menu events. - - The default implementation calls e->ignore(), which rejects the - context event. See the \l TQContextMenuEvent documentation for - more details. - - \sa event(), TQContextMenuEvent -*/ - -void TQWidget::contextMenuEvent( TQContextMenuEvent *e ) -{ - e->ignore(); -} - - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive Input Method composition events. This handler - is called when the user begins entering text using an Input Method. - - The default implementation calls e->ignore(), which rejects the - Input Method event. See the \l TQIMEvent documentation for more - details. - - \sa event(), TQIMEvent -*/ -void TQWidget::imStartEvent( TQIMEvent *e ) -{ - e->ignore(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive Input Method composition events. This handler - is called when the user has entered some text using an Input Method. - - The default implementation calls e->ignore(), which rejects the - Input Method event. See the \l TQIMEvent documentation for more - details. - - \sa event(), TQIMEvent -*/ -void TQWidget::imComposeEvent( TQIMEvent *e ) -{ - e->ignore(); -} - - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive Input Method composition events. This handler - is called when the user has finished inputting text via an Input - Method. - - The default implementation calls e->ignore(), which rejects the - Input Method event. See the \l TQIMEvent documentation for more - details. - - \sa event(), TQIMEvent -*/ -void TQWidget::imEndEvent( TQIMEvent *e ) -{ - e->ignore(); -} - - -#ifndef TQT_NO_DRAGANDDROP - -/*! - This event handler is called when a drag is in progress and the - mouse enters this widget. - - See the \link dnd.html Drag-and-drop documentation\endlink for an - overview of how to provide drag-and-drop in your application. - - \sa TQTextDrag, TQImageDrag, TQDragEnterEvent -*/ -void TQWidget::dragEnterEvent( TQDragEnterEvent * ) -{ -} - -/*! - This event handler is called when a drag is in progress and the - mouse enters this widget, and whenever it moves within the widget. - - See the \link dnd.html Drag-and-drop documentation\endlink for an - overview of how to provide drag-and-drop in your application. - - \sa TQTextDrag, TQImageDrag, TQDragMoveEvent -*/ -void TQWidget::dragMoveEvent( TQDragMoveEvent * ) -{ -} - -/*! - This event handler is called when a drag is in progress and the - mouse leaves this widget. - - See the \link dnd.html Drag-and-drop documentation\endlink for an - overview of how to provide drag-and-drop in your application. - - \sa TQTextDrag, TQImageDrag, TQDragLeaveEvent -*/ -void TQWidget::dragLeaveEvent( TQDragLeaveEvent * ) -{ -} - -/*! - This event handler is called when the drag is dropped on this - widget. - - See the \link dnd.html Drag-and-drop documentation\endlink for an - overview of how to provide drag-and-drop in your application. - - \sa TQTextDrag, TQImageDrag, TQDropEvent -*/ -void TQWidget::dropEvent( TQDropEvent * ) -{ -} - -#endif // TQT_NO_DRAGANDDROP - -/*! - This event handler can be reimplemented in a subclass to receive - widget show events. - - Non-spontaneous show events are sent to widgets immediately before - they are shown. The spontaneous show events of top-level widgets - are delivered afterwards. - - \sa event(), TQShowEvent -*/ -void TQWidget::showEvent( TQShowEvent * ) -{ -} - -/*! - This event handler can be reimplemented in a subclass to receive - widget hide events. - - Hide events are sent to widgets immediately after they have been - hidden. - - \sa event(), TQHideEvent -*/ -void TQWidget::hideEvent( TQHideEvent * ) -{ -} - -/* - \fn TQWidget::x11Event( MSG * ) - - This special event handler can be reimplemented in a subclass to - receive native X11 events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::x11EventFilter() -*/ - - -#if defined(TQ_WS_MAC) - -/*! - This special event handler can be reimplemented in a subclass to - receive native Macintosh events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::macEventFilter() -*/ - -bool TQWidget::macEvent( MSG * ) -{ - return FALSE; -} - -#endif -#if defined(TQ_WS_WIN) - -/*! - This special event handler can be reimplemented in a subclass to - receive native Windows events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::winEventFilter() -*/ -bool TQWidget::winEvent( MSG * ) -{ - return FALSE; -} - -#endif -#if defined(TQ_WS_X11) - -/*! - This special event handler can be reimplemented in a subclass to - receive native X11 events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::x11EventFilter() -*/ -bool TQWidget::x11Event( XEvent * ) -{ - return FALSE; -} - -#endif -#if defined(TQ_WS_TQWS) - -/*! - This special event handler can be reimplemented in a subclass to - receive native TQt/Embedded events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::qwsEventFilter() -*/ -bool TQWidget::qwsEvent( TQWSEvent * ) -{ - return FALSE; -} - -#endif - -void TQWidget::timerEvent( TQTimerEvent * ) -{ -} - -void TQWidget::childEvent( TQChildEvent * ) -{ -} - -void TQWidget::customEvent( TQCustomEvent * ) -{ -} - -bool TQWidget::eventFilter( TQObject * /* watched */, TQEvent * /* e */ ) -{ - return FALSE; -} - -int TQWidget::x11Depth() const { - const QX11Info *info = &x11Info(); - if (info) - return info->depth(); - return QX11Info::appDepth(); -} - -/*! - Adjusts the size of the widget to fit the contents. - - Uses tqsizeHint() if valid (i.e if the size hint's width and height - are \>= 0), otherwise sets the size to the tqchildren rectangle (the - union of all child widget geometries). - - \sa tqsizeHint(), tqchildrenRect() -*/ - -void TQWidget::adjustSize() -{ - TQApplication::sendPostedEvents( 0, TQEvent::ChildInserted ); - TQApplication::sendPostedEvents( 0, TQEvent::LayoutHint ); - if ( !testWState(WState_Polished) ) - polish(); - TQSize s = tqsizeHint(); - - if ( isTopLevel() ) { - -#if defined(TQ_WS_X11) - TQRect screen = TQApplication::desktop()->screenGeometry( x11Screen() ); -#else // all others - TQRect screen = TQApplication::desktop()->screenGeometry( pos() ); -#endif - -#ifndef TQT_NO_LAYOUT - if ( tqlayout() ) { - if ( tqlayout()->hasHeightForWidth() ) { - s = s.boundedTo( screen.size() ); - s.setHeight( tqlayout()->totalHeightForWidth( s.width() ) ); - } - } else -#endif - { - if ( sizePolicy().hasHeightForWidth() ) { - s = s.boundedTo( screen.size() ); - s.setHeight( heightForWidth( s.width() ) ); - } - } - } - if ( s.isValid() ) { - resize( s ); - return; - } - TQRect r = tqchildrenRect(); // get tqchildren rectangle - if ( r.isNull() ) // probably no widgets - return; - resize( r.width() + 2 * r.x(), r.height() + 2 * r.y() ); -} - -bool TQWidget::isA( const char *classname ) const -{ - if (tqstrcmp(classname, metaObject()->className()) == 0) return true; - else { - TQString cn = metaObject()->className(); - if (cn[0] == 'T') - cn = cn.remove(0,1); - return (tqstrcmp(classname, cn.ascii()) == 0); - } -} - -bool TQWidget::inherits( const char *classname ) const { - if (QWidget::inherits(classname)) return true; - else { - TQString cn = classname; - if (cn[0] != 'T') - cn = cn.prepend('T'); - return QWidget::inherits(cn.ascii()); - } -} - -void TQWidget::setWState( uint state ) { - if (state == TQt::WState_OwnSizePolicy) setAttribute(Qt::WA_WState_OwnSizePolicy, true); - else if (state == TQt::WState_BlockUpdates) setAttribute(Qt::WA_ForceUpdatesDisabled, true); - else { - tqt_internal_ignore_next_windowstatechange_event = TRUE; - overrideWindowState((Qt::WindowState) (windowState() | state)); - } -} - -void TQWidget::clearWState( uint flags ) { - if (flags == TQt::WState_OwnSizePolicy) - setAttribute(Qt::WA_WState_OwnSizePolicy, false); - else if (flags == TQt::WState_BlockUpdates) - setAttribute(Qt::WA_ForceUpdatesDisabled, false); - else { - tqt_internal_ignore_next_windowstatechange_event = TRUE; - overrideWindowState((QWidget::windowState() &= (Qt::WindowState)(~flags))); - } -} - -WState TQWidget::getWState() const { - return QWidget::windowState(); -} - -WState TQWidget::testWState( WState s ) const { - if (s == TQt::WState_OwnSizePolicy) - return (WState)(testAttribute(Qt::WA_WState_OwnSizePolicy) ? TQt::WState_OwnSizePolicy : 0); - else if (s == TQt::WState_BlockUpdates) - return (WState)(testAttribute(Qt::WA_ForceUpdatesDisabled) ? TQt::WState_BlockUpdates : 0); - else - return (QWidget::windowState() & s); -} - -WState TQWidget::testWState( TQt::WidgetState s ) const { - if (s == TQt::WState_OwnSizePolicy) - return (WState)(testAttribute(Qt::WA_WState_OwnSizePolicy) ? TQt::WState_OwnSizePolicy : 0); - else if (s == TQt::WState_BlockUpdates) - return (WState)(testAttribute(Qt::WA_ForceUpdatesDisabled) ? TQt::WState_BlockUpdates : 0); - else - return (QWidget::windowState() & s); -} - -#else // USE_QT4 - -/*! - \class TQWidget tqwidget.h - \brief The TQWidget class is the base class of all user interface objects. - - \ingroup abstractwidgets - \mainclass - - The widget is the atom of the user interface: it receives mouse, - keyboard and other events from the window system, and paints a - representation of itself on the screen. Every widget is - rectangular, and they are sorted in a Z-order. A widget is - clipped by its parent and by the widgets in front of it. - - A widget that isn't embedded in a parent widget is called a - top-level widget. Usually, top-level widgets are windows with a - frame and a title bar (although it is also possible to create - top-level widgets without such decoration if suitable widget flags - are used). In TQt, TQMainWindow and the various subclasses of - TQDialog are the most common top-level windows. - - A widget without a parent widget is always a top-level widget. - - Non-top-level widgets are child widgets. These are child windows - in their parent widgets. You cannot usually distinguish a child - widget from its parent visually. Most other widgets in TQt are - useful only as child widgets. (It is possible to make, say, a - button into a top-level widget, but most people prefer to put - their buttons inside other widgets, e.g. TQDialog.) - - If you want to use a TQWidget to hold child widgets you will - probably want to add a tqlayout to the parent TQWidget. (See \link - tqlayout.html Layouts\endlink.) - - TQWidget has many member functions, but some of them have little - direct functionality: for example, TQWidget has a font property, - but never uses this itself. There are many subclasses which - provide real functionality, such as TQPushButton, TQListBox and - TQTabDialog, etc. - - \section1 Groups of functions: - - \table - \header \i Context \i Functions - - \row \i Window functions \i - show(), - hide(), - raise(), - lower(), - close(). - - \row \i Top level windows \i - caption(), - setCaption(), - icon(), - setIcon(), - iconText(), - setIconText(), - isActiveWindow(), - setActiveWindow(), - showMinimized(). - showMaximized(), - showFullScreen(), - showNormal(). - - \row \i Window contents \i - update(), - tqrepaint(), - erase(), - scroll(), - updateMask(). - - \row \i Geometry \i - pos(), - size(), - rect(), - x(), - y(), - width(), - height(), - sizePolicy(), - tqsetSizePolicy(), - tqsizeHint(), - updateGeometry(), - tqlayout(), - move(), - resize(), - setGeometry(), - frameGeometry(), - tqgeometry(), - tqchildrenRect(), - adjustSize(), - mapFromGlobal(), - mapFromParent() - mapToGlobal(), - mapToParent(), - tqmaximumSize(), - tqminimumSize(), - sizeIncrement(), - setMaximumSize(), - setMinimumSize(), - setSizeIncrement(), - setBaseSize(), - setFixedSize() - - \row \i Mode \i - isVisible(), - isVisibleTo(), - isMinimized(), - isDesktop(), - isEnabled(), - isEnabledTo(), - isModal(), - isPopup(), - isTopLevel(), - setEnabled(), - hasMouseTracking(), - setMouseTracking(), - isUpdatesEnabled(), - setUpdatesEnabled(), - clipRegion(). - - \row \i Look and feel \i - style(), - setStyle(), - cursor(), - setCursor() - font(), - setFont(), - palette(), - setPalette(), - backgroundMode(), - setBackgroundMode(), - tqcolorGroup(), - fontMetrics(), - fontInfo(). - - \row \i Keyboard focus<br>functions \i - isFocusEnabled(), - setFocusPolicy(), - focusPolicy(), - hasFocus(), - setFocus(), - clearFocus(), - setTabOrder(), - setFocusProxy(). - - \row \i Mouse and<br>keyboard grabbing \i - grabMouse(), - releaseMouse(), - grabKeyboard(), - releaseKeyboard(), - mouseGrabber(), - keyboardGrabber(). - - \row \i Event handlers \i - event(), - mousePressEvent(), - mouseReleaseEvent(), - mouseDoubleClickEvent(), - mouseMoveEvent(), - keyPressEvent(), - keyReleaseEvent(), - focusInEvent(), - focusOutEvent(), - wheelEvent(), - enterEvent(), - leaveEvent(), - paintEvent(), - moveEvent(), - resizeEvent(), - closeEvent(), - dragEnterEvent(), - dragMoveEvent(), - dragLeaveEvent(), - dropEvent(), - childEvent(), - showEvent(), - hideEvent(), - customEvent(). - - \row \i Change handlers \i - enabledChange(), - fontChange(), - paletteChange(), - styleChange(), - windowActivationChange(). - - \row \i System functions \i - parentWidget(), - tqtopLevelWidget(), - reparent(), - polish(), - winId(), - find(), - metric(). - - \row \i What's this help \i - customWhatsThis() - - \row \i Internal kernel<br>functions \i - focusNextPrevChild(), - wmapper(), - clearWFlags(), - getWFlags(), - setWFlags(), - testWFlags(). - - \endtable - - Every widget's constructor accepts two or three standard arguments: - \list 1 - \i \c{TQWidget *parent = 0} is the parent of the new widget. - If it is 0 (the default), the new widget will be a top-level window. - If not, it will be a child of \e parent, and be constrained by \e - parent's tqgeometry (unless you specify \c WType_TopLevel as - widget flag). - \i \c{const char *name = 0} is the widget name of the new - widget. You can access it using name(). The widget name is little - used by programmers but is quite useful with GUI builders such as - \e{TQt Designer} (you can name a widget in \e{TQt Designer}, and - connect() to it using the name in your code). The dumpObjectTree() - debugging function also uses it. - \i \c{WFlags f = 0} (where available) sets the widget flags; the - default is suitable for almost all widgets, but to get, for - example, a top-level widget without a window system frame, you - must use special flags. - \endlist - - The tictac/tictac.cpp example program is good example of a simple - widget. It contains a few event handlers (as all widgets must), a - few custom routines that are specific to it (as all useful widgets - do), and has a few tqchildren and connections. Everything it does - is done in response to an event: this is by far the most common way - to design GUI applications. - - You will need to supply the content for your widgets yourself, but - here is a brief run-down of the events, starting with the most common - ones: - - \list - - \i paintEvent() - called whenever the widget needs to be - repainted. Every widget which displays output must implement it, - and it is wise \e not to paint on the screen outside - paintEvent(). - - \i resizeEvent() - called when the widget has been resized. - - \i mousePressEvent() - called when a mouse button is pressed. - There are six mouse-related events, but the mouse press and mouse - release events are by far the most important. A widget receives - mouse press events when the mouse is inside it, or when it has - grabbed the mouse using grabMouse(). - - \i mouseReleaseEvent() - called when a mouse button is released. - A widget receives mouse release events when it has received the - corresponding mouse press event. This means that if the user - presses the mouse inside \e your widget, then drags the mouse to - somewhere else, then releases, \e your widget receives the release - event. There is one exception: if a popup menu appears while the - mouse button is held down, this popup immediately steals the mouse - events. - - \i mouseDoubleClickEvent() - not quite as obvious as it might seem. - If the user double-clicks, the widget receives a mouse press event - (perhaps a mouse move event or two if they don't hold the mouse - quite steady), a mouse release event and finally this event. It is - \e{not possible} to distinguish a click from a double click until you've - seen whether the second click arrives. (This is one reason why most GUI - books recommend that double clicks be an extension of single clicks, - rather than trigger a different action.) - - \endlist - - If your widget only contains child widgets, you probably do not need to - implement any event handlers. If you want to detect a mouse click in - a child widget call the child's hasMouse() function inside the - parent widget's mousePressEvent(). - - Widgets that accept keyboard input need to reimplement a few more - event handlers: - - \list - - \i keyPressEvent() - called whenever a key is pressed, and again - when a key has been held down long enough for it to auto-repeat. - Note that the Tab and Shift+Tab keys are only passed to the widget - if they are not used by the focus-change mechanisms. To force those - keys to be processed by your widget, you must reimplement - TQWidget::event(). - - \i focusInEvent() - called when the widget gains keyboard focus - (assuming you have called setFocusPolicy()). Well written widgets - indicate that they own the keyboard focus in a clear but discreet - way. - - \i focusOutEvent() - called when the widget loses keyboard focus. - - \endlist - - Some widgets will also need to reimplement some of the less common - event handlers: - - \list - - \i mouseMoveEvent() - called whenever the mouse moves while a - button is held down. This is useful for, for example, dragging. If - you call setMouseTracking(TRUE), you get mouse move events even - when no buttons are held down. (Note that applications which make - use of mouse tracking are often not very useful on low-bandwidth X - connections.) (See also the \link dnd.html drag and drop\endlink - information.) - - \i keyReleaseEvent() - called whenever a key is released, and also - while it is held down if the key is auto-repeating. In that case - the widget receives a key release event and immediately a key press - event for every repeat. Note that the Tab and Shift+Tab keys are - only passed to the widget if they are not used by the focus-change - mechanisms. To force those keys to be processed by your widget, you - must reimplement TQWidget::event(). - - \i wheelEvent() -- called whenever the user turns the mouse wheel - while the widget has the focus. - - \i enterEvent() - called when the mouse enters the widget's screen - space. (This excludes screen space owned by any tqchildren of the - widget.) - - \i leaveEvent() - called when the mouse leaves the widget's screen - space. - - \i moveEvent() - called when the widget has been moved relative to its - parent. - - \i closeEvent() - called when the user closes the widget (or when - close() is called). - - \endlist - - There are also some rather obscure events. They are listed in - \c tqevent.h and you need to reimplement event() to handle them. - The default implementation of event() handles Tab and Shift+Tab - (to move the keyboard focus), and passes on most other events to - one of the more specialized handlers above. - - When implementing a widget, there are a few more things to - consider. - - \list - - \i In the constructor, be sure to set up your member variables - early on, before there's any chance that you might receive an event. - - \i It is almost always useful to reimplement tqsizeHint() and to set - the correct size policy with tqsetSizePolicy(), so users of your class - can set up tqlayout management more easily. A size policy lets you - supply good defaults for the tqlayout management handling, so that - other widgets can contain and manage yours easily. tqsizeHint() - indicates a "good" size for the widget. - - \i If your widget is a top-level window, setCaption() and setIcon() set - the title bar and icon respectively. - - \endlist - - \sa TQEvent, TQPainter, TQGridLayout, TQBoxLayout -*/ - - -/***************************************************************************** - Internal TQWidgetMapper class - - The purpose of this class is to map widget identifiers to TQWidget objects. - All TQWidget objects register themselves in the TQWidgetMapper when they - get an identifier. Widgets unregister themselves when they change ident- - ifier or when they are destroyed. A widget identifier is really a window - handle. - - The widget mapper is created and destroyed by the main application routines - in the file qapp_xxx.cpp. - *****************************************************************************/ - -#if defined(TQ_WS_TQWS) || defined(TQ_OS_TEMP) -static const int WDictSize = 163; // plenty for small tqdevices -#else -static const int WDictSize = 1123; // plenty for 5 big complex windows -#endif - -class TQWidgetMapper : public TQWidgetIntDict -{ // maps ids -> widgets -public: - TQWidgetMapper(); - ~TQWidgetMapper(); - TQWidget *find( WId id ); // find widget - void insert( const TQWidget * ); // insert widget - bool remove( WId id ); // remove widget -private: - WId cur_id; - TQWidget *cur_widget; -}; - -TQWidgetMapper *TQWidget::wmapper() = 0; // app global widget mapper - - -TQWidgetMapper::TQWidgetMapper() : TQWidgetIntDict(WDictSize) -{ - cur_id = 0; - cur_widget = 0; -} - -TQWidgetMapper::~TQWidgetMapper() -{ - clear(); -} - -inline TQWidget *TQWidgetMapper::find( WId id ) -{ - if ( id != cur_id ) { // need to lookup - cur_widget = TQWidgetIntDict::find((long)id); - if ( cur_widget ) - cur_id = id; - else - cur_id = 0; - } - return cur_widget; -} - -inline void TQWidgetMapper::insert( const TQWidget *widget ) -{ - TQWidgetIntDict::insert((long)widget->winId(),widget); -} - -inline bool TQWidgetMapper::remove( WId id ) -{ - if ( cur_id == id ) { // reset current widget - cur_id = 0; - cur_widget = 0; - } - return TQWidgetIntDict::remove((long)id); -} - - -/***************************************************************************** - TQWidget utility functions - *****************************************************************************/ - -static TQFont qt_naturalWidgetFont( TQWidget* w ) { - TQFont naturalfont = TQApplication::font( w ); - if ( ! w->isTopLevel() ) { - if ( ! naturalfont.isCopyOf( TQApplication::font() ) ) - naturalfont = naturalfont.resolve( w->parentWidget()->font() ); - else - naturalfont = w->parentWidget()->font(); - } - return naturalfont; -} - -#ifndef TQT_NO_PALETTE -static TQPalette qt_naturalWidgetPalette( TQWidget* w ) { - TQPalette naturalpalette = TQApplication::palette( w ); - if ( !w->isTopLevel() && naturalpalette.isCopyOf( TQApplication::palette() ) ) - naturalpalette = w->parentWidget()->palette(); - return naturalpalette; -} -#endif - -TQSize qt_naturalWidgetSize( TQWidget *w ) { - TQSize s = w->tqsizeHint(); - TQ_SPExpandData exp; -#ifndef TQT_NO_LAYOUT - if ( w->tqlayout() ) { - if ( w->tqlayout()->hasHeightForWidth() ) - s.setHeight( w->tqlayout()->totalHeightForWidth( s.width() ) ); - exp = w->tqlayout()->expandingDirections(); - } else -#endif - { - if ( w->sizePolicy().hasHeightForWidth() ) - s.setHeight( w->heightForWidth( s.width() ) ); - exp = w->sizePolicy().expandingDirections(); - } - if ( exp & TQSizePolicy::Horizontally ) - s.setWidth( TQMAX( s.width(), 200 ) ); - if ( exp & TQSizePolicy::Vertically ) - s.setHeight( TQMAX( s.height(), 150 ) ); -#if defined(TQ_WS_X11) - TQRect screen = TQApplication::desktop()->screenGeometry( w->x11Screen() ); -#else // all others - TQRect screen = TQApplication::desktop()->screenGeometry( w->pos() ); -#endif - s.setWidth( TQMIN( s.width(), screen.width()*2/3 ) ); - s.setHeight( TQMIN( s.height(), screen.height()*2/3 ) ); - return s; -} - -/***************************************************************************** - TQWidget member functions - *****************************************************************************/ - -/* - Widget state flags: - \list - \i WState_Created The widget has a valid winId(). - \i WState_Disabled The widget does not receive any mouse or keyboard - events. - \i WState_ForceDisabled The widget is explicitly disabled, i.e. it - will remain disabled even when all its ancestors are set to the enabled - state. This implies WState_Disabled. - \i WState_Visible The widget is currently visible. - \i WState_ForceHide The widget is explicitly hidden, i.e. it won't - become visible unless you call show() on it. WState_ForceHide - implies !WState_Visible. - \i WState_OwnCursor A cursor has been set for this widget. - \i WState_MouseTracking Mouse tracking is enabled. - \i WState_CompressKeys Compress keyboard events. - \i WState_BlockUpdates Repaints and updates are disabled. - \i WState_InPaintEvent Currently processing a paint event. - \i WState_Reparented The widget has been reparented. - \i WState_ConfigPending A configuration (resize/move) event is pending. - \i WState_Resized The widget has been resized. - \i WState_AutoMask The widget has an automatic mask, see setAutoMask(). - \i WState_Polished The widget has been "polished" (i.e. late - initialization) by a TQStyle. - \i WState_DND The widget supports drag and drop, see setAcceptDrops(). - \i WState_Exposed the widget was finally exposed (X11 only, - helps avoid paint event doubling). - \i WState_HasMouse The widget is under the mouse cursor. - \endlist -*/ - -/*! \enum TQt::WFlags - \internal */ -/*! \enum TQt::WState - \internal */ - -/*! - \enum TQt::WidgetFlags - - \keyword widget flag - - This enum type is used to specify various window-system properties - for the widget. They are fairly unusual but necessary in a few - cases. Some of these flags depend on whether the underlying window - manager supports them. (See the \link toplevel-example.html - toplevel example\endlink for an explanation and example of their - use.) - - The main types are - - \value WType_TopLevel indicates that this widget is a top-level - widget, usually with a window-system frame and so on. - - \value WType_Dialog indicates that this widget is a top-level - window that should be decorated as a dialog (i.e. typically no - maximize or minimize buttons in the title bar). If you want to use - it as a modal dialog it should be launched from another window, or - have a parent and this flag should be combined with \c WShowModal. - If you make it modal, the dialog will prevent other top-level - windows in the application from getting any input. \c WType_Dialog - implies \c WType_TopLevel. We refer to a top-level window that has - a parent as a \e secondary window. (See also \c WGroupLeader.) - - \value WType_Popup indicates that this widget is a popup - top-level window, i.e. that it is modal, but has a window system - frame appropriate for popup menus. \c WType_Popup implies - WType_TopLevel. - - \value WType_Desktop indicates that this widget is the desktop. - See also \c WPaintDesktop below. \c WType_Desktop implies \c - WType_TopLevel. - - There are also a number of flags which you can use to customize - the appearance of top-level windows. These have no effect on other - windows: - - \value WStyle_Customize indicates that the \c WStyle_* flags - should be used to build the window instead of the default flags. - - \value WStyle_NormalBorder gives the window a normal border. - This cannot be combined with \c WStyle_DialogBorder or \c - WStyle_NoBorder. - - \value WStyle_DialogBorder gives the window a thin dialog border. - This cannot be combined with \c WStyle_NormalBorder or \c - WStyle_NoBorder. - - \value WStyle_NoBorder produces a borderless window. Note that - the user cannot move or resize a borderless window via the window - system. This cannot be combined with \c WStyle_NormalBorder or \c - WStyle_DialogBorder. On Windows, the flag works fine. On X11, the - result of the flag is dependent on the window manager and its - ability to understand MOTIF and/or NETWM hints: most existing - modern window managers can handle this. With \c WX11BypassWM, you - can bypass the window manager completely. This results in a - borderless window that is not managed at all (i.e. no keyboard - input unless you call setActiveWindow() manually). - - \value WStyle_NoBorderEx this value is obsolete. It has the same - effect as using \c WStyle_NoBorder. - - \value WStyle_Title gives the window a title bar. - - \value WStyle_SysMenu adds a window system menu. - - \value WStyle_Minimize adds a minimize button. Note that on - Windows this has to be combined with \c WStyle_SysMenu for it to - work. - - \value WStyle_Maximize adds a maximize button. Note that on - Windows this has to be combined with \c WStyle_SysMenu for it to work. - - \value WStyle_MinMax is equal to \c - WStyle_Minimize|WStyle_Maximize. Note that on Windows this has to - be combined with \c WStyle_SysMenu to work. - - \value WStyle_ContextHelp adds a context help button to dialogs. - - \value WStyle_Tool makes the window a tool window. A tool window - is often a small window with a smaller than usual title bar and - decoration, typically used for collections of tool buttons. It - there is a parent, the tool window will always be kept on top of - it. If there isn't a parent, you may consider passing \c - WStyle_StaysOnTop as well. If the window system supports it, a - tool window can be decorated with a somewhat lighter frame. It can - also be combined with \c WStyle_NoBorder. - - \value WStyle_StaysOnTop informs the window system that the - window should stay on top of all other windows. Note that on some - window managers on X11 you also have to pass \c WX11BypassWM for - this flag to work correctly. - - \value WStyle_Dialog indicates that the window is a logical - subwindow of its parent (i.e. a dialog). The window will not get - its own taskbar entry and will be kept on top of its parent by the - window system. Usually it will also be minimized when the parent - is minimized. If not customized, the window is decorated with a - slightly simpler title bar. This is the flag TQDialog uses. - - \value WStyle_Splash indicates that the window is a splash screen. - On X11, we try to follow NETWM standard for a splash screen window if the - window manager supports is otherwise it is equivalent to \c WX11BypassWM. On - other platforms, it is equivalent to \c WStyle_NoBorder \c | \c WMacNoSheet \c | - \c WStyle_Tool \c | \c WWinOwnDC - - Modifier flags: - - \value WDestructiveClose makes TQt delete this widget when the - widget has accepted closeEvent(), or when the widget tried to - ignore closeEvent() but could not. - - \value WPaintDesktop gives this widget paint events for the - desktop. - - \value WPaintUnclipped makes all painters operating on this - widget unclipped. Children of this widget or other widgets in - front of it do not clip the area the painter can paint on. - - \value WPaintClever indicates that TQt should \e not try to - optimize repainting for the widget, but instead pass on window - system tqrepaint events directly. (This tends to produce more events - and smaller tqrepaint regions.) - - \value WMouseNoMask indicates that even if the widget has a mask, - it wants mouse events for its entire rectangle. - - \value WStaticContents indicates that the widget contents are - north-west aligned and static. On resize, such a widget will - receive paint events only for the newly visible part of itself. - - \value WNoAutoErase indicates that the widget paints all its - pixels. Updating, resizing, scrolling and focus changes should - therefore not erase the widget. This allows smart-repainting to - avoid flicker. - - \value WResizeNoErase this value is obsolete; use WNoAutoErase instead. - \value WRepaintNoErase this value is obsolete; use WNoAutoErase instead. - \value WGroupLeader makes this window a group leader. A group - leader should \e not have a parent (i.e. it should be a top-level - window). Any decendant windows (direct or indirect) of a group - leader are in its group; other windows are not. If you show a - secondary window from the group (i.e. show a window whose top-most - parent is a group leader), that window will be modal with respect - to the other windows in the group, but modeless with respect to - windows in other groups. - - Miscellaneous flags - - \value WShowModal see WType_Dialog - - Internal flags. - - \value WNoMousePropagation - \value WStaticContents - \value WStyle_Reserved - \value WSubWindow - \value WType_Modal - \value WWinOwnDC - \value WX11BypassWM - \value WMacNoSheet - \value WMacDrawer - \value WStyle_Mask - \value WType_Mask - -*/ - -/*! - \enum TQt::WidgetState - - Internal flags. - - \value WState_Created - \value WState_Disabled - \value WState_Visible - \value WState_ForceHide - \value WState_OwnCursor - \value WState_MouseTracking - \value WState_CompressKeys - \value WState_BlockUpdates - \value WState_InPaintEvent - \value WState_Reparented - \value WState_ConfigPending - \value WState_Resized - \value WState_AutoMask - \value WState_Polished - \value WState_DND - \value WState_Reserved0 \e internal - \value WState_CreatedHidden - \value WState_Maximized - \value WState_Minimized - \value WState_ForceDisabled - \value WState_Exposed - \value WState_HasMouse - \value WState_CreatedHidden - \value WState_OwnSizePolicy - \value WState_FullScreen -*/ - - -/*! - \enum TQt::WindowState - - \keyword window state - - This enum type is used to specify the current state of a top-level - window. - - The states are - - \value WindowNoState The window has no state set (in normal state). - \value WindowMinimized The window is minimized (i.e. iconified). - \value WindowMaximized The window is maximized with a frame around it. - \value WindowFullScreen The window fills the entire screen without any frame around it. - \value WindowActive The window is the active window, i.e. it has keyboard focus. - -*/ - -/*! - Constructs a widget which is a child of \a parent, with the name - \a name and widget flags set to \a f. - - If \a parent is 0, the new widget becomes a top-level window. If - \a parent is another widget, this widget becomes a child window - inside \a parent. The new widget is deleted when its \a parent is - deleted. - - The \a name is sent to the TQObject constructor. - - The widget flags argument, \a f, is normally 0, but it can be set - to customize the window frame of a top-level widget (i.e. \a - parent must be 0). To customize the frame, set the \c - WStyle_Customize flag OR'ed with any of the \l TQt::WidgetFlags. - - If you add a child widget to an already visible widget you must - explicitly show the child to make it visible. - - Note that the X11 version of TQt may not be able to deliver all - combinations of style flags on all systems. This is because on - X11, TQt can only ask the window manager, and the window manager - can override the application's settings. On Windows, TQt can set - whatever flags you want. - - Example: - \code - TQLabel *splashScreen = new TQLabel( 0, "mySplashScreen", - WStyle_Customize | WStyle_Splash ); - \endcode -*/ - -TQWidget::TQWidget( TQWidget *parent, const char *name, WFlags f ) - : TQObject( parent, name ), TQPaintDevice( TQInternal::Widget ) -{ -#if defined(TQT_CHECK_STATE) && !defined(TQ_WS_WIN) - if ( tqApp->type() == TQApplication::Tty ) { - qWarning( "TQWidget: Cannot create a TQWidget when no GUI " - "is being used" ); - } -#endif - - fstrut_dirty = 1; - - isWidget = TRUE; // is a widget - winid = 0; // default attributes - widget_state = 0; - widget_flags = f; - focus_policy = 0; - own_font = 0; - own_palette = 0; - sizehint_forced = 0; - is_closing = 0; - in_show = 0; - in_show_maximized = 0; - im_enabled = FALSE; -#ifndef TQT_NO_LAYOUT - lay_out = 0; -#endif - extra = 0; // no extra widget info -#ifndef TQT_NO_PALETTE - bg_col = pal.active().background(); // default background color -#endif - create(); // platform-dependent init -#ifndef TQT_NO_PALETTE - pal = isTopLevel() ? TQApplication::palette() : parentWidget()->palette(); -#endif - if ( ! isTopLevel() ) - fnt = parentWidget()->font(); -#if defined(TQ_WS_X11) - fnt.x11SetScreen( x11Screen() ); -#endif // TQ_WS_X11 - - if ( !isDesktop() ) - setBackgroundFromMode(); //### parts of this are done in create but not all (see reparent(...) ) - // make sure move/resize events are sent to all widgets - TQApplication::postEvent( this, new TQMoveEvent( crect.topLeft(), - crect.topLeft() ) ); - TQApplication::postEvent( this, new TQResizeEvent(crect.size(), - crect.size()) ); - if ( isTopLevel() ) { - setWState( WState_ForceHide | WState_CreatedHidden ); - TQFocusData *fd = focusData( TRUE ); - if ( fd->tqfocusWidgets.findRef(this) < 0 ) - fd->tqfocusWidgets.append( this ); - } else { - // propagate enabled state - if ( !parentWidget()->isEnabled() ) - setWState( WState_Disabled ); - // new widgets do not show up in already visible parents - if ( parentWidget()->isVisible() ) - setWState( WState_ForceHide | WState_CreatedHidden ); - } - if ( ++instanceCounter > maxInstances ) - maxInstances = instanceCounter; -} - -/*! - Destroys the widget. - - All this widget's tqchildren are deleted first. The application - exits if this widget is the main widget. -*/ - -TQWidget::~TQWidget() -{ -#if defined (TQT_CHECK_STATE) - if ( paintingActive() ) - qWarning( "%s (%s): deleted while being painted", className(), name() ); -#endif - - // Remove myself and all tqchildren from the can-take-focus list - TQFocusData *f = focusData( FALSE ); - if ( f ) { - TQPtrListIterator<TQWidget> it(f->tqfocusWidgets); - TQWidget *w; - while ( (w = it.current()) ) { - ++it; - TQWidget * p = w; - while( p && p != this ) - p = p->parentWidget(); - if ( p ) // my descendant - f->tqfocusWidgets.removeRef( w ); - } - } - --instanceCounter; - - if ( TQApplication::main_widget == this ) { // reset main widget - TQApplication::main_widget = 0; - if (tqApp) - tqApp->quit(); - } - - if ( hasFocus() ) - clearFocus(); - - if ( isTopLevel() && isShown() && winId() ) - hide(); - - // A parent widget must destroy all its tqchildren before destroying itself - if ( childObjects ) { // delete tqchildren objects - TQObjectListIt it(*childObjects); - TQObject *obj; - while ( (obj=it.current()) ) { - ++it; - obj->parentObj = 0; - childObjects->removeRef( obj ); - delete obj; - } - delete childObjects; - childObjects = 0; - } - - TQApplication::removePostedEvents( this ); - - destroy(); // platform-dependent cleanup - if ( extra ) - deleteExtra(); -} - -int TQWidget::instanceCounter = 0; // Current number of widget instances -int TQWidget::maxInstances = 0; // Maximum number of widget instances - -/*! - \internal - Creates the global widget mapper. - The widget mapper converts window handles to widget pointers. - \sa destroyMapper() -*/ - -void TQWidget::createMapper() -{ - mapper = new TQWidgetMapper; - TQ_CHECK_PTR( mapper ); -} - -/*! - \internal - Destroys the global widget mapper. - \sa createMapper() -*/ - -void TQWidget::destroyMapper() -{ - if ( !mapper ) // already gone - return; - TQWidgetIntDictIt it( *((TQWidgetIntDict*)mapper) ); - TQWidgetMapper * myMapper = mapper; - mapper = 0; - register TQWidget *w; - while ( (w=it.current()) ) { // remove parents widgets - ++it; - if ( !w->parentObj ) // widget is a parent - w->destroy( TRUE, TRUE ); - } - delete myMapper; -} - - -static TQWidgetList *wListInternal( TQWidgetMapper *mapper, bool onlyTopLevel ) -{ - TQWidgetList *list = new TQWidgetList; - TQ_CHECK_PTR( list ); - if ( mapper ) { - TQWidget *w; - TQWidgetIntDictIt it( *((TQWidgetIntDict*)mapper) ); - while ( (w=it.current()) ) { - ++it; - if ( !onlyTopLevel || w->isTopLevel() ) - list->append( w ); - } - } - return list; -} - -/*! - \internal - Returns a list of all widgets. - \sa tlwList(), TQApplication::allWidgets() -*/ - -TQWidgetList *TQWidget::wList() -{ - return wListInternal( mapper, FALSE ); -} - -/*! - \internal - Returns a list of all top level widgets. - \sa wList(), TQApplication::tqtopLevelWidgets() -*/ - -TQWidgetList *TQWidget::tlwList() -{ - return wListInternal( mapper, TRUE ); -} - - -void TQWidget::setWinId( WId id ) // set widget identifier -{ - if ( !mapper ) // mapper destroyed - return; - if ( winid ) - mapper->remove( winid ); - winid = id; -#if defined(TQ_WS_X11) - hd = id; // X11: hd == ident -#endif - if ( id ) - mapper->insert( this ); -} - - -/*! - \internal - Returns a pointer to the block of extra widget data. -*/ - -TQWExtra *TQWidget::extraData() -{ - return extra; -} - - -/*! - \internal - Returns a pointer to the block of extra top level widget data. - - This data is guaranteed to exist for top level widgets. -*/ - -TQTLWExtra *TQWidget::topData() -{ - createTLExtra(); - return extra->topextra; -} - - -void TQWidget::createTLExtra() -{ - if ( !extra ) - createExtra(); - if ( !extra->topextra ) { - TQTLWExtra* x = extra->topextra = new TQTLWExtra; -#if defined( TQ_WS_WIN ) || defined( TQ_WS_MAC ) - x->opacity = 255; -#endif -#ifndef TQT_NO_WIDGET_TOPEXTRA - x->icon = 0; -#endif - x->focusData = 0; - x->fleft = x->fright = x->ftop = x->fbottom = 0; - x->incw = x->inch = 0; - x->basew = x->baseh = 0; - x->normalGeometry = TQRect(0,0,-1,-1); -#if defined(TQ_WS_X11) - x->embedded = 0; - x->parentWinId = 0; - x->spont_unmapped = 0; - x->dnd = 0; - x->uspos = 0; - x->ussize = 0; -#endif - x->savedFlags = 0; -#if defined(TQ_WS_TQWS) && !defined(TQT_NO_TQWS_MANAGER) - x->decor_allocated_region = TQRegion(); - x->qwsManager = 0; -#endif - createTLSysExtra(); - } -} - -/*! - \internal - Creates the widget extra data. -*/ - -void TQWidget::createExtra() -{ - if ( !extra ) { // if not exists - extra = new TQWExtra; - TQ_CHECK_PTR( extra ); - extra->minw = extra->minh = 0; - extra->maxw = extra->maxh = TQWIDGETSIZE_MAX; - extra->bg_pix = 0; - extra->focus_proxy = 0; -#ifndef TQT_NO_CURSOR - extra->curs = 0; -#endif - extra->topextra = 0; - extra->bg_mode = PaletteBackground; - extra->bg_mode_visual = PaletteBackground; - extra->bg_origin = WidgetOrigin; -#ifndef TQT_NO_STYLE - extra->style = 0; -#endif - extra->size_policy = TQSizePolicy( TQSizePolicy::Preferred, - TQSizePolicy::Preferred ); - createSysExtra(); - } -} - - -/*! - \internal - Deletes the widget extra data. -*/ - -void TQWidget::deleteExtra() -{ - if ( extra ) { // if exists - delete extra->bg_pix; -#ifndef TQT_NO_CURSOR - delete extra->curs; -#endif - deleteSysExtra(); - if ( extra->topextra ) { - deleteTLSysExtra(); -#ifndef TQT_NO_WIDGET_TOPEXTRA - delete extra->topextra->icon; -#endif - delete extra->topextra->focusData; -#if defined(TQ_WS_TQWS) && !defined(TQT_NO_TQWS_MANAGER) - delete extra->topextra->qwsManager; -#endif - delete extra->topextra; - } - delete extra; - // extra->xic destroyed in TQWidget::destroy() - extra = 0; - } -} - - -/*! - \internal - This function is called when a widget is hidden or destroyed. - It resets some application global pointers that should only refer active, - visible widgets. -*/ - -void TQWidget::deactivateWidgetCleanup() -{ - // If this was the active application window, reset it - if ( this == TQApplication::active_window ) - tqApp->setActiveWindow( 0 ); - // If the is the active mouse press widget, reset it -#ifdef TQ_WS_MAC - extern TQGuardedPtr<TQWidget> qt_button_down; -#else - extern TQWidget *qt_button_down; -#endif - if ( this == (TQWidget *)qt_button_down ) - qt_button_down = 0; -} - - -/*! - Returns a pointer to the widget with window identifer/handle \a - id. - - The window identifier type depends on the underlying window - system, see \c tqwindowdefs.h for the actual definition. If there - is no widget with this identifier, 0 is returned. -*/ - -TQWidget *TQWidget::find( WId id ) -{ - return mapper ? mapper->find( id ) : 0; -} - -/*! - \fn TQWidgetMapper *TQWidget::wmapper() - \internal - Returns a pointer to the widget mapper. - - The widget mapper is an internal dictionary that is used to map from - window identifiers/handles to widget pointers. - \sa find(), id() -*/ - -/*! - \fn WFlags TQWidget::getWFlags() const - - Returns the widget flags for this this widget. - - Widget flags are a combination of \l{TQt::WidgetFlags}. - - \sa testWFlags(), setWFlags(), clearWFlags() -*/ - -/*! - \fn void TQWidget::setWFlags( WFlags f ) - - Sets the widget flags \a f. - - Widget flags are a combination of \l{TQt::WidgetFlags}. - - \sa testWFlags(), getWFlags(), clearWFlags() -*/ - -/*! - \fn void TQWidget::clearWFlags( WFlags f ) - - Clears the widget flags \a f. - - Widget flags are a combination of \l{TQt::WidgetFlags}. - - \sa testWFlags(), getWFlags(), setWFlags() -*/ - - - -/*! - \fn WId TQWidget::winId() const - - Returns the window system identifier of the widget. - - Portable in principle, but if you use it you are probably about to - do something non-portable. Be careful. - - \sa find() -*/ - -#ifndef TQT_NO_STYLE -/*! - Returns the GUI style for this widget - - \sa TQWidget::setStyle(), TQApplication::setStyle(), TQApplication::style() -*/ - -TQStyle& TQWidget::style() const -{ - if ( extra && extra->style ) - return *extra->style; - TQStyle &ret = tqApp->style(); - return ret; -} - -/*! - Sets the widget's GUI style to \a style. Ownership of the style - object is not transferred. - - If no style is set, the widget uses the application's style, - TQApplication::style() instead. - - Setting a widget's style has no effect on existing or future child - widgets. - - \warning This function is particularly useful for demonstration - purposes, where you want to show TQt's styling capabilities. Real - applications should avoid it and use one consistent GUI style - instead. - - \sa style(), TQStyle, TQApplication::style(), TQApplication::setStyle() -*/ - -void TQWidget::setStyle( TQStyle *style ) -{ - TQStyle& old = TQWidget::style(); - createExtra(); - extra->style = style; - if ( !testWFlags(WType_Desktop) // (except desktop) - && testWState(WState_Polished)) { // (and have been polished) - old.unPolish( this ); - TQWidget::style().polish( this ); - } - styleChange( old ); -} - -/*! - \overload - - Sets the widget's GUI style to \a style using the TQStyleFactory. -*/ -TQStyle* TQWidget::setStyle( const TQString &style ) -{ - TQStyle *s = TQStyleFactory::create( style ); - setStyle( s ); - return s; -} - -/*! - This virtual function is called when the style of the widgets - changes. \a oldStyle is the previous GUI style; you can get the - new style from style(). - - Reimplement this function if your widget needs to know when its - GUI style changes. You will almost certainly need to update the - widget using update(). - - The default implementation updates the widget including its - tqgeometry. - - \sa TQApplication::setStyle(), style(), update(), updateGeometry() -*/ - -void TQWidget::styleChange( TQStyle& /* oldStyle */ ) -{ - update(); - updateGeometry(); -} - -#endif - -/*! - \property TQWidget::isTopLevel - \brief whether the widget is a top-level widget - - A top-level widget is a widget which usually has a frame and a - \link TQWidget::caption caption (title)\endlink. \link - TQWidget::isPopup() Popup\endlink and \link TQWidget::isDesktop() - desktop\endlink widgets are also top-level widgets. - - A top-level widget can have a \link TQWidget::parentWidget() parent - widget\endlink. It will then be grouped with its parent and deleted - when the parent is deleted, minimized when the parent is minimized - etc. If supported by the window manager, it will also have a - common taskbar entry with its parent. - - TQDialog and TQMainWindow widgets are by default top-level, even if - a parent widget is specified in the constructor. This behavior is - specified by the \c WType_TopLevel widget flag. - - \sa tqtopLevelWidget(), isDialog(), isModal(), isPopup(), isDesktop(), parentWidget() -*/ - -/*! - \property TQWidget::isDialog - \brief whether the widget is a dialog widget - - A dialog widget is a secondary top-level widget, i.e. a top-level - widget with a parent. - - \sa isTopLevel(), TQDialog -*/ - -/*! - \property TQWidget::isPopup - \brief whether the widget is a popup widget - - A popup widget is created by specifying the widget flag \c - WType_Popup to the widget constructor. A popup widget is also a - top-level widget. - - \sa isTopLevel() -*/ - -/*! - \property TQWidget::isDesktop - \brief whether the widget is a desktop widget, i.e. represents the desktop - - A desktop widget is also a top-level widget. - - \sa isTopLevel(), TQApplication::desktop() -*/ - -/*! - \property TQWidget::isModal - \brief whether the widget is a modal widget - - This property only makes sense for top-level widgets. A modal - widget prevents widgets in all other top-level widgets from - getting any input. - - \sa isTopLevel(), isDialog(), TQDialog -*/ - -/*! - \property TQWidget::underMouse - \brief whether the widget is under the mouse cursor - - This value is not updated properly during drag and drop - operations. - - \sa TQEvent::Enter, TQEvent::Leave -*/ - -/*! - \property TQWidget::minimized - \brief whether this widget is minimized (iconified) - - This property is only relevant for top-level widgets. - - \sa showMinimized(), visible, show(), hide(), showNormal(), maximized -*/ -bool TQWidget::isMinimized() const -{ return testWState(WState_Minimized); } - -/*! - Shows the widget minimized, as an icon. - - Calling this function only affects \link isTopLevel() top-level - widgets\endlink. - - \sa showNormal(), showMaximized(), show(), hide(), isVisible(), - isMinimized() -*/ -void TQWidget::showMinimized() -{ - bool isMin = isMinimized(); - if (isMin && isVisible()) return; - - if (!isMin) - setWindowState((windowState() & ~WindowActive) | WindowMinimized); - show(); - if (!isTopLevel()) - TQApplication::sendPostedEvents(this, TQEvent::ShowMinimized); -} - -/*! - \property TQWidget::maximized - \brief whether this widget is maximized - - This property is only relevant for top-level widgets. - - Note that due to limitations in some window-systems, this does not - always report the expected results (e.g. if the user on X11 - maximizes the window via the window manager, TQt has no way of - distinguishing this from any other resize). This is expected to - improve as window manager protocols evolve. - - \sa windowState(), showMaximized(), visible, show(), hide(), showNormal(), minimized -*/ -bool TQWidget::isMaximized() const -{ return testWState(WState_Maximized); } - - - -/*! Returns the current window state. The window state is a OR'ed - combination of TQt::WindowState: \c WindowMinimized, \c - WindowMaximized, \c WindowFullScreen and \c WindowActive. - - \sa TQt::WindowState setWindowState() - */ -uint TQWidget::windowState() const -{ - uint state = 0; - if (testWState(WState_Minimized)) - state |= WindowMinimized; - if (testWState(WState_Maximized)) - state |= WindowMaximized; - if (testWState(WState_FullScreen)) - state |= WindowFullScreen; - if (isActiveWindow()) - state |= WindowActive; - return state; -} - -/*! - \fn void TQWidget::setWindowState(uint windowState) - - Sets the window state to \a windowState. The window state is a OR'ed - combination of TQt::WindowState: \c WindowMinimized, \c - WindowMaximized, \c WindowFullScreen and \c WindowActive. - - If the window is not visible (i.e. isVisible() returns FALSE), the - window state will take effect when show() is called. For visible - windows, the change is immediate. For example, to toggle between - full-screen and mormal mode, use the following code: - - \code - w->setWindowState(w->windowState() ^ WindowFullScreen); - \endcode - - In order to restore and activate a minimized window (while - preserving its maximized and/or full-screen state), use the following: - - \code - w->setWindowState(w->windowState() & ~WindowMinimized | WindowActive); - \endcode - - Note: On some window systems \c WindowActive is not immediate, and may be - ignored in certain cases. - - \sa TQt::WindowState windowState() -*/ - -/*! - \property TQWidget::fullScreen - \brief whether the widget is full screen - - \sa windowState(), minimized, maximized -*/ -bool TQWidget::isFullScreen() const -{ return testWState(WState_FullScreen); } - -/*! - Shows the widget in full-screen mode. - - Calling this function only affects top-level widgets. - - To return from full-screen mode, call showNormal(). - - Full-screen mode works fine under Windows, but has certain - problems under X. These problems are due to limitations of the - ICCCM protocol that specifies the communication between X11 - clients and the window manager. ICCCM simply does not understand - the concept of non-decorated full-screen windows. Therefore, the - best we can do is to request a borderless window and place and - resize it to fill the entire screen. Depending on the window - manager, this may or may not work. The borderless window is - requested using MOTIF hints, which are at least partially - supported by virtually all modern window managers. - - An alternative would be to bypass the window manager entirely and - create a window with the WX11BypassWM flag. This has other severe - problems though, like totally broken keyboard focus and very - strange effects on desktop changes or when the user raises other - windows. - - X11 window managers that follow modern post-ICCCM specifications - support full-screen mode properly. - - \sa showNormal(), showMaximized(), show(), hide(), isVisible() -*/ -void TQWidget::showFullScreen() -{ - bool isFull = isFullScreen(); - if (isFull && isVisible()) - return; - - if (!isFull) - setWindowState(windowState() | WindowFullScreen); - show(); - if (!isTopLevel()) - TQApplication::sendPostedEvents(this, TQEvent::ShowFullScreen); - setActiveWindow(); -} - -/*! - Shows the widget maximized. - - Calling this function only affects \link isTopLevel() top-level - widgets\endlink. - - On X11, this function may not work properly with certain window - managers. See the \link tqgeometry.html Window Geometry - documentation\endlink for an explanation. - - \sa setWindowState(), showNormal(), showMinimized(), show(), hide(), isVisible() -*/ -void TQWidget::showMaximized() -{ - if (isMaximized() && isVisible() && !isMinimized()) - return; - - setWindowState((windowState() & ~WindowMinimized) | WindowMaximized); - show(); - if (!isTopLevel()) - TQApplication::sendPostedEvents(this, TQEvent::ShowMaximized); -} - -/*! - Restores the widget after it has been maximized or minimized. - - Calling this function only affects \link isTopLevel() top-level - widgets\endlink. - - \sa setWindowState(), showMinimized(), showMaximized(), show(), hide(), isVisible() -*/ -void TQWidget::showNormal() -{ - setWindowState(WindowNoState); - show(); - if (!isTopLevel()) - TQApplication::sendPostedEvents(this, TQEvent::ShowNormal); -} - -/*! - Returns TRUE if this widget would become enabled if \a ancestor is - enabled; otherwise returns FALSE. - - This is the case if neither the widget itself nor every parent up - to but excluding \a ancestor has been explicitly disabled. - - isEnabledTo(0) is equivalent to isEnabled(). - - \sa setEnabled() enabled -*/ - -bool TQWidget::isEnabledTo( TQWidget* ancestor ) const -{ - const TQWidget * w = this; - while ( w && !w->testWState(WState_ForceDisabled) - && !w->isTopLevel() - && w->parentWidget() - && w->parentWidget() != ancestor ) - w = w->parentWidget(); - return !w->testWState( WState_ForceDisabled ); -} - - -/*! - \fn bool TQWidget::isEnabledToTLW() const - \obsolete - - This function is deprecated. It is equivalent to isEnabled() -*/ - -/*! - \property TQWidget::enabled - \brief whether the widget is enabled - - An enabled widget receives keyboard and mouse events; a disabled - widget does not. In fact, an enabled widget only receives keyboard - events when it is in focus. - - Some widgets display themselves differently when they are - disabled. For example a button might draw its label grayed out. If - your widget needs to know when it becomes enabled or disabled, you - can reimplement the enabledChange() function. - - Disabling a widget implicitly disables all its tqchildren. Enabling - respectively enables all child widgets unless they have been - explicitly disabled. - - \sa isEnabled(), isEnabledTo(), TQKeyEvent, TQMouseEvent, enabledChange() -*/ -void TQWidget::setEnabled( bool enable ) -{ - if ( enable ) - clearWState( WState_ForceDisabled ); - else - setWState( WState_ForceDisabled ); - - if ( !isTopLevel() && parentWidget() && - !parentWidget()->isEnabled() && enable ) - return; // nothing we can do - - if ( enable ) { - if ( testWState(WState_Disabled) ) { - clearWState( WState_Disabled ); - setBackgroundFromMode(); - enabledChange( !enable ); - if ( childrenListObject() ) { - TQObjectListIt it( *childrenListObject() ); - TQWidget *w; - while( (w = (TQWidget *)it.current()) != 0 ) { - ++it; - if ( w->isWidgetType() && - !w->testWState( WState_ForceDisabled ) ) - w->setEnabled( TRUE ); - } - } - } - } else { - if ( !testWState(WState_Disabled) ) { - if (tqfocusWidget() == this) { - bool parentIsEnabled = (!parentWidget() || parentWidget()->isEnabled()); - if (!parentIsEnabled || !focusNextPrevChild(TRUE)) - clearFocus(); - } - setWState( WState_Disabled ); - setBackgroundFromMode(); - enabledChange( !enable ); - if ( childrenListObject() ) { - TQObjectListIt it( *childrenListObject() ); - TQWidget *w; - while( (w = (TQWidget *)it.current()) != 0 ) { - ++it; - if ( w->isWidgetType() && w->isEnabled() ) { - w->setEnabled( FALSE ); - w->clearWState( WState_ForceDisabled ); - } - } - } - } - } -#if defined(TQ_WS_X11) - if ( testWState( WState_OwnCursor ) ) { - // enforce the windows behavior of clearing the cursor on - // disabled widgets - - extern void qt_x11_enforce_cursor( TQWidget * w ); // defined in qwidget_x11.cpp - qt_x11_enforce_cursor( this ); - } -#endif -#ifdef TQ_WS_WIN - TQInputContext::enable( this, im_enabled & !((bool)testWState(WState_Disabled)) ); -#endif -} - -/*! - Disables widget input events if \a disable is TRUE; otherwise - enables input events. - - See the \l enabled documentation for more information. - - \sa isEnabledTo(), TQKeyEvent, TQMouseEvent, enabledChange() -*/ -void TQWidget::setDisabled( bool disable ) -{ - setEnabled( !disable ); -} - -/*! - \fn void TQWidget::enabledChange( bool oldEnabled ) - - This virtual function is called from setEnabled(). \a oldEnabled - is the previous setting; you can get the new setting from - isEnabled(). - - Reimplement this function if your widget needs to know when it - becomes enabled or disabled. You will almost certainly need to - update the widget using update(). - - The default implementation repaints the visible part of the - widget. - - \sa setEnabled(), isEnabled(), tqrepaint(), update(), clipRegion() -*/ - -void TQWidget::enabledChange( bool ) -{ - update(); -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::StateChanged ); -#endif -} - -/*! - \fn void TQWidget::windowActivationChange( bool oldActive ) - - This virtual function is called for a widget when its window is - activated or deactivated by the window system. \a oldActive is the - previous state; you can get the new setting from isActiveWindow(). - - Reimplement this function if your widget needs to know when its - window becomes activated or deactivated. - - The default implementation updates the visible part of the widget - if the inactive and the active colorgroup are different for colors - other than the highlight and link colors. - - \sa setActiveWindow(), isActiveWindow(), update(), palette() -*/ - -void TQWidget::windowActivationChange( bool ) -{ -#ifndef TQT_NO_PALETTE - if ( !isVisible() ) - return; - - const TQColorGroup &acg = palette().active(); - const TQColorGroup &icg = palette().inactive(); - - if ( acg != icg ) { - BackgroundMode bm = backgroundMode(); - TQColorGroup::ColorRole role = TQPalette::backgroundRoleFromMode(bm); - if ( bm > NoBackground && acg.brush(role) != icg.brush(role) ) - setBackgroundFromMode(); - else if ( acg.background() == icg.background() && - acg.base() == icg.base() && - acg.text() == icg.text() && - acg.foreground() == icg.foreground() && - acg.button() == icg.button() && - acg.buttonText() == icg.buttonText() && - acg.brightText() == icg.brightText() && - acg.dark() == icg.dark() && - acg.light() == icg.light() && - acg.mid() == icg.mid() && - acg.midlight() == icg.midlight() && - acg.shadow() == icg.shadow() ) - return; - update(); - } -#endif -} - -/*! - \property TQWidget::frameGeometry - \brief tqgeometry of the widget relative to its parent including any - window frame - - See the \link tqgeometry.html Window Geometry documentation\endlink - for an overview of tqgeometry issues with top-level widgets. - - \sa tqgeometry() x() y() pos() -*/ -TQRect TQWidget::frameGeometry() const -{ - if (isTopLevel() && ! isPopup()) { - if (fstrut_dirty) - updateFrameStrut(); - TQWidget *that = (TQWidget *) this; - TQTLWExtra *top = that->topData(); - return TQRect(crect.x() - top->fleft, - crect.y() - top->ftop, - crect.width() + top->fleft + top->fright, - crect.height() + top->ftop + top->fbottom); - } - return crect; -} - -/*! \property TQWidget::x - \brief the x coordinate of the widget relative to its parent including - any window frame - - See the \link tqgeometry.html Window Geometry documentation\endlink - for an overview of top-level widget tqgeometry. - - \sa frameGeometry, y, pos -*/ -int TQWidget::x() const -{ - if (isTopLevel() && ! isPopup()) { - if (fstrut_dirty) - updateFrameStrut(); - TQWidget *that = (TQWidget *) this; - return crect.x() - that->topData()->fleft; - } - return crect.x(); -} - -/*! - \property TQWidget::y - \brief the y coordinate of the widget relative to its parent and - including any window frame - - See the \link tqgeometry.html Window Geometry documentation\endlink - for an overview of top-level widget tqgeometry. - - \sa frameGeometry, x, pos -*/ -int TQWidget::y() const -{ - if (isTopLevel() && ! isPopup()) { - if (fstrut_dirty) - updateFrameStrut(); - TQWidget *that = (TQWidget *) this; - return crect.y() - that->topData()->ftop; - } - return crect.y(); -} - -/*! - \property TQWidget::pos - \brief the position of the widget within its parent widget - - If the widget is a top-level widget, the position is that of the - widget on the desktop, including its frame. - - When changing the position, the widget, if visible, receives a - move event (moveEvent()) immediately. If the widget is not - currently visible, it is guaranteed to receive an event before it - is shown. - - move() is virtual, and all other overloaded move() implementations - in TQt call it. - - \warning Calling move() or setGeometry() inside moveEvent() can - lead to infinite recursion. - - See the \link tqgeometry.html Window Geometry documentation\endlink - for an overview of top-level widget tqgeometry. - - \sa frameGeometry, size x(), y() -*/ -TQPoint TQWidget::pos() const -{ - if (isTopLevel() && ! isPopup()) { - if (fstrut_dirty) - updateFrameStrut(); - TQWidget *that = (TQWidget *) this; - TQTLWExtra *top = that->topData(); - return TQPoint(crect.x() - top->fleft, crect.y() - top->ftop); - } - return crect.topLeft(); -} - -/*! - \property TQWidget::tqgeometry - \brief the tqgeometry of the widget relative to its parent and - excluding the window frame - - When changing the tqgeometry, the widget, if visible, receives a - move event (moveEvent()) and/or a resize event (resizeEvent()) - immediately. If the widget is not currently visible, it is - guaranteed to receive appropriate events before it is shown. - - The size component is adjusted if it lies outside the range - defined by tqminimumSize() and tqmaximumSize(). - - setGeometry() is virtual, and all other overloaded setGeometry() - implementations in TQt call it. - - \warning Calling setGeometry() inside resizeEvent() or moveEvent() - can lead to infinite recursion. - - See the \link tqgeometry.html Window Geometry documentation\endlink - for an overview of top-level widget tqgeometry. - - \sa frameGeometry(), rect(), move(), resize(), moveEvent(), - resizeEvent(), tqminimumSize(), tqmaximumSize() -*/ - -/*! - \property TQWidget::size - \brief the size of the widget excluding any window frame - - When resizing, the widget, if visible, receives a resize event - (resizeEvent()) immediately. If the widget is not currently - visible, it is guaranteed to receive an event before it is shown. - - The size is adjusted if it lies outside the range defined by - tqminimumSize() and tqmaximumSize(). Furthermore, the size is always - at least TQSize(1, 1). For toplevel widgets, the minimum size - might be larger, depending on the window manager. - - If you want a top-level window to have a fixed size, call - setResizeMode( TQLayout::FreeResize ) on its tqlayout. - - resize() is virtual, and all other overloaded resize() - implementations in TQt call it. - - \warning Calling resize() or setGeometry() inside resizeEvent() can - lead to infinite recursion. - - \sa pos, tqgeometry, tqminimumSize, tqmaximumSize, resizeEvent() -*/ - -/*! - \property TQWidget::width - \brief the width of the widget excluding any window frame - - See the \link tqgeometry.html Window Geometry documentation\endlink - for an overview of top-level widget tqgeometry. - - \sa tqgeometry, height, size -*/ - -/*! - \property TQWidget::height - \brief the height of the widget excluding any window frame - - See the \link tqgeometry.html Window Geometry documentation\endlink - for an overview of top-level widget tqgeometry. - - \sa tqgeometry, width, size -*/ - -/*! - \property TQWidget::rect - \brief the internal tqgeometry of the widget excluding any window - frame - - The rect property equals TQRect(0, 0, width(), height()). - - See the \link tqgeometry.html Window Geometry documentation\endlink - for an overview of top-level widget tqgeometry. - - \sa size -*/ - -/*! - \property TQWidget::tqchildrenRect - \brief the bounding rectangle of the widget's tqchildren - - Hidden tqchildren are excluded. - - \sa tqchildrenRegion() tqgeometry() -*/ - -TQRect TQWidget::tqchildrenRect() const -{ - TQRect r( 0, 0, 0, 0 ); - if ( !childrenListObject() ) - return r; - TQObjectListIt it( *childrenListObject() ); - TQObject *obj; - while ( (obj = it.current()) ) { - ++it; - if ( obj->isWidgetType() && !((TQWidget*)obj)->isHidden() && !((TQWidget*)obj)->isTopLevel()) - r = r.unite( ((TQWidget*)obj)->tqgeometry() ); - } - return r; -} - -/*! - \property TQWidget::tqchildrenRegion - \brief the combined region occupied by the widget's tqchildren - - Hidden tqchildren are excluded. - - \sa tqchildrenRect() tqgeometry() -*/ - -TQRegion TQWidget::tqchildrenRegion() const -{ - TQRegion r; - if ( !childrenListObject() ) - return r; - TQObjectListIt it( *childrenListObject() ); // iterate over all tqchildren - TQObject *obj; - while ( (obj=it.current()) ) { - ++it; - if ( obj->isWidgetType() && !((TQWidget*)obj)->isHidden() && !((TQWidget*)obj)->isTopLevel()) - r = r.unite( ((TQWidget*)obj)->tqgeometry() ); - } - return r; -} - - -/*! - \property TQWidget::tqminimumSize - \brief the widget's minimum size - - The widget cannot be resized to a smaller size than the minimum - widget size. The widget's size is forced to the minimum size if - the current size is smaller. - - If you use a tqlayout inside the widget, the minimum size will be - set by the tqlayout and not by setMinimumSize(), unless you set the - tqlayout's resize mode to TQLayout::FreeResize. - - \sa minimumWidth, minimumHeight, tqmaximumSize, sizeIncrement - TQLayout::setResizeMode() -*/ - -TQSize TQWidget::tqminimumSize() const -{ - return extra ? TQSize( extra->minw, extra->minh ) : TQSize( 0, 0 ); -} - -/*! - \property TQWidget::tqmaximumSize - \brief the widget's maximum size - - The widget cannot be resized to a larger size than the maximum - widget size. - - \sa maximumWidth(), maximumHeight(), setMaximumSize(), - tqminimumSize(), sizeIncrement() -*/ - -TQSize TQWidget::tqmaximumSize() const -{ - return extra ? TQSize( extra->maxw, extra->maxh ) - : TQSize( TQWIDGETSIZE_MAX, TQWIDGETSIZE_MAX ); -} - - -/*! - \property TQWidget::minimumWidth - \brief the widget's minimum width - - This property corresponds to tqminimumSize().width(). - - \sa tqminimumSize, minimumHeight -*/ - -/*! - \property TQWidget::minimumHeight - \brief the widget's minimum height - - This property corresponds to tqminimumSize().height(). - - \sa tqminimumSize, minimumWidth -*/ - -/*! - \property TQWidget::maximumWidth - \brief the widget's maximum width - - This property corresponds to tqmaximumSize().width(). - - \sa tqmaximumSize, maximumHeight -*/ - -/*! - \property TQWidget::maximumHeight - \brief the widget's maximum height - - This property corresponds to tqmaximumSize().height(). - - \sa tqmaximumSize, maximumWidth -*/ - -/*! - \property TQWidget::sizeIncrement - \brief the size increment of the widget - - When the user resizes the window, the size will move in steps of - sizeIncrement().width() pixels horizontally and - sizeIncrement.height() pixels vertically, with baseSize() as the - basis. Preferred widget sizes are for non-negative integers \e i - and \e j: - \code - width = baseSize().width() + i * sizeIncrement().width(); - height = baseSize().height() + j * sizeIncrement().height(); - \endcode - - Note that while you can set the size increment for all widgets, it - only affects top-level widgets. - - \warning The size increment has no effect under Windows, and may - be disregarded by the window manager on X. - - \sa size, tqminimumSize, tqmaximumSize -*/ -TQSize TQWidget::sizeIncrement() const -{ - return ( extra && extra->topextra ) - ? TQSize( extra->topextra->incw, extra->topextra->inch ) - : TQSize( 0, 0 ); -} - -/*! - \property TQWidget::baseSize - \brief the base size of the widget - - The base size is used to calculate a proper widget size if the - widget defines sizeIncrement(). - - \sa setSizeIncrement() -*/ - -TQSize TQWidget::baseSize() const -{ - return ( extra != 0 && extra->topextra != 0 ) - ? TQSize( extra->topextra->basew, extra->topextra->baseh ) - : TQSize( 0, 0 ); -} - -/*! - Sets both the minimum and maximum sizes of the widget to \a s, - thereby preventing it from ever growing or shrinking. - - \sa setMaximumSize() setMinimumSize() -*/ - -void TQWidget::setFixedSize( const TQSize & s) -{ - setMinimumSize( s ); - setMaximumSize( s ); - resize( s ); -} - - -/*! - \overload void TQWidget::setFixedSize( int w, int h ) - - Sets the width of the widget to \a w and the height to \a h. -*/ - -void TQWidget::setFixedSize( int w, int h ) -{ - setMinimumSize( w, h ); - setMaximumSize( w, h ); - resize( w, h ); -} - -void TQWidget::setMinimumWidth( int w ) -{ - setMinimumSize( w, tqminimumSize().height() ); -} - -void TQWidget::setMinimumHeight( int h ) -{ - setMinimumSize( tqminimumSize().width(), h ); -} - -void TQWidget::setMaximumWidth( int w ) -{ - setMaximumSize( w, tqmaximumSize().height() ); -} - -void TQWidget::setMaximumHeight( int h ) -{ - setMaximumSize( tqmaximumSize().width(), h ); -} - -/*! - Sets both the minimum and maximum width of the widget to \a w - without changing the heights. Provided for convenience. - - \sa tqsizeHint() tqminimumSize() tqmaximumSize() setFixedSize() -*/ - -void TQWidget::setFixedWidth( int w ) -{ - setMinimumSize( w, tqminimumSize().height() ); - setMaximumSize( w, tqmaximumSize().height() ); -} - - -/*! - Sets both the minimum and maximum heights of the widget to \a h - without changing the widths. Provided for convenience. - - \sa tqsizeHint() tqminimumSize() tqmaximumSize() setFixedSize() -*/ - -void TQWidget::setFixedHeight( int h ) -{ - setMinimumSize( tqminimumSize().width(), h ); - setMaximumSize( tqmaximumSize().width(), h ); -} - - -/*! - Translates the widget coordinate \a pos to the coordinate system - of \a parent. The \a parent must not be 0 and must be a parent - of the calling widget. - - \sa mapFrom() mapToParent() mapToGlobal() hasMouse() -*/ - -TQPoint TQWidget::mapTo( TQWidget * parent, const TQPoint & pos ) const -{ - TQPoint p = pos; - if ( parent ) { - const TQWidget * w = this; - while ( w != parent ) { - p = w->mapToParent( p ); - w = w->parentWidget(); - } - } - return p; -} - - -/*! - Translates the widget coordinate \a pos from the coordinate system - of \a parent to this widget's coordinate system. The \a parent - must not be 0 and must be a parent of the calling widget. - - \sa mapTo() mapFromParent() mapFromGlobal() hasMouse() -*/ - -TQPoint TQWidget::mapFrom( TQWidget * parent, const TQPoint & pos ) const -{ - TQPoint p( pos ); - if ( parent ) { - const TQWidget * w = this; - while ( w != parent ) { - p = w->mapFromParent( p ); - w = w->parentWidget(); - } - } - return p; -} - - -/*! - Translates the widget coordinate \a pos to a coordinate in the - parent widget. - - Same as mapToGlobal() if the widget has no parent. - - \sa mapFromParent() mapTo() mapToGlobal() hasMouse() -*/ - -TQPoint TQWidget::mapToParent( const TQPoint &pos ) const -{ - return pos + crect.topLeft(); -} - -/*! - Translates the parent widget coordinate \a pos to widget - coordinates. - - Same as mapFromGlobal() if the widget has no parent. - - \sa mapToParent() mapFrom() mapFromGlobal() hasMouse() -*/ - -TQPoint TQWidget::mapFromParent( const TQPoint &pos ) const -{ - return pos - crect.topLeft(); -} - - -/*! - Returns the top-level widget for this widget, i.e. the next - ancestor widget that has (or could have) a window-system frame. - - If the widget is a top-level, the widget itself is returned. - - Typical usage is changing the window caption: - - \code - aWidget->tqtopLevelWidget()->setCaption( "New Caption" ); - \endcode - - \sa isTopLevel() -*/ - -TQWidget *TQWidget::tqtopLevelWidget() const -{ - TQWidget *w = (TQWidget *)this; - TQWidget *p = w->parentWidget(); - while ( !w->testWFlags(WType_TopLevel) && p ) { - w = p; - p = p->parentWidget(); - } - return w; -} - - -/*! - \property TQWidget::paletteForegroundColor - \brief the foreground color of the widget - - setPaletteForegroundColor() is a convenience function that creates - and sets a modified TQPalette with setPalette(). The palette is - modified according to the widget's \e {background mode}. For - example, if the background mode is \c PaletteButton the palette entry - \c TQColorGroup::ButtonText is set to color. - - \sa setPalette() TQApplication::setPalette() backgroundMode() - foregroundColor() setBackgroundMode() setEraseColor() -*/ -const TQColor &TQWidget::paletteForegroundColor() const -{ -#ifndef TQT_NO_PALETTE - BackgroundMode mode = extra ? (BackgroundMode) extra->bg_mode_visual : PaletteBackground; - return tqcolorGroup().color( TQPalette::foregroundRoleFromMode(mode) ); -#else - return TQt::black; -#endif -} - -void TQWidget::setPaletteForegroundColor( const TQColor & color ) -{ -#ifndef TQT_NO_PALETTE - BackgroundMode mode = extra ? (BackgroundMode) extra->bg_mode_visual : PaletteBackground; - TQPalette pal = palette(); - TQColorGroup::ColorRole role = TQPalette::foregroundRoleFromMode( mode ); - pal.setColor( TQPalette::Active, role, color ); - pal.setColor( TQPalette::Inactive, role, color ); - pal.setColor( TQPalette::Disabled, role, color ); - setPalette( pal ); -#endif -} - - -/*! - Same as paletteForegroundColor() - */ -const TQColor &TQWidget::foregroundColor() const -{ - return paletteForegroundColor(); -} - - -/*! - \fn const TQColor& TQWidget::eraseColor() const - - Returns the erase color of the widget. - - \sa setEraseColor() setErasePixmap() backgroundColor() -*/ - -/*! - Sets the erase color of the widget to \a color. - - The erase color is the color the widget is to be cleared to before - paintEvent() is called. If there is an erase pixmap (set using - setErasePixmap()), then this property has an indeterminate value. - - \sa erasePixmap(), backgroundColor(), backgroundMode(), palette() -*/ -void TQWidget::setEraseColor( const TQColor & color ) -{ - setBackgroundModeDirect( FixedColor ); - setBackgroundColorDirect( color ); - update(); -} - -/*! - Returns the widget's erase pixmap. - - \sa setErasePixmap() eraseColor() -*/ -const TQPixmap *TQWidget::erasePixmap() const -{ - return ( extra && extra->bg_pix ) ? extra->bg_pix : 0; -} - -/*! - Sets the widget's erase pixmap to \a pixmap. - - This pixmap is used to clear the widget before paintEvent() is - called. -*/ -void TQWidget::setErasePixmap( const TQPixmap &pixmap ) -{ - // This function is called with a null pixmap by setBackgroundEmpty(). - setBackgroundPixmapDirect( pixmap ); - setBackgroundModeDirect( FixedPixmap ); - update(); -} - -void TQWidget::setBackgroundFromMode() -{ -#ifndef TQT_NO_PALETTE - TQColorGroup::ColorRole r = TQColorGroup::Background; - if ( extra ) { - int i = (BackgroundMode)extra->bg_mode; - if ( i == FixedColor || i == FixedPixmap || i == NoBackground ) { - // Mode is for fixed color, not one based on palette, - // so nothing to do. - return; - } - switch( i ) { - case PaletteForeground: - r = TQColorGroup::Foreground; - break; - case PaletteButton: - r = TQColorGroup::Button; - break; - case PaletteLight: - r = TQColorGroup::Light; - break; - case PaletteMidlight: - r = TQColorGroup::Midlight; - break; - case PaletteDark: - r = TQColorGroup::Dark; - break; - case PaletteMid: - r = TQColorGroup::Mid; - break; - case PaletteText: - r = TQColorGroup::Text; - break; - case PaletteBrightText: - r = TQColorGroup::BrightText; - break; - case PaletteBase: - r = TQColorGroup::Base; - break; - case PaletteBackground: - r = TQColorGroup::Background; - break; - case PaletteShadow: - r = TQColorGroup::Shadow; - break; - case PaletteHighlight: - r = TQColorGroup::Highlight; - break; - case PaletteHighlightedText: - r = TQColorGroup::HighlightedText; - break; - case PaletteButtonText: - r = TQColorGroup::ButtonText; - break; - case X11ParentRelative: -#if defined(TQ_WS_X11) - setBackgroundX11Relative(); -#endif - return; - } - } - const TQColorGroup &cg = tqcolorGroup(); - TQPixmap * p = cg.brush( r ).pixmap(); - if ( p ) - setBackgroundPixmapDirect( *p ); - else - setBackgroundColorDirect( cg.color( r ) ); -#endif -} - -/*! - \enum TQt::BackgroundMode - - This enum describes how the background of a widget changes, as the - widget's palette changes. - - The background is what the widget contains when \link - TQWidget::paintEvent() paintEvent()\endlink is called. To minimize - flicker, this should be the most common color or pixmap in the - widget. For \c PaletteBackground, use tqcolorGroup().brush( \c - TQColorGroup::Background ), and so on. - - \value PaletteForeground - \value PaletteBackground - \value PaletteButton - \value PaletteLight - \value PaletteMidlight - \value PaletteDark - \value PaletteMid - \value PaletteText - \value PaletteBrightText - \value PaletteButtonText - \value PaletteBase - \value PaletteShadow - \value PaletteHighlight - \value PaletteHighlightedText - \value PaletteLink - \value PaletteLinkVisited - \value X11ParentRelative (internal use only) - - The final three values have special meaning: - - \value NoBackground the widget is not cleared before paintEvent(). - If the widget's paint event always draws on all the pixels, using - this mode can be both fast and flicker-free. - \value FixedColor the widget is cleared to a fixed color, normally - different from all the ones in the palette(). Set using \link - TQWidget::setPaletteBackgroundColor() - setPaletteBackgroundColor()\endlink. - \value FixedPixmap the widget is cleared to a fixed pixmap, - normally different from all the ones in the palette(). Set using - \link TQWidget::setPaletteBackgroundPixmap() - setPaletteBackgroundPixmap()\endlink. - - Although \c FixedColor and \c FixedPixmap are sometimes just - right, if you use them, make sure that you test your application - when the desktop color scheme has been changed. (On X11, a quick - way to test this is e.g. "./myapp -bg paleblue". On Windows, you - must use the control panel.) - - \sa TQWidget::setBackgroundMode() TQWidget::backgroundMode() - TQWidget::setBackgroundPixmap() TQWidget::setPaletteBackgroundColor() -*/ - -/*! - \property TQWidget::backgroundMode - \brief the color role used for painting the background of the widget - - setPaletteBackgroundColor() reads this property to determine which - entry of the \link TQWidget::palette palette\endlink to set. - - For most widgets the default suffices (\c PaletteBackground, - typically gray), but some need to use \c PaletteBase (the - background color for text output, typically white) or another - role. - - TQListBox, which is "sunken" and uses the base color to contrast - with its environment, does this in its constructor: - - \code - setBackgroundMode( PaletteBase ); - \endcode - - You will never need to set the background mode of a built-in - widget in TQt, but you might consider setting it in your custom - widgets, so that setPaletteBackgroundColor() works as expected. - - Note that two of the BackgroundMode values make no sense for - setBackgroundMode(), namely \c FixedPixmap and \c FixedColor. You - must call setBackgroundPixmap() and setPaletteBackgroundColor() - instead. -*/ -TQt::BackgroundMode TQWidget::backgroundMode() const -{ - return extra ? (BackgroundMode) extra->bg_mode : PaletteBackground; -} - -void TQWidget::setBackgroundMode( BackgroundMode m ) -{ - setBackgroundMode( m, m ); - if ( (widget_state & (WState_Visible|WState_BlockUpdates)) == - WState_Visible ) - update(); -} - - -/*! - \overload - - Sets the widget's own background mode to \a m and the visual - background mode to \a visual. The visual background mode is used - with the designable properties \c backgroundColor, \c - foregroundColor and \c backgroundPixmap. - - For complex controls, the logical background mode sometimes - differs from a widget's own background mode. A spinbox for example - has \c PaletteBackground as background mode (typically dark gray), - while it's embedded lineedit control uses \c PaletteBase - (typically white). Since the lineedit covers most of the visual - area of a spinbox, it defines \c PaletteBase to be its \a visual - background mode. Changing the \c backgroundColor property thus - changes the lineedit control's background, which is exactly what - the user expects in \e{TQt Designer}. -*/ -void TQWidget::setBackgroundMode( BackgroundMode m, BackgroundMode visual ) -{ - if ( m == NoBackground ) { - setBackgroundEmpty(); - } else if ( m == FixedColor || m == FixedPixmap ) { -#if defined(TQT_DEBUG) - qWarning( "TQWidget::setBackgroundMode: FixedColor or FixedPixmap makes" - " no sense" ); -#endif - return; - } - setBackgroundModeDirect(m); - if ( m != visual && !extra ) - createExtra(); - if ( extra ) - extra->bg_mode_visual = visual; -} - - -/*! - \internal -*/ -void TQWidget::setBackgroundModeDirect( BackgroundMode m ) -{ - if ( m == PaletteBackground && !extra ) - return; - - createExtra(); - if ( (BackgroundMode)extra->bg_mode != m ) { - extra->bg_mode = m; - extra->bg_mode_visual = m; - setBackgroundFromMode(); - } -} - -/*! - \property TQWidget::paletteBackgroundColor - \brief the background color of the widget - - The palette background color is usually set implicitly by - setBackgroundMode(), although it can also be set explicitly by - setPaletteBackgroundColor(). setPaletteBackgroundColor() is a - convenience function that creates and sets a modified TQPalette - with setPalette(). The palette is modified according to the - widget's background mode. For example, if the background mode is - \c PaletteButton the color used for the palette's \c - TQColorGroup::Button color entry is set. - - If there is a background pixmap (set using - setPaletteBackgroundPixmap()), then the return value of this - function is indeterminate. - - \sa paletteBackgroundPixmap, paletteForegroundColor, palette, tqcolorGroup() -*/ -const TQColor & TQWidget::paletteBackgroundColor() const -{ -#ifndef TQT_NO_PALETTE - BackgroundMode mode = extra ? (BackgroundMode) extra->bg_mode_visual : PaletteBackground; - switch( mode ) { - case FixedColor: - case FixedPixmap : - case NoBackground: - case X11ParentRelative: - return eraseColor(); - default: - TQColorGroup::ColorRole role = TQPalette::backgroundRoleFromMode( mode ); - return tqcolorGroup().color( role ); - } -#else - return eraseColor(); -#endif -} - -void TQWidget::setPaletteBackgroundColor( const TQColor &color ) -{ -#ifndef TQT_NO_PALETTE - BackgroundMode mode = extra ? (BackgroundMode) extra->bg_mode_visual : PaletteBackground; - switch( mode ) { - case FixedColor: - case FixedPixmap : - case NoBackground: - case X11ParentRelative: - setEraseColor( color ); - break; - default: - TQPalette pal = palette(); - TQColorGroup::ColorRole role = TQPalette::backgroundRoleFromMode( mode ); - pal.setColor( TQPalette::Active, role, color ); - pal.setColor( TQPalette::Inactive, role, color ); - pal.setColor( TQPalette::Disabled, role, color ); - setPalette( pal ); - break; - } -#else - setEraseColor( color ); -#endif -} - - -/*! - \property TQWidget::paletteBackgroundPixmap - \brief the background pixmap of the widget - - The palette background pixmap is usually set implicitly by - setBackgroundMode(), although it can also be set explicitly by - setPaletteBackgroundPixmap(). setPaletteBackgroundPixmap() is a - convenience function that creates and sets a modified TQPalette - with setPalette(). The palette is modified according to the - widget's background mode. For example, if the background mode is - \c PaletteButton the pixmap used for the palette's - \c TQColorGroup::Button color entry is set. - - If there is a plain background color (set using - setPaletteBackgroundColor()), then this function returns 0. - - \sa paletteBackgroundColor, paletteForegroundColor, palette, tqcolorGroup() -*/ -const TQPixmap *TQWidget::paletteBackgroundPixmap() const -{ -#ifndef TQT_NO_PALETTE - BackgroundMode mode = extra ? (BackgroundMode) extra->bg_mode_visual : PaletteBackground; - switch( mode ) { - case FixedColor: - case FixedPixmap : - case NoBackground: - case X11ParentRelative: - return erasePixmap(); - default: - TQColorGroup::ColorRole role = TQPalette::backgroundRoleFromMode( mode ); - return palette().brush( TQPalette::Active, role ).pixmap(); - } -#else - return erasePixmap(); -#endif -} - -void TQWidget::setPaletteBackgroundPixmap( const TQPixmap &pixmap ) -{ -#ifndef TQT_NO_PALETTE - BackgroundMode mode = extra ? (BackgroundMode) extra->bg_mode_visual : PaletteBackground; - switch( mode ) { - case FixedColor: - case FixedPixmap : - case NoBackground: - case X11ParentRelative: - setErasePixmap( pixmap ); - break; - default: - TQPalette pal = palette(); - TQColorGroup::ColorRole role = TQPalette::backgroundRoleFromMode( mode ); - pal.setBrush( TQPalette::Active, role, TQBrush( pal.color( TQPalette::Active, role ), pixmap ) ); - pal.setBrush( TQPalette::Inactive, role, TQBrush( pal.color( TQPalette::Inactive, role ), pixmap ) ); - pal.setBrush( TQPalette::Disabled, role, TQBrush( pal.color( TQPalette::Disabled, role ), pixmap ) ); - setPalette( pal ); - break; - } -#else - setErasePixmap( pixmap ); -#endif -} - - -/*! - \property TQWidget::backgroundBrush - \brief the widget's background brush - - The background brush depends on a widget's palette and its - background mode. - - \sa backgroundColor(), backgroundPixmap(), eraseColor(), palette, - TQApplication::setPalette() -*/ -const TQBrush& TQWidget::backgroundBrush() const -{ - static TQBrush noBrush; -#ifndef TQT_NO_PALETTE - BackgroundMode mode = extra ? (BackgroundMode) extra->bg_mode_visual : PaletteBackground; - switch( mode ) { - case FixedColor: - case FixedPixmap : - case NoBackground: - case X11ParentRelative: - return noBrush; - default: - TQColorGroup::ColorRole role = TQPalette::backgroundRoleFromMode( mode ); - return tqcolorGroup().brush( role ); - } -#else - return noBrush; -#endif -} - - -/*! - \property TQWidget::tqcolorGroup - \brief the current color group of the widget palette - - The color group is determined by the state of the widget. A - disabled widget has the TQPalette::disabled() color group, a widget - with keyboard focus has the TQPalette::active() color group, and an - inactive widget has the TQPalette::inactive() color group. - - \sa palette -*/ -#ifndef TQT_NO_PALETTE -const TQColorGroup &TQWidget::tqcolorGroup() const -{ - if ( !isEnabled() ) - return palette().disabled(); - else if ( !isVisible() || isActiveWindow() ) - return palette().active(); - else - return palette().inactive(); -} -#endif - -/*! - \property TQWidget::palette - \brief the widget's palette - - As long as no special palette has been set, or after unsetPalette() - has been called, this is either a special palette for the widget - class, the parent's palette or (if this widget is a top level - widget), the default application palette. - - Instead of defining an entirely new palette, you can also use the - \link TQWidget::paletteBackgroundColor paletteBackgroundColor\endlink, - \link TQWidget::paletteBackgroundPixmap paletteBackgroundPixmap\endlink and - \link TQWidget::paletteForegroundColor paletteForegroundColor\endlink - convenience properties to change a widget's - background and foreground appearance only. - - \sa ownPalette, tqcolorGroup(), TQApplication::palette() -*/ - -#ifndef TQT_NO_PALETTE -void TQWidget::setPalette( const TQPalette &palette ) -{ - own_palette = TRUE; - if ( pal == palette ) - return; - TQPalette old = pal; - pal = palette; - setBackgroundFromMode(); - TQEvent ev( TQEvent::PaletteChange ); - TQApplication::sendEvent( this, &ev ); - if ( childrenListObject() ) { - TQEvent e( TQEvent::ParentPaletteChange ); - TQObjectListIt it( *childrenListObject() ); - TQWidget *w; - while( (w=(TQWidget *)it.current()) != 0 ) { - ++it; - if ( w->isWidgetType() ) - TQApplication::sendEvent( w, &e ); - } - } - paletteChange( old ); - update(); -} - -void TQWidget::unsetPalette() -{ - // reset the palette - setPalette( qt_naturalWidgetPalette( this ) ); - own_palette = FALSE; -} - -/*! - \fn void TQWidget::setPalette( const TQPalette&, bool ) - \obsolete - - Use setPalette( const TQPalette& p ) instead. -*/ - -/*! - \fn void TQWidget::paletteChange( const TQPalette &oldPalette ) - - This virtual function is called from setPalette(). \a oldPalette - is the previous palette; you can get the new palette from - palette(). - - Reimplement this function if your widget needs to know when its - palette changes. - - \sa setPalette(), palette() -*/ - -void TQWidget::paletteChange( const TQPalette & ) -{ -} -#endif // TQT_NO_PALETTE - -/*! - \property TQWidget::font - \brief the font currently set for the widget - - The fontInfo() function reports the actual font that is being used - by the widget. - - As long as no special font has been set, or after unsetFont() is - called, this is either a special font for the widget class, the - parent's font or (if this widget is a top level widget), the - default application font. - - This code fragment sets a 12 point helvetica bold font: - \code - TQFont f( "Helvetica", 12, TQFont::Bold ); - setFont( f ); - \endcode - - In addition to setting the font, setFont() informs all tqchildren - about the change. - - \sa fontChange() fontInfo() fontMetrics() ownFont() -*/ -void TQWidget::setFont( const TQFont &font ) -{ - own_font = TRUE; - if ( fnt == font && fnt.d->mask == font.d->mask ) - return; - TQFont old = fnt; - fnt = font.resolve( qt_naturalWidgetFont( this ) ); -#if defined(TQ_WS_X11) - // make sure the font set on this widget is associated with the correct screen - fnt.x11SetScreen( x11Screen() ); -#endif - if ( childrenListObject() ) { - TQEvent e( TQEvent::ParentFontChange ); - TQObjectListIt it( *childrenListObject() ); - TQWidget *w; - while( (w=(TQWidget *)it.current()) != 0 ) { - ++it; - if ( w->isWidgetType() ) - TQApplication::sendEvent( w, &e ); - } - } - if ( hasFocus() ) - setFontSys(); - fontChange( old ); -} - -void TQWidget::unsetFont() -{ - // reset the font - setFont( qt_naturalWidgetFont( this ) ); - own_font = FALSE; -} - -/*! - \fn void TQWidget::setFont( const TQFont&, bool ) - \obsolete - - Use setFont(const TQFont& font) instead. -*/ - -/*! - \fn void TQWidget::fontChange( const TQFont &oldFont ) - - This virtual function is called from setFont(). \a oldFont is the - previous font; you can get the new font from font(). - - Reimplement this function if your widget needs to know when its - font changes. You will almost certainly need to update the widget - using update(). - - The default implementation updates the widget including its - tqgeometry. - - \sa setFont(), font(), update(), updateGeometry() -*/ - -void TQWidget::fontChange( const TQFont & ) -{ - update(); - updateGeometry(); -} - - -/*! - \fn TQFontMetrics TQWidget::fontMetrics() const - - Returns the font metrics for the widget's current font. - Equivalent to TQFontMetrics(widget->font()). - - \sa font(), fontInfo(), setFont() -*/ - -/*! - \fn TQFontInfo TQWidget::fontInfo() const - - Returns the font info for the widget's current font. - Equivalent to TQFontInto(widget->font()). - - \sa font(), fontMetrics(), setFont() -*/ - - -/*! - \property TQWidget::cursor - \brief the cursor tqshape for this widget - - The mouse cursor will assume this tqshape when it's over this - widget. See the \link TQt::tqCursorShape list of predefined cursor - objects\endlink for a range of useful tqshapes. - - An editor widget might use an I-beam cursor: - \code - setCursor( IbeamCursor ); - \endcode - - If no cursor has been set, or after a call to unsetCursor(), the - parent's cursor is used. The function unsetCursor() has no effect - on top-level widgets. - - \sa TQApplication::setOverrideCursor() -*/ - -#ifndef TQT_NO_CURSOR -const TQCursor &TQWidget::cursor() const -{ - if ( testWState(WState_OwnCursor) ) - return (extra && extra->curs) - ? *extra->curs - : arrowCursor; - else - return (isTopLevel() || !parentWidget()) ? arrowCursor : parentWidget()->cursor(); -} -#endif -#ifndef TQT_NO_WIDGET_TOPEXTRA -/*! - \property TQWidget::caption - \brief the window caption (title) - - This property only makes sense for top-level widgets. If no - caption has been set, the caption is TQString::null. - - \sa icon() iconText() -*/ -TQString TQWidget::caption() const -{ - return extra && extra->topextra - ? extra->topextra->caption - : TQString::null; -} - -/*! - \property TQWidget::icon - \brief the widget's icon - - This property only makes sense for top-level widgets. If no icon - has been set, icon() returns 0. - - \sa iconText, caption, - \link appicon.html Setting the Application Icon\endlink -*/ -const TQPixmap *TQWidget::icon() const -{ - return ( extra && extra->topextra ) ? extra->topextra->icon : 0; -} - -/*! - \property TQWidget::iconText - \brief the widget's icon text - - This property only makes sense for top-level widgets. If no icon - text has been set, this functions returns TQString::null. - - \sa icon, caption -*/ - -TQString TQWidget::iconText() const -{ - return ( extra && extra->topextra ) ? extra->topextra->iconText - : TQString::null; -} -#endif //TQT_NO_WIDGET_TOPEXTRA - -/*! - \property TQWidget::mouseTracking - \brief whether mouse tracking is enabled for the widget - - If mouse tracking is disabled (the default), the widget only - receives mouse move events when at least one mouse button is - pressed while the mouse is being moved. - - If mouse tracking is enabled, the widget receives mouse move - events even if no buttons are pressed. - - \sa mouseMoveEvent(), TQApplication::setGlobalMouseTracking() -*/ - - -/*! - Sets the widget's focus proxy to widget \a w. If \a w is 0, the - function resets this widget to have no focus proxy. - - Some widgets, such as TQComboBox, can "have focus", but create a - child widget to actually handle the focus. TQComboBox, for example, - creates a TQLineEdit which handles the focus. - - setFocusProxy() sets the widget which will actually get focus when - "this widget" gets it. If there is a focus proxy, focusPolicy(), - setFocusPolicy(), setFocus() and hasFocus() all operate on the - focus proxy. - - \sa focusProxy() -*/ - -void TQWidget::setFocusProxy( TQWidget * w ) -{ - if ( !w && !extra ) - return; - - for ( TQWidget* fp = w; fp; fp = fp->focusProxy() ) { - if ( fp == this ) { -#if defined (TQT_CHECK_STATE) - qWarning( "%s (%s): already in focus proxy chain", className(), name() ); -#endif - return; - } - } - - createExtra(); - - if ( extra->focus_proxy ) { - disconnect( extra->focus_proxy, TQT_SIGNAL(destroyed()), - this, TQT_SLOT(focusProxyDestroyed()) ); - extra->focus_proxy = 0; - } - - if ( w ) { - setFocusPolicy( w->focusPolicy() ); - connect( w, TQT_SIGNAL(destroyed()), - this, TQT_SLOT(focusProxyDestroyed()) ); - } - extra->focus_proxy = w; -} - - -/*! - Returns the focus proxy, or 0 if there is no focus proxy. - - \sa setFocusProxy() -*/ - -TQWidget * TQWidget::focusProxy() const -{ - return extra ? extra->focus_proxy : 0; -} - - -/*! - \internal - - Internal slot used to clean up if the focus proxy is destroyed. - - \sa setFocusProxy() -*/ - -void TQWidget::focusProxyDestroyed() -{ - if ( extra ) - extra->focus_proxy = 0; - setFocusPolicy( NoFocus ); -} - -/*! - \property TQWidget::focus - \brief whether this widget (or its focus proxy) has the keyboard - input focus - - Effectively equivalent to \c {tqApp->tqfocusWidget() == this}. - - \sa setFocus(), clearFocus(), setFocusPolicy(), TQApplication::tqfocusWidget() -*/ -bool TQWidget::hasFocus() const -{ - const TQWidget* w = this; - while ( w->focusProxy() ) - w = w->focusProxy(); - return tqApp->tqfocusWidget() == w; -} - -/*! - Gives the keyboard input focus to this widget (or its focus - proxy) if this widget or one of its parents is the \link - isActiveWindow() active window\endlink. - - First, a focus out event is sent to the focus widget (if any) to - tell it that it is about to lose the focus. Then a focus in event - is sent to this widget to tell it that it just received the focus. - (Nothing happens if the focus in and focus out widgets are the - same.) - - setFocus() gives focus to a widget regardless of its focus policy, - but does not clear any keyboard grab (see grabKeyboard()). - - Be aware that if the widget is hidden, it will not accept focus. - - \warning If you call setFocus() in a function which may itself be - called from focusOutEvent() or focusInEvent(), you may get an - infinite recursion. - - \sa hasFocus() clearFocus() focusInEvent() focusOutEvent() - setFocusPolicy() TQApplication::tqfocusWidget() grabKeyboard() - grabMouse() -*/ - -void TQWidget::setFocus() -{ - if ( !isEnabled() ) - return; - - if ( focusProxy() ) { - focusProxy()->setFocus(); - return; - } - - TQFocusData * f = focusData( TRUE ); - if ( f->it.current() == this && tqApp->tqfocusWidget() == this -#if defined(TQ_WS_WIN) - && GetFocus() == winId() -#endif - ) - return; - - f->it.toFirst(); - while ( f->it.current() != this && !f->it.atLast() ) - ++f->it; - // at this point, the iterator should point to 'this'. if it - // does not, 'this' must not be in the list - an error, but - // perhaps possible. fix it. - if ( f->it.current() != this ) { - f->tqfocusWidgets.append( this ); - f->it.toLast(); - } - - if ( isActiveWindow() ) { - TQWidget * prev = tqApp->focus_widget; - if ( prev ) { - // This part is never executed when TQ_WS_X11? Preceding XFocusOut - // had already reset focus_widget when received XFocusIn - - // Don't reset input context explicitly here. Whether reset or not - // when focusing out is a responsibility of input methods. For - // example, Japanese input context should not be reset here. The - // context sometimes contains a whole paragraph and has minutes of - // lifetime different to ephemeral one in other languages. The - // input context should be survived until focused again. So we - // delegate the responsibility to input context via - // unfocusInputContext(). - if ( prev != this && prev->isInputMethodEnabled() ) { -#if 0 - prev->resetInputContext(); -#else - prev->unfocusInputContext(); -#endif - } - } -#if defined(TQ_WS_WIN) - else { - TQInputContext::endComposition(); - } -#endif - tqApp->focus_widget = this; - if( isInputMethodEnabled() ) - focusInputContext(); - -#if defined(TQ_WS_WIN) - if ( !tqtopLevelWidget()->isPopup() ) - SetFocus( winId() ); - else { -#endif -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::Focus ); -#endif -#if defined(TQ_WS_WIN) - } -#endif - - if ( prev != this ) { - if ( prev ) { - TQFocusEvent out( TQEvent::FocusOut ); - TQApplication::sendEvent( prev, &out ); - } - - if ( tqApp->focus_widget == this ) { - TQFocusEvent in( TQEvent::FocusIn ); - TQApplication::sendEvent( this, &in ); - } - } - } -} - -/*! - Takes keyboard input focus from the widget. - - If the widget has active focus, a \link focusOutEvent() focus out - event\endlink is sent to this widget to tell it that it is about - to lose the focus. - - This widget must enable focus setting in order to get the keyboard - input focus, i.e. it must call setFocusPolicy(). - - \sa hasFocus(), setFocus(), focusInEvent(), focusOutEvent(), - setFocusPolicy(), TQApplication::tqfocusWidget() -*/ - -void TQWidget::clearFocus() -{ - if ( focusProxy() ) { - focusProxy()->clearFocus(); - return; - } else if ( hasFocus() ) { -#if !defined(TQ_WS_X11) - resetInputContext(); -#else - unfocusInputContext(); -#endif - TQWidget* w = tqApp->tqfocusWidget(); - // clear active focus - tqApp->focus_widget = 0; - TQFocusEvent out( TQEvent::FocusOut ); - TQApplication::sendEvent( w, &out ); -#if defined(TQ_WS_WIN) - if ( !isPopup() && GetFocus() == winId() ) - SetFocus( 0 ); - else { -#endif -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::Focus ); -#endif -#if defined(TQ_WS_WIN) - } -#endif - } -} - - -/*! - Finds a new widget to give the keyboard focus to, as appropriate - for Tab and Shift+Tab, and returns TRUE if is can find a new - widget and FALSE if it can't, - - If \a next is TRUE, this function searches "forwards", if \a next - is FALSE, it searches "backwards". - - Sometimes, you will want to reimplement this function. For - example, a web browser might reimplement it to move its "current - active link" forwards or backwards, and call - TQWidget::focusNextPrevChild() only when it reaches the last or - first link on the "page". - - Child widgets call focusNextPrevChild() on their parent widgets, - but only the top-level widget decides where to redirect focus. By - overriding this method for an object, you thus gain control of - focus traversal for all child widgets. - - \warning TQScrollView uses it own logic for this function, which - does the right thing in most cases. But if you are using a - TQScrollView and want complete control of the focus chain you'll - need to override TQScrollView::focusNextPrevChild() and your - top-level widgets' focusNextPrevChild() functions. - - \sa focusData() -*/ - -bool TQWidget::focusNextPrevChild( bool next ) -{ - TQWidget* p = parentWidget(); - if ( !isTopLevel() && p ) - return p->focusNextPrevChild(next); - - TQFocusData *f = focusData( TRUE ); - - TQWidget *startingPoint = f->it.current(); - TQWidget *candidate = 0; - TQWidget *w = next ? f->tqfocusWidgets.last() : f->tqfocusWidgets.first(); - extern bool qt_tab_all_widgets; - uint focus_flag = qt_tab_all_widgets ? TabFocus : StrongFocus; - do { - if ( w && w != startingPoint && - ( ( w->focusPolicy() & focus_flag ) == focus_flag ) - && !w->focusProxy() && w->isVisibleTo(this) && w->isEnabled()) - candidate = w; - w = next ? f->tqfocusWidgets.prev() : f->tqfocusWidgets.next(); - } while( w && !(candidate && w==startingPoint) ); - - if ( !candidate ) - return FALSE; - - candidate->setFocus(); - return TRUE; -} - -/*! - Returns the focus widget in this widget's window. This is not the - same as TQApplication::tqfocusWidget(), which returns the focus - widget in the currently active window. -*/ - -TQWidget *TQWidget::tqfocusWidget() const -{ - TQWidget *that = (TQWidget *)this; // mutable - TQFocusData *f = that->focusData( FALSE ); - if ( f && f->tqfocusWidgets.count() && f->it.current() == 0 ) - f->it.toFirst(); - return ( f && f->it.current() ) ? f->it.current() : 0; -} - - -/*! - Returns the focus data for this widget's top-level widget. - - Focus data always belongs to the top-level widget. The focus data - list contains all the widgets in this top-level widget that can - accept focus, in tab order. An iterator points to the current - focus widget (tqfocusWidget() returns a pointer to this widget). - - This information is useful for implementing advanced versions of - focusNextPrevChild(). -*/ -TQFocusData * TQWidget::focusData() -{ - return focusData( TRUE ); -} - -/*! - \internal - - Internal function which lets us ask for the focus data, creating - it if it doesn't exist and \a create is TRUE. -*/ -TQFocusData * TQWidget::focusData( bool create ) -{ - TQWidget * tlw = tqtopLevelWidget(); - TQWExtra * ed = tlw->extraData(); - if ( !ed || !ed->topextra ) { - if ( !create ) - return 0; - tlw->createTLExtra(); - ed = tlw->extraData(); - } - if ( create && !ed->topextra->focusData ) - ed->topextra->focusData = new TQFocusData; - - return ed->topextra->focusData; -} - -/*! - \property TQWidget::inputMethodEnabled - \brief enables or disables the use of input methods for this widget. - - Most Widgets (as eg. buttons) that do not handle text input should have - the input method disabled if they have focus. This is the default. - - If a widget handles text input it should set this property to TRUE. -*/ - -void TQWidget::setInputMethodEnabled( bool b ) -{ - im_enabled = b; -#ifdef TQ_WS_WIN - TQInputContext::enable( this, im_enabled & !((bool)testWState(WState_Disabled)) ); -#endif -} - - -/*! - Enables key event compression, if \a compress is TRUE, and - disables it if \a compress is FALSE. - - Key compression is off by default (except for TQLineEdit and - TQTextEdit), so widgets receive one key press event for each key - press (or more, since autorepeat is usually on). If you turn it on - and your program doesn't keep up with key input, TQt may try to - compress key events so that more than one character can be - processed in each event. - - For example, a word processor widget might receive 2, 3 or more - characters in each TQKeyEvent::text(), if the tqlayout recalculation - takes too long for the CPU. - - If a widget supports multiple character tqunicode input, it is - always safe to turn the compression on. - - TQt performs key event compression only for printable characters. - Modifier keys, cursor movement keys, function keys and - miscellaneous action keys (e.g. Escape, Enter, Backspace, - PrintScreen) will stop key event compression, even if there are - more compressible key events available. - - Not all platforms support this compression, in which case turning - it on will have no effect. - - \sa TQKeyEvent::text(); -*/ - -void TQWidget::setKeyCompression(bool compress) -{ - if ( compress ) - setWState( WState_CompressKeys ); - else - clearWState( WState_CompressKeys ); -} - -/*! - \property TQWidget::isActiveWindow - \brief whether this widget is the active window - - The active window is the window that contains the widget - that has keyboard focus. - - When popup windows are visible, this property is TRUE for both the - active window \e and for the popup. - - \sa setActiveWindow(), TQApplication::activeWindow() -*/ -bool TQWidget::isActiveWindow() const -{ - TQWidget *tlw = tqtopLevelWidget(); - if(testWFlags(WSubWindow) && parentWidget()) - tlw = parentWidget()->tqtopLevelWidget(); - if(tlw == tqApp->activeWindow() || ( isVisible() && tlw->isPopup() )) - return TRUE; -#ifndef TQT_NO_STYLE - if(style().tqstyleHint(TQStyle::SH_Widget_ShareActivation, this )) { - if((tlw->isDialog() || (tlw->testWFlags(TQt::WStyle_Tool) && !tlw->isPopup())) && - !tlw->testWFlags(TQt::WShowModal) && - (!tlw->parentWidget() || tlw->parentWidget()->isActiveWindow())) - return TRUE; - TQWidget *w = tqApp->activeWindow(); - if( !testWFlags(WSubWindow) && w && w->testWFlags(WSubWindow) && - w->parentWidget()->tqtopLevelWidget() == tlw) - return TRUE; - while(w && (tlw->isDialog() || tlw->testWFlags(TQt::WStyle_Tool)) && - !w->testWFlags(TQt::WShowModal) && w->parentWidget()) { - w = w->parentWidget()->tqtopLevelWidget(); - if( w == tlw ) - return TRUE; - } - } -#endif -#if defined(TQ_WS_WIN32) - HWND parent = tlw->winId(); - HWND topparent = GetActiveWindow(); - while ( parent ) { - parent = ::GetParent( parent ); - if ( parent && parent == topparent ) - return TRUE; - } -#endif - - return FALSE; -} - -/*! - Moves the \a second widget around the ring of focus widgets so - that keyboard focus moves from the \a first widget to the \a - second widget when the Tab key is pressed. - - Note that since the tab order of the \a second widget is changed, - you should order a chain like this: - - \code - setTabOrder( a, b ); // a to b - setTabOrder( b, c ); // a to b to c - setTabOrder( c, d ); // a to b to c to d - \endcode - - \e not like this: - - \code - setTabOrder( c, d ); // c to d WRONG - setTabOrder( a, b ); // a to b AND c to d - setTabOrder( b, c ); // a to b to c, but not c to d - \endcode - - If \a first or \a second has a focus proxy, setTabOrder() - correctly substitutes the proxy. - - \sa setFocusPolicy(), setFocusProxy() -*/ -void TQWidget::setTabOrder( TQWidget* first, TQWidget *second ) -{ - if ( !first || !second || - first->focusPolicy() == NoFocus || second->focusPolicy() == NoFocus ) - return; - - // If first is redirected, set first to the last child of first - // that can take keyboard focus so that second is inserted after - // that last child, and the focus order within first is (more - // likely to be) preserved. - if ( first->focusProxy() ) { - TQObjectList *l = first->queryList( "TQWidget" ); - if ( l && l->count() ) { - TQObjectListIt it(*l); - it.toLast(); - while (it.current()) { - if (((TQWidget*)it.current())->tqtopLevelWidget() == first->tqtopLevelWidget()) { - first = (TQWidget*)it.current(); - if (first->focusPolicy() != NoFocus) - break; - } - --it; - } - } - delete l; - } - while ( first->focusProxy() ) - first = first->focusProxy(); - while ( second->focusProxy() ) - second = second->focusProxy(); - - TQFocusData *f = first->focusData( TRUE ); - bool focusThere = (f->it.current() == second ); - f->tqfocusWidgets.removeRef( second ); - if ( f->tqfocusWidgets.findRef( first ) >= 0 ) - f->tqfocusWidgets.insert( f->tqfocusWidgets.at() + 1, second ); - else - f->tqfocusWidgets.append( second ); - if ( focusThere ) { // reset iterator so tab will work appropriately - f->it.toFirst(); - while( f->it.current() && f->it.current() != second ) - ++f->it; - } -} - -/*!\internal - - Moves the relevant subwidgets of this widget from the \a oldtlw's - tab chain to that of the new parent, if there's anything to move and - we're really moving - - This function is called from TQWidget::reparent() *after* the widget - has been reparented. - - \sa reparent() -*/ - -void TQWidget::reparentFocusWidgets( TQWidget * oldtlw ) -{ - if ( oldtlw == tqtopLevelWidget() ) - return; // nothing to do - - TQFocusData * from = oldtlw ? oldtlw->topData()->focusData : 0; - TQFocusData * to; - to = focusData(); - - if ( from ) { - from->tqfocusWidgets.first(); - do { - TQWidget * pw = from->tqfocusWidgets.current(); - while( pw && pw != this ) - pw = pw->parentWidget(); - if ( pw == this ) { - TQWidget * w = from->tqfocusWidgets.take(); - if ( w == from->it.current() ) - // probably best to clear keyboard focus, or - // the user might become rather confused - w->clearFocus(); - if ( !isTopLevel() ) - to->tqfocusWidgets.append( w ); - } else { - from->tqfocusWidgets.next(); - } - } while( from->tqfocusWidgets.current() ); - } - - if ( to->tqfocusWidgets.findRef(this) < 0 ) - to->tqfocusWidgets.append( this ); - - if ( !isTopLevel() && extra && extra->topextra && extra->topextra->focusData ) { - // this widget is no longer a top-level widget, so get rid - // of old focus data - delete extra->topextra->focusData; - extra->topextra->focusData = 0; - } -} - -/*! - \fn void TQWidget::recreate( TQWidget *parent, WFlags f, const TQPoint & p, bool showIt ) - - \obsolete - - This method is provided to aid porting from TQt 1.0 to 2.0. It has - been renamed reparent() in TQt 2.0. -*/ - -/*! - \property TQWidget::frameSize - \brief the size of the widget including any window frame -*/ -TQSize TQWidget::frameSize() const -{ - if ( isTopLevel() && !isPopup() ) { - if ( fstrut_dirty ) - updateFrameStrut(); - TQWidget *that = (TQWidget *) this; - TQTLWExtra *top = that->topData(); - return TQSize( crect.width() + top->fleft + top->fright, - crect.height() + top->ftop + top->fbottom ); - } - return crect.size(); -} - -/*! - \internal - - Recursive function that updates \a widget and all its tqchildren, - if they have some parent background origin. -*/ -static void qt_update_bg_recursive( TQWidget *widget ) -{ - if ( !widget || widget->isHidden() || widget->backgroundOrigin() == TQWidget::WidgetOrigin || !widget->backgroundPixmap() ) - return; - - const TQObjectList *lst = widget->childrenListObject(); - - if ( lst ) { - TQObjectListIterator it( *lst ); - TQWidget *widget; - while ( (widget = (TQWidget*)it.current()) ) { - ++it; - if ( widget->isWidgetType() && !widget->isHidden() && !widget->isTopLevel() && !widget->testWFlags(TQt::WSubWindow) ) - qt_update_bg_recursive( widget ); - } - } - TQApplication::postEvent( widget, new TQPaintEvent( widget->clipRegion(), !widget->testWFlags(TQt::WRepaintNoErase) ) ); -} - -/*! - \overload - - This corresponds to move( TQPoint(\a x, \a y) ). -*/ - -void TQWidget::move( int x, int y ) -{ - TQPoint oldp(pos()); - internalSetGeometry( x + tqgeometry().x() - TQWidget::x(), - y + tqgeometry().y() - TQWidget::y(), - width(), height(), TRUE ); - if ( isVisible() && oldp != pos() ) - qt_update_bg_recursive( this ); -} - -/*! - \overload - - This corresponds to resize( TQSize(\a w, \a h) ). -*/ -void TQWidget::resize( int w, int h ) -{ - internalSetGeometry( tqgeometry().x(), tqgeometry().y(), w, h, FALSE ); - setWState( WState_Resized ); -} - -/*! - \overload - - This corresponds to setGeometry( TQRect(\a x, \a y, \a w, \a h) ). -*/ -void TQWidget::setGeometry( int x, int y, int w, int h ) -{ - TQPoint oldp( pos( )); - internalSetGeometry( x, y, w, h, TRUE ); - setWState( WState_Resized ); - if ( isVisible() && oldp != pos() ) - qt_update_bg_recursive( this ); -} - -/*! - \property TQWidget::focusEnabled - \brief whether the widget accepts keyboard focus - - Keyboard focus is initially disabled (i.e. focusPolicy() == - \c TQWidget::NoFocus). - - You must enable keyboard focus for a widget if it processes - keyboard events. This is normally done from the widget's - constructor. For instance, the TQLineEdit constructor calls - setFocusPolicy(TQWidget::StrongFocus). - - \sa setFocusPolicy(), focusInEvent(), focusOutEvent(), keyPressEvent(), - keyReleaseEvent(), isEnabled() -*/ - -/*! - \enum TQWidget::FocusPolicy - - This enum type defines the various policies a widget can have with - respect to acquiring keyboard focus. - - \value TabFocus the widget accepts focus by tabbing. - \value ClickFocus the widget accepts focus by clicking. - \value StrongFocus the widget accepts focus by both tabbing - and clicking. On Mac OS X this will also - be indicate that the widget accepts tab focus - when in 'Text/List focus mode'. - \value WheelFocus like StrongFocus plus the widget accepts - focus by using the mouse wheel. - \value NoFocus the widget does not accept focus. - -*/ - -/*! - \property TQWidget::focusPolicy - \brief the way the widget accepts keyboard focus - - The policy is \c TQWidget::TabFocus if the widget accepts keyboard - focus by tabbing, \c TQWidget::ClickFocus if the widget accepts - focus by clicking, \c TQWidget::StrongFocus if it accepts both, and - \c TQWidget::NoFocus (the default) if it does not accept focus at - all. - - You must enable keyboard focus for a widget if it processes - keyboard events. This is normally done from the widget's - constructor. For instance, the TQLineEdit constructor calls - setFocusPolicy(TQWidget::StrongFocus). - - \sa focusEnabled, focusInEvent(), focusOutEvent(), keyPressEvent(), - keyReleaseEvent(), enabled -*/ - -void TQWidget::setFocusPolicy( FocusPolicy policy ) -{ - if ( focusProxy() ) - focusProxy()->setFocusPolicy( policy ); - if ( policy != NoFocus ) { - TQFocusData * f = focusData( TRUE ); - if ( f->tqfocusWidgets.findRef( this ) < 0 ) - f->tqfocusWidgets.append( this ); - } - focus_policy = (uint) policy; -} - -/*! - \property TQWidget::updatesEnabled - \brief whether updates are enabled - - Calling update() and tqrepaint() has no effect if updates are - disabled. Paint events from the window system are processed - normally even if updates are disabled. - - setUpdatesEnabled() is normally used to disable updates for a - short period of time, for instance to avoid screen flicker during - large changes. - - Example: - \code - setUpdatesEnabled( FALSE ); - bigVisualChanges(); - setUpdatesEnabled( TRUE ); - tqrepaint(); - \endcode - - \sa update(), tqrepaint(), paintEvent() -*/ -void TQWidget::setUpdatesEnabled( bool enable ) -{ - if ( enable ) - clearWState( WState_BlockUpdates ); - else - setWState( WState_BlockUpdates ); -} - -/*! - Shows the widget and its child widgets. - - If its size or position has changed, TQt guarantees that a widget - gets move and resize events just before it is shown. - - You almost never have to reimplement this function. If you need to - change some settings before a widget is shown, use showEvent() - instead. If you need to do some delayed initialization use - polish(). - - \sa showEvent(), hide(), showMinimized(), showMaximized(), - showNormal(), isVisible(), polish() -*/ - -void TQWidget::show() -{ - if ( testWState(WState_Visible) ) - return; - - bool wasHidden = isHidden(); - bool postLayoutHint = !isTopLevel() && wasHidden; - clearWState( WState_ForceHide | WState_CreatedHidden ); - - if ( !isTopLevel() && !parentWidget()->isVisible() ) { - // we should become visible, but one of our ancestors is - // explicitly hidden. Since we cleared the ForceHide flag, our - // immediate parent will call show() on us again during its - // own processing of show(). - if ( wasHidden ) { - TQEvent showToParentEvent( TQEvent::ShowToParent ); - TQApplication::sendEvent( this, &showToParentEvent ); - } - if ( postLayoutHint ) - TQApplication::postEvent( parentWidget(), - new TQEvent(TQEvent::LayoutHint) ); - return; - } - - in_show = TRUE; // set qws recursion watch - - TQApplication::sendPostedEvents( this, TQEvent::ChildInserted ); - - uint state = isTopLevel() ? windowState() : 0; -#ifndef TQ_OS_TEMP - if ( isTopLevel() && !testWState( WState_Resized ) ) { - // do this before sending the posted resize events. Otherwise - // the tqlayout would catch the resize event and may expand the - // minimum size. - TQSize s = qt_naturalWidgetSize( this ); - if ( !s.isEmpty() ) - resize( s ); - } -#endif // TQ_OS_TEMP - - TQApplication::sendPostedEvents( this, TQEvent::Move ); - TQApplication::sendPostedEvents( this, TQEvent::Resize ); - - // the resizing and layouting might have changed the window state - if (isTopLevel() && windowState() != state) - setWindowState(state); - - setWState( WState_Visible ); - - if ( parentWidget() ) - TQApplication::sendPostedEvents( parentWidget(), - TQEvent::ChildInserted ); - - if ( extra ) { - int w = crect.width(); - int h = crect.height(); - if ( w < extra->minw || h < extra->minh || - w > extra->maxw || h > extra->maxh ) { - w = TQMAX( extra->minw, TQMIN( w, extra->maxw )); - h = TQMAX( extra->minh, TQMIN( h, extra->maxh )); - resize( w, h ); // deferred resize - } - } - - if ( testWFlags(WStyle_Tool) || isPopup() ) { - raise(); - } else if ( testWFlags(WType_TopLevel) ) { - while ( TQApplication::activePopupWidget() ) { - if ( !TQApplication::activePopupWidget()->close() ) - break; - } - } - - if ( !testWState(WState_Polished) ) - polish(); - - showChildren( FALSE ); - - if ( postLayoutHint ) - TQApplication::postEvent( parentWidget(), - new TQEvent(TQEvent::LayoutHint) ); - - // Required for Mac, not sure whether we should always do that - if( isTopLevel() ) - TQApplication::sendPostedEvents(0, TQEvent::LayoutHint); - - // On Windows, show the popup now so that our own focus handling - // stores the correct old focus widget even if it's stolen in the showevent -#if defined(TQ_WS_WIN) - if ( testWFlags(WType_Popup) ) - tqApp->openPopup( this ); -#endif - - TQShowEvent showEvent; - TQApplication::sendEvent( this, &showEvent ); - - if ( testWFlags(WShowModal) ) { - // qt_enter_modal *before* show, otherwise the initial - // stacking might be wrong - qt_enter_modal( this ); - } - - // do not show the window directly, but post a show-window request - // to reduce flicker with widgets in layouts - if ( postLayoutHint ) - TQApplication::postEvent( this, new TQEvent( TQEvent::ShowWindowRequest ) ); - else - showWindow(); - -#if !defined(TQ_WS_WIN) - if ( testWFlags(WType_Popup) ) - tqApp->openPopup( this ); -#endif - -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::ObjectShow ); -#endif - - in_show = FALSE; // reset qws recursion watch -} - -/*! \fn void TQWidget::iconify() - \obsolete -*/ - -/*! - Hides the widget. - - You almost never have to reimplement this function. If you need to - do something after a widget is hidden, use hideEvent() instead. - - \sa hideEvent(), isHidden(), show(), showMinimized(), isVisible(), close() -*/ - -void TQWidget::hide() -{ - clearWState( WState_CreatedHidden ); - if ( testWState(WState_ForceHide) ) - return; - - setWState( WState_ForceHide ); - - if ( testWFlags(WType_Popup) ) - tqApp->closePopup( this ); - - // Move test modal here. Otherwise, a modal dialog could get - // destroyed and we lose all access to its parent because we haven't - // left modality. (Eg. modal Progress Dialog) - if ( testWFlags(WShowModal) ) - qt_leave_modal( this ); - -#if defined(TQ_WS_WIN) - if ( isTopLevel() && !isPopup() && parentWidget() && isActiveWindow() ) - parentWidget()->setActiveWindow(); // Activate parent -#endif - - hideWindow(); - - if ( testWState(WState_Visible) ) { - clearWState( WState_Visible ); - - // next bit tries to move the focus if the focus widget is now - // hidden. - if ( tqApp && tqApp->tqfocusWidget() == this ) - focusNextPrevChild( TRUE ); - TQHideEvent hideEvent; - TQApplication::sendEvent( this, &hideEvent ); - hideChildren( FALSE ); - -#if defined(TQT_ACCESSIBILITY_SUPPORT) - TQAccessible::updateAccessibility( this, 0, TQAccessible::ObjectHide ); -#endif - } else { - TQEvent hideToParentEvent( TQEvent::HideToParent ); - TQApplication::sendEvent( this, &hideToParentEvent ); - } - - // post tqlayout hint for non toplevels. The parent widget check is - // necessary since the function is called in the destructor - if ( !isTopLevel() && parentWidget() ) - TQApplication::postEvent( parentWidget(), - new TQEvent( TQEvent::LayoutHint) ); -} - -void TQWidget::setShown( bool show ) -{ - if ( show ) - this->show(); - else - hide(); -} - -void TQWidget::setHidden( bool hide ) -{ - if ( hide ) - this->hide(); - else - show(); -} - -void TQWidget::showChildren( bool spontaneous ) -{ - if ( childrenListObject() ) { - TQObjectListIt it(*childrenListObject()); - register TQObject *object; - TQWidget *widget; - while ( it ) { - object = it.current(); - ++it; - if ( object->isWidgetType() ) { - widget = (TQWidget*)object; - if ( !widget->isTopLevel() && widget->isShown() ) { - if ( spontaneous ) { - widget->showChildren( spontaneous ); - TQShowEvent e; - TQApplication::sendSpontaneousEvent( widget, &e ); - } else { - widget->show(); - } - } - } - } - } -} - -void TQWidget::hideChildren( bool spontaneous ) -{ - if ( childrenListObject() ) { - TQObjectListIt it(*childrenListObject()); - register TQObject *object; - TQWidget *widget; - while ( it ) { - object = it.current(); - ++it; - if ( object->isWidgetType() ) { - widget = (TQWidget*)object; - if ( !widget->isTopLevel() && widget->isShown() ) { - if ( !spontaneous ) - widget->clearWState( WState_Visible ); - widget->hideChildren( spontaneous ); - TQHideEvent e; - if ( spontaneous ) - TQApplication::sendSpontaneousEvent( widget, &e ); - else - TQApplication::sendEvent( widget, &e ); - } - } - } - } -} - - -/*! - Delayed initialization of a widget. - - This function will be called \e after a widget has been fully - created and \e before it is shown the very first time. - - Polishing is useful for final initialization which depends on - having an instantiated widget. This is something a constructor - cannot guarantee since the initialization of the subclasses might - not be finished. - - After this function, the widget has a proper font and palette and - TQApplication::polish() has been called. - - Remember to call TQWidget's implementation first when reimplementing this - function to ensure that your program does not end up in infinite recursion. - - \sa constPolish(), TQApplication::polish() -*/ - -void TQWidget::polish() -{ -#ifndef TQT_NO_WIDGET_TOPEXTRA - if ( isTopLevel() ) { - const TQPixmap *pm = icon(); - if ( !pm || pm->isNull() ) { - TQWidget *mw = (TQWidget *)parent(); - pm = mw ? mw->icon() : 0; - if ( pm && !pm->isNull() ) - setIcon( *pm ); - else { - mw = mw ? mw->tqtopLevelWidget() : 0; - pm = mw ? mw->icon() : 0; - if ( pm && !pm->isNull() ) - setIcon( *pm ); - else { - mw = tqApp ? tqApp->mainWidget() : 0; - pm = mw ? mw->icon() : 0; - if ( pm && !pm->isNull() ) - setIcon( *pm ); - } - } - } - } -#endif - if ( !testWState(WState_Polished) ) { - if ( ! own_font && - ! TQApplication::font( this ).isCopyOf( TQApplication::font() ) ) - unsetFont(); -#ifndef TQT_NO_PALETTE - if ( ! own_palette && - ! TQApplication::palette( this ).isCopyOf( TQApplication::palette() ) ) - unsetPalette(); -#endif - setWState(WState_Polished); - tqApp->polish( this ); - TQApplication::sendPostedEvents( this, TQEvent::ChildInserted ); - } -} - - -/*! - \fn void TQWidget::constPolish() const - - Ensures that the widget is properly initialized by calling - polish(). - - Call constPolish() from functions like tqsizeHint() that depends on - the widget being initialized, and that may be called before - show(). - - \warning Do not call constPolish() on a widget from inside that - widget's constructor. - - \sa polish() -*/ - -/*! - \overload - - Closes this widget. Returns TRUE if the widget was closed; - otherwise returns FALSE. - - If \a alsoDelete is TRUE or the widget has the \c - WDestructiveClose widget flag, the widget is also deleted. The - widget can prevent itself from being closed by rejecting the - \l TQCloseEvent it gets. A close events is delivered to the widget - no matter if the widget is visible or not. - - The TQApplication::lastWindowClosed() signal is emitted when the - last visible top level widget is closed. - - Note that closing the \l TQApplication::mainWidget() terminates the - application. - - \sa closeEvent(), TQCloseEvent, hide(), TQApplication::quit(), - TQApplication::setMainWidget(), TQApplication::lastWindowClosed() -*/ - -bool TQWidget::close( bool alsoDelete ) -{ - if ( is_closing ) - return TRUE; - is_closing = 1; - WId id = winId(); - bool isMain = tqApp->mainWidget() == this; - bool checkLastWindowClosed = isTopLevel() && !isPopup(); - bool deleted = FALSE; - TQCloseEvent e; - TQApplication::sendEvent( this, &e ); - deleted = !TQWidget::find(id); - if ( !deleted && !e.isAccepted() ) { - is_closing = 0; - return FALSE; - } - if ( !deleted && !isHidden() ) - hide(); - if ( checkLastWindowClosed - && tqApp->tqreceivers(TQT_SIGNAL(lastWindowClosed())) ) { - /* if there is no non-withdrawn top level window left (except - the desktop, popups, or dialogs with parents), we emit the - lastWindowClosed signal */ - TQWidgetList *list = tqApp->tqtopLevelWidgets(); - TQWidget *widget = list->first(); - while ( widget ) { - if ( !widget->isHidden() - && !widget->isDesktop() - && !widget->isPopup() - && (!widget->isDialog() || !widget->parentWidget())) - break; - widget = list->next(); - } - delete list; - if ( widget == 0 ) - emit tqApp->lastWindowClosed(); - } - if ( isMain ) - tqApp->quit(); - if ( deleted ) - return TRUE; - is_closing = 0; - if ( alsoDelete ) - delete this; - else if ( testWFlags(WDestructiveClose) ) { - clearWFlags(WDestructiveClose); - deleteLater(); - } - return TRUE; -} - - -/*! - \fn bool TQWidget::close() - - Closes this widget. Returns TRUE if the widget was closed; - otherwise returns FALSE. - - First it sends the widget a TQCloseEvent. The widget is \link - hide() hidden\endlink if it \link TQCloseEvent::accept() - accepts\endlink the close event. The default implementation of - TQWidget::closeEvent() accepts the close event. - - The \l TQApplication::lastWindowClosed() signal is emitted when the - last visible top level widget is closed. - -*/ - -/*! - \property TQWidget::visible - \brief whether the widget is visible - - Calling show() sets the widget to visible status if all its parent - widgets up to the top-level widget are visible. If an ancestor is - not visible, the widget won't become visible until all its - ancestors are shown. - - Calling hide() hides a widget explicitly. An explicitly hidden - widget will never become visible, even if all its ancestors become - visible, unless you show it. - - A widget receives show and hide events when its visibility status - changes. Between a hide and a show event, there is no need to - waste CPU cycles preparing or displaying information to the user. - A video application, for example, might simply stop generating new - frames. - - A widget that happens to be obscured by other windows on the - screen is considered to be visible. The same applies to iconified - top-level widgets and windows that exist on another virtual - desktop (on platforms that support this concept). A widget - receives spontaneous show and hide events when its mapping status - is changed by the window system, e.g. a spontaneous hide event - when the user minimizes the window, and a spontaneous show event - when the window is restored again. - - \sa show(), hide(), isHidden(), isVisibleTo(), isMinimized(), - showEvent(), hideEvent() -*/ - - -/*! - Returns TRUE if this widget would become visible if \a ancestor is - shown; otherwise returns FALSE. - - The TRUE case occurs if neither the widget itself nor any parent - up to but excluding \a ancestor has been explicitly hidden. - - This function will still return TRUE if the widget is obscured by - other windows on the screen, but could be physically visible if it - or they were to be moved. - - isVisibleTo(0) is identical to isVisible(). - - \sa show() hide() isVisible() -*/ - -bool TQWidget::isVisibleTo(TQWidget* ancestor) const -{ - if ( !ancestor ) - return isVisible(); - const TQWidget * w = this; - while ( w - && w->isShown() - && !w->isTopLevel() - && w->parentWidget() - && w->parentWidget() != ancestor ) - w = w->parentWidget(); - return w->isShown(); -} - - -/*! - \fn bool TQWidget::isVisibleToTLW() const - \obsolete - - This function is deprecated. It is equivalent to isVisible() -*/ - -/*! - \property TQWidget::hidden - \brief whether the widget is explicitly hidden - - If FALSE, the widget is visible or would become visible if all its - ancestors became visible. - - \sa hide(), show(), isVisible(), isVisibleTo(), shown -*/ - -/*! - \property TQWidget::shown - \brief whether the widget is shown - - If TRUE, the widget is visible or would become visible if all its - ancestors became visible. - - \sa hide(), show(), isVisible(), isVisibleTo(), hidden -*/ - -/*! - \property TQWidget::visibleRect - \brief the visible rectangle - - \obsolete - - No longer necessary, you can simply call tqrepaint(). If you do not - need the rectangle for tqrepaint(), use clipRegion() instead. -*/ -TQRect TQWidget::visibleRect() const -{ - TQRect r = rect(); - const TQWidget * w = this; - int ox = 0; - int oy = 0; - while ( w - && w->isVisible() - && !w->isTopLevel() - && w->parentWidget() ) { - ox -= w->x(); - oy -= w->y(); - w = w->parentWidget(); - r = r.intersect( TQRect( ox, oy, w->width(), w->height() ) ); - } - if ( !w->isVisible() ) - return TQRect(); - return r; -} - -/*! - Returns the unobscured region where paint events can occur. - - For visible widgets, this is an approximation of the area not - covered by other widgets; otherwise, this is an empty region. - - The tqrepaint() function calls this function if necessary, so in - general you do not need to call it. - -*/ -TQRegion TQWidget::clipRegion() const -{ - return visibleRect(); -} - - -/*! - Adjusts the size of the widget to fit the contents. - - Uses tqsizeHint() if valid (i.e if the size hint's width and height - are \>= 0), otherwise sets the size to the tqchildren rectangle (the - union of all child widget geometries). - - \sa tqsizeHint(), tqchildrenRect() -*/ - -void TQWidget::adjustSize() -{ - TQApplication::sendPostedEvents( 0, TQEvent::ChildInserted ); - TQApplication::sendPostedEvents( 0, TQEvent::LayoutHint ); - if ( !testWState(WState_Polished) ) - polish(); - TQSize s = tqsizeHint(); - - if ( isTopLevel() ) { - -#if defined(TQ_WS_X11) - TQRect screen = TQApplication::desktop()->screenGeometry( x11Screen() ); -#else // all others - TQRect screen = TQApplication::desktop()->screenGeometry( pos() ); -#endif - -#ifndef TQT_NO_LAYOUT - if ( tqlayout() ) { - if ( tqlayout()->hasHeightForWidth() ) { - s = s.boundedTo( screen.size() ); - s.setHeight( tqlayout()->totalHeightForWidth( s.width() ) ); - } - } else -#endif - { - if ( sizePolicy().hasHeightForWidth() ) { - s = s.boundedTo( screen.size() ); - s.setHeight( heightForWidth( s.width() ) ); - } - } - } - if ( s.isValid() ) { - resize( s ); - return; - } - TQRect r = tqchildrenRect(); // get tqchildren rectangle - if ( r.isNull() ) // probably no widgets - return; - resize( r.width() + 2 * r.x(), r.height() + 2 * r.y() ); -} - - -/*! - \property TQWidget::tqsizeHint - \brief the recommended size for the widget - - If the value of this property is an invalid size, no size is - recommended. - - The default implementation of tqsizeHint() returns an invalid size - if there is no tqlayout for this widget, and returns the tqlayout's - preferred size otherwise. - - \sa TQSize::isValid(), tqminimumSizeHint(), sizePolicy(), - setMinimumSize(), updateGeometry() -*/ - -TQSize TQWidget::tqsizeHint() const -{ -#ifndef TQT_NO_LAYOUT - if ( tqlayout() ) - return tqlayout()->totalSizeHint(); -#endif - return TQSize( -1, -1 ); -} - -/*! - \property TQWidget::tqminimumSizeHint - \brief the recommended minimum size for the widget - - If the value of this property is an invalid size, no minimum size - is recommended. - - The default implementation of tqminimumSizeHint() returns an invalid - size if there is no tqlayout for this widget, and returns the - tqlayout's minimum size otherwise. Most built-in widgets reimplement - tqminimumSizeHint(). - - \l TQLayout will never resize a widget to a size smaller than - tqminimumSizeHint. - - \sa TQSize::isValid(), resize(), setMinimumSize(), sizePolicy() -*/ -TQSize TQWidget::tqminimumSizeHint() const -{ -#ifndef TQT_NO_LAYOUT - if ( tqlayout() ) - return tqlayout()->totalMinimumSize(); -#endif - return TQSize( -1, -1 ); -} - - -/*! - \fn TQWidget *TQWidget::parentWidget( bool sameWindow ) const - - Returns the parent of this widget, or 0 if it does not have any - parent widget. If \a sameWindow is TRUE and the widget is top - level returns 0; otherwise returns the widget's parent. -*/ - -/*! - \fn WFlags TQWidget::testWFlags( WFlags f ) const - - Returns the bitwise AND of the widget flags and \a f. - - Widget flags are a combination of \l{TQt::WidgetFlags}. - - If you want to test for the presence of multiple flags (or - composite flags such as \c WStyle_Splash), test the - return value for equality against the argument. For example: - - \code - int flags = WStyle_Tool | WStyle_NoBorder; - if ( testWFlags(flags) ) - ... // WStyle_Tool or WStyle_NoBorder or both are set - if ( testWFlags(flags) == flags ) - ... // both WStyle_Tool and WStyle_NoBorder are set - \endcode - - \sa getWFlags(), setWFlags(), clearWFlags() -*/ - -/*! - \fn WState TQWidget::testWState( WState s ) const - \internal - - Returns the bitwise AND of the widget states and \a s. -*/ - -/*! - \fn uint TQWidget::getWState() const - - \internal - - Returns the current widget state. -*/ -/*! - \fn void TQWidget::clearWState( uint n ) - - \internal - - Clears the widgets states \a n. -*/ -/*! - \fn void TQWidget::setWState( uint n ) - - \internal - - Sets the widgets states \a n. -*/ - - - -/***************************************************************************** - TQWidget event handling - *****************************************************************************/ - -/*! - This is the main event handler; it handles event \a e. You can - reimplement this function in a subclass, but we recommend using - one of the specialized event handlers instead. - - The main event handler first passes an event through all \link - TQObject::installEventFilter() event filters\endlink that have been - installed. If none of the filters intercept the event, it calls - one of the specialized event handlers. - - Key press and release events are treated differently from other - events. event() checks for Tab and Shift+Tab and tries to move the - focus appropriately. If there is no widget to move the focus to - (or the key press is not Tab or Shift+Tab), event() calls - keyPressEvent(). - - This function returns TRUE if it is able to pass the event over to - someone (i.e. someone wanted the event); otherwise returns FALSE. - - \sa closeEvent(), focusInEvent(), focusOutEvent(), enterEvent(), - keyPressEvent(), keyReleaseEvent(), leaveEvent(), - mouseDoubleClickEvent(), mouseMoveEvent(), mousePressEvent(), - mouseReleaseEvent(), moveEvent(), paintEvent(), resizeEvent(), - TQObject::event(), TQObject::timerEvent() -*/ - -bool TQWidget::event( TQEvent *e ) -{ - if ( TQObject::event( e ) ) - return TRUE; - - switch ( e->type() ) { - case TQEvent::MouseMove: - mouseMoveEvent( (TQMouseEvent*)e ); - if ( ! ((TQMouseEvent*)e)->isAccepted() ) - return FALSE; - break; - - case TQEvent::MouseButtonPress: - // Don't reset input context here. Whether reset or not is - // a responsibility of input method. reset() will be - // called by mouseHandler() of input method if necessary - // via mousePressEvent() of text widgets. -#if 0 - resetInputContext(); -#endif - mousePressEvent( (TQMouseEvent*)e ); - if ( ! ((TQMouseEvent*)e)->isAccepted() ) - return FALSE; - break; - - case TQEvent::MouseButtonRelease: - mouseReleaseEvent( (TQMouseEvent*)e ); - if ( ! ((TQMouseEvent*)e)->isAccepted() ) - return FALSE; - break; - - case TQEvent::MouseButtonDblClick: - mouseDoubleClickEvent( (TQMouseEvent*)e ); - if ( ! ((TQMouseEvent*)e)->isAccepted() ) - return FALSE; - break; -#ifndef TQT_NO_WHEELEVENT - case TQEvent::Wheel: - wheelEvent( (TQWheelEvent*)e ); - if ( ! ((TQWheelEvent*)e)->isAccepted() ) - return FALSE; - break; -#endif - case TQEvent::TabletMove: - case TQEvent::TabletPress: - case TQEvent::TabletRelease: - tabletEvent( (TQTabletEvent*)e ); - if ( ! ((TQTabletEvent*)e)->isAccepted() ) - return FALSE; - break; - case TQEvent::Accel: - ((TQKeyEvent*)e)->ignore(); - return FALSE; - case TQEvent::KeyPress: { - TQKeyEvent *k = (TQKeyEvent *)e; - bool res = FALSE; - if ( !(k->state() & ControlButton || k->state() & AltButton) ) { - if ( k->key() == Key_Backtab || - (k->key() == Key_Tab && - (k->state() & ShiftButton)) ) { - TQFocusEvent::setReason( TQFocusEvent::Backtab ); - res = focusNextPrevChild( FALSE ); - TQFocusEvent::resetReason(); - - } else if ( k->key() == Key_Tab ) { - TQFocusEvent::setReason( TQFocusEvent::Tab ); - res = focusNextPrevChild( TRUE ); - TQFocusEvent::resetReason(); - } - if ( res ) - break; - } - keyPressEvent( k ); - if ( !k->isAccepted() ) - return FALSE; - } - break; - - case TQEvent::KeyRelease: - keyReleaseEvent( (TQKeyEvent*)e ); - if ( ! ((TQKeyEvent*)e)->isAccepted() ) - return FALSE; - break; - - case TQEvent::IMStart: { - TQIMEvent *i = (TQIMEvent *) e; - imStartEvent(i); - if (! i->isAccepted()) - return FALSE; - } - break; - - case TQEvent::IMCompose: { - TQIMEvent *i = (TQIMEvent *) e; - imComposeEvent(i); - if (! i->isAccepted()) - return FALSE; - } - break; - - case TQEvent::IMEnd: { - TQIMEvent *i = (TQIMEvent *) e; - imEndEvent(i); - if (! i->isAccepted()) - return FALSE; - } - break; - - case TQEvent::FocusIn: - focusInEvent( (TQFocusEvent*)e ); - setFontSys(); - break; - - case TQEvent::FocusOut: - focusOutEvent( (TQFocusEvent*)e ); - break; - - case TQEvent::Enter: - enterEvent( e ); - break; - - case TQEvent::Leave: - leaveEvent( e ); - break; - - case TQEvent::Paint: - // At this point the event has to be delivered, regardless - // whether the widget isVisible() or not because it - // already went through the filters - paintEvent( (TQPaintEvent*)e ); - break; - - case TQEvent::Move: - moveEvent( (TQMoveEvent*)e ); - break; - - case TQEvent::Resize: - resizeEvent( (TQResizeEvent*)e ); - break; - - case TQEvent::Close: { - TQCloseEvent *c = (TQCloseEvent *)e; - closeEvent( c ); - if ( !c->isAccepted() ) - return FALSE; - } - break; - - case TQEvent::ContextMenu: { - TQContextMenuEvent *c = (TQContextMenuEvent *)e; - contextMenuEvent( c ); - if ( !c->isAccepted() ) - return FALSE; - } - break; - -#ifndef TQT_NO_DRAGANDDROP - case TQEvent::Drop: - dropEvent( (TQDropEvent*) e); - break; - - case TQEvent::DragEnter: - dragEnterEvent( (TQDragEnterEvent*) e); - break; - - case TQEvent::DragMove: - dragMoveEvent( (TQDragMoveEvent*) e); - break; - - case TQEvent::DragLeave: - dragLeaveEvent( (TQDragLeaveEvent*) e); - break; -#endif - - case TQEvent::Show: - showEvent( (TQShowEvent*) e); - break; - - case TQEvent::Hide: - hideEvent( (TQHideEvent*) e); - break; - - case TQEvent::ShowWindowRequest: - if ( isShown() ) - showWindow(); - break; - - case TQEvent::ParentFontChange: - if ( isTopLevel() ) - break; - // fall through - case TQEvent::ApplicationFontChange: - if ( own_font ) - setFont( fnt.resolve( qt_naturalWidgetFont( this ) ) ); - else - unsetFont(); - break; - -#ifndef TQT_NO_PALETTE - case TQEvent::ParentPaletteChange: - if ( isTopLevel() ) - break; - // fall through - case TQEvent::ApplicationPaletteChange: - if ( !own_palette && !isDesktop() ) - unsetPalette(); -# if defined(TQ_WS_TQWS) && !defined (TQT_NO_TQWS_MANAGER) - if ( isTopLevel() && topData()->qwsManager ) { - TQRegion r( topData()->qwsManager->region() ); - TQApplication::postEvent(topData()->qwsManager, new TQPaintEvent(r, FALSE) ); - } -# endif - break; -#endif - - case TQEvent::WindowActivate: - case TQEvent::WindowDeactivate: - windowActivationChange( e->type() != TQEvent::WindowActivate ); - if ( childrenListObject() ) { - TQObjectListIt it( *childrenListObject() ); - TQObject *o; - while( ( o = it.current() ) != 0 ) { - ++it; - if ( o->isWidgetType() && - ((TQWidget*)o)->isVisible() && - !((TQWidget*)o)->isTopLevel() ) - TQApplication::sendEvent( o, e ); - } - } - break; - - case TQEvent::LanguageChange: - case TQEvent::LocaleChange: - if ( childrenListObject() ) { - TQObjectListIt it( *childrenListObject() ); - TQObject *o; - while( ( o = it.current() ) != 0 ) { - ++it; - TQApplication::sendEvent( o, e ); - } - } - if ( e->type() == TQEvent::LanguageChange ) { - int index = tqmetaObject()->findSlot( "languageChange()", TRUE ); - if ( index >= 0 ) - qt_invoke( index, 0 ); - } - update(); - break; -#ifndef TQT_NO_LAYOUT - case TQEvent::LayoutDirectionChange: - if ( tqlayout() ) { - tqlayout()->activate(); - } else { - TQObjectList* llist = queryList( "TQLayout", 0, TRUE, TRUE ); - TQObjectListIt lit( *llist ); - TQLayout *lay; - while ( ( lay = (TQLayout*)lit.current() ) != 0 ) { - ++lit; - lay->activate(); - } - delete llist; - } - update(); - break; -#endif - - case TQEvent::WindowStateChange: - { - TQEvent::Type type; - if (isMinimized()) - type = TQEvent::ShowMinimized; - else if (isFullScreen()) - type = TQEvent::ShowFullScreen; - else if (isMaximized()) - type = TQEvent::ShowMaximized; - else - type = TQEvent::ShowNormal; - - TQApplication::postEvent(this, new TQEvent(type)); - break; - } - - case TQEvent::WindowBlocked: - case TQEvent::WindowUnblocked: - if ( childrenListObject() ) { - TQObjectListIt it( *childrenListObject() ); - TQObject *o; - while( ( o = it.current() ) != 0 ) { - ++it; - TQWidget *w = ::tqqt_cast<TQWidget*>(o); - if (w && !w->testWFlags(TQt::WShowModal)) - TQApplication::sendEvent( o, e ); - } - } - break; - - default: - return FALSE; - } - return TRUE; -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive mouse move events for the widget. - - If mouse tracking is switched off, mouse move events only occur if - a mouse button is pressed while the mouse is being moved. If mouse - tracking is switched on, mouse move events occur even if no mouse - button is pressed. - - TQMouseEvent::pos() reports the position of the mouse cursor, - relative to this widget. For press and release events, the - position is usually the same as the position of the last mouse - move event, but it might be different if the user's hand shakes. - This is a feature of the underlying window system, not TQt. - - \sa setMouseTracking(), mousePressEvent(), mouseReleaseEvent(), - mouseDoubleClickEvent(), event(), TQMouseEvent -*/ - -void TQWidget::mouseMoveEvent( TQMouseEvent * e) -{ - e->ignore(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive mouse press events for the widget. - - If you create new widgets in the mousePressEvent() the - mouseReleaseEvent() may not end up where you expect, depending on - the underlying window system (or X11 window manager), the widgets' - location and maybe more. - - The default implementation implements the closing of popup widgets - when you click outside the window. For other widget types it does - nothing. - - \sa mouseReleaseEvent(), mouseDoubleClickEvent(), - mouseMoveEvent(), event(), TQMouseEvent -*/ - -void TQWidget::mousePressEvent( TQMouseEvent *e ) -{ - e->ignore(); - if ( isPopup() ) { - e->accept(); - TQWidget* w; - while ( (w = tqApp->activePopupWidget() ) && w != this ){ - w->close(); - if (tqApp->activePopupWidget() == w) // widget does not want to dissappear - w->hide(); // hide at least - } - if (!rect().contains(e->pos()) ){ - close(); - } - } -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive mouse release events for the widget. - - \sa mouseReleaseEvent(), mouseDoubleClickEvent(), - mouseMoveEvent(), event(), TQMouseEvent -*/ - -void TQWidget::mouseReleaseEvent( TQMouseEvent * e ) -{ - e->ignore(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive mouse double click events for the widget. - - The default implementation generates a normal mouse press event. - - Note that the widgets gets a mousePressEvent() and a - mouseReleaseEvent() before the mouseDoubleClickEvent(). - - \sa mousePressEvent(), mouseReleaseEvent() mouseMoveEvent(), - event(), TQMouseEvent -*/ - -void TQWidget::mouseDoubleClickEvent( TQMouseEvent *e ) -{ - mousePressEvent( e ); // try mouse press event -} - -#ifndef TQT_NO_WHEELEVENT -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive wheel events for the widget. - - If you reimplement this handler, it is very important that you - \link TQWheelEvent ignore()\endlink the event if you do not handle - it, so that the widget's parent can interpret it. - - The default implementation ignores the event. - - \sa TQWheelEvent::ignore(), TQWheelEvent::accept(), event(), - TQWheelEvent -*/ - -void TQWidget::wheelEvent( TQWheelEvent *e ) -{ - e->ignore(); -} -#endif - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive tablet events for the widget. - - If you reimplement this handler, it is very important that you - \link TQTabletEvent ignore()\endlink the event if you do not handle - it, so that the widget's parent can interpret it. - - The default implementation ignores the event. - - \sa TQTabletEvent::ignore(), TQTabletEvent::accept(), event(), - TQTabletEvent -*/ - -void TQWidget::tabletEvent( TQTabletEvent *e ) -{ - e->ignore(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive key press events for the widget. - - A widget must call setFocusPolicy() to accept focus initially and - have focus in order to receive a key press event. - - If you reimplement this handler, it is very important that you - explicitly \link TQKeyEvent::ignore() ignore\endlink the event - if you do not understand it, so that the widget's parent can - interpret it; otherwise, the event will be implicitly accepted. - Although top-level widgets are able to choose whether to accept - or ignore unknown events because they have no parent widgets that - could otherwise handle them, it is good practice to explicitly - ignore events to make widgets as reusable as possible. - - The default implementation closes popup widgets if the user - presses <b>Esc</b>. Otherwise the event is ignored. - - \sa keyReleaseEvent(), TQKeyEvent::ignore(), setFocusPolicy(), - focusInEvent(), focusOutEvent(), event(), TQKeyEvent -*/ - -void TQWidget::keyPressEvent( TQKeyEvent *e ) -{ - if ( isPopup() && e->key() == Key_Escape ) { - e->accept(); - close(); - } else { - e->ignore(); - } -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive key release events for the widget. - - A widget must \link setFocusPolicy() accept focus\endlink - initially and \link hasFocus() have focus\endlink in order to - receive a key release event. - - If you reimplement this handler, it is very important that you - \link TQKeyEvent ignore()\endlink the release if you do not - understand it, so that the widget's parent can interpret it. - - The default implementation ignores the event. - - \sa keyPressEvent(), TQKeyEvent::ignore(), setFocusPolicy(), - focusInEvent(), focusOutEvent(), event(), TQKeyEvent -*/ - -void TQWidget::keyReleaseEvent( TQKeyEvent *e ) -{ - e->ignore(); -} - -/*! - This event handler can be reimplemented in a subclass to receive - keyboard focus events (focus received) for the widget. - - A widget normally must setFocusPolicy() to something other than - \c NoFocus in order to receive focus events. (Note that the - application programmer can call setFocus() on any widget, even - those that do not normally accept focus.) - - The default implementation updates the widget (except for toplevel - widgets that do not specify a focusPolicy() ). It also calls - setMicroFocusHint(), hinting any system-specific input tools about - the focus of the user's attention. - - \sa focusOutEvent(), setFocusPolicy(), keyPressEvent(), - keyReleaseEvent(), event(), TQFocusEvent -*/ - -void TQWidget::focusInEvent( TQFocusEvent * ) -{ - if ( focusPolicy() != NoFocus || !isTopLevel() ) { - update(); - if ( testWState(WState_AutoMask) ) - updateMask(); - setMicroFocusHint(width()/2, 0, 1, height(), FALSE); - } -} - -/*! - This event handler can be reimplemented in a subclass to receive - keyboard focus events (focus lost) for the widget. - - A widget normally must setFocusPolicy() to something other than - \c NoFocus in order to receive focus events. (Note that the - application programmer can call setFocus() on any widget, even - those that do not normally accept focus.) - - The default implementation updates the widget (except for toplevel - widgets that do not specify a focusPolicy() ). It also calls - setMicroFocusHint(), hinting any system-specific input tools about - the focus of the user's attention. - - \sa focusInEvent(), setFocusPolicy(), keyPressEvent(), - keyReleaseEvent(), event(), TQFocusEvent -*/ - -void TQWidget::focusOutEvent( TQFocusEvent * ) -{ - if ( focusPolicy() != NoFocus || !isTopLevel() ){ - update(); - if ( testWState(WState_AutoMask) ) - updateMask(); - } -} - -/*! - \property TQWidget::microFocusHint - \brief the currently set micro focus hint for this widget. - - See the documentation of setMicroFocusHint() for more information. -*/ -TQRect TQWidget::microFocusHint() const -{ - if ( !extra ) - return TQRect(width()/2, 0, 1, height() ); - else if ( extra->micro_focus_hint.isEmpty() ) - return TQRect(width()/2, 0, 1, height() ); - else - return extra->micro_focus_hint; -} - -/*! - This event handler can be reimplemented in a subclass to receive - widget enter events. - - An event is sent to the widget when the mouse cursor enters the - widget. - - \sa leaveEvent(), mouseMoveEvent(), event() -*/ - -void TQWidget::enterEvent( TQEvent * ) -{ -} - -/*! - This event handler can be reimplemented in a subclass to receive - widget leave events. - - A leave event is sent to the widget when the mouse cursor leaves - the widget. - - \sa enterEvent(), mouseMoveEvent(), event() -*/ - -void TQWidget::leaveEvent( TQEvent * ) -{ -} - -/*! - This event handler can be reimplemented in a subclass to receive - paint events. - - A paint event is a request to tqrepaint all or part of the widget. - It can happen as a result of tqrepaint() or update(), or because the - widget was obscured and has now been uncovered, or for many other - reasons. - - Many widgets can simply tqrepaint their entire surface when asked - to, but some slow widgets need to optimize by painting only the - requested region: TQPaintEvent::region(). This speed optimization - does not change the result, as painting is clipped to that region - during event processing. TQListView and TQCanvas do this, for - example. - - TQt also tries to speed up painting by merging multiple paint - events into one. When update() is called several times or the - window system sends several paint events, TQt merges these events - into one event with a larger region (see TQRegion::unite()). - tqrepaint() does not permit this optimization, so we suggest using - update() when possible. - - When the paint event occurs, the update region has normally been - erased, so that you're painting on the widget's background. There - are a couple of exceptions and TQPaintEvent::erased() tells you - whether the widget has been erased or not. - - The background can be set using setBackgroundMode(), - setPaletteBackgroundColor() or setBackgroundPixmap(). The - documentation for setBackgroundMode() elaborates on the - background; we recommend reading it. - - \sa event(), tqrepaint(), update(), TQPainter, TQPixmap, TQPaintEvent -*/ - -void TQWidget::paintEvent( TQPaintEvent * ) -{ -} - - -/*! - This event handler can be reimplemented in a subclass to receive - widget move events. When the widget receives this event, it is - already at the new position. - - The old position is accessible through TQMoveEvent::oldPos(). - - \sa resizeEvent(), event(), move(), TQMoveEvent -*/ - -void TQWidget::moveEvent( TQMoveEvent * ) -{ -} - - -/*! - This event handler can be reimplemented in a subclass to receive - widget resize events. When resizeEvent() is called, the widget - already has its new tqgeometry. The old size is accessible through - TQResizeEvent::oldSize(). - - The widget will be erased and receive a paint event immediately - after processing the resize event. No drawing need be (or should - be) done inside this handler. - - Widgets that have been created with the \c WNoAutoErase flag - will not be erased. Nevertheless, they will receive a paint event - for their entire area afterwards. Again, no drawing needs to be - done inside this handler. - - The default implementation calls updateMask() if the widget has - \link TQWidget::setAutoMask() automatic masking\endlink enabled. - - \sa moveEvent(), event(), resize(), TQResizeEvent, paintEvent() -*/ - -void TQWidget::resizeEvent( TQResizeEvent * ) -{ - if ( testWState(WState_AutoMask) ) - updateMask(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive widget close events. - - The default implementation calls e->accept(), which hides this - widget. See the \l TQCloseEvent documentation for more details. - - \sa event(), hide(), close(), TQCloseEvent -*/ - -void TQWidget::closeEvent( TQCloseEvent *e ) -{ - e->accept(); -} - - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive widget context menu events. - - The default implementation calls e->ignore(), which rejects the - context event. See the \l TQContextMenuEvent documentation for - more details. - - \sa event(), TQContextMenuEvent -*/ - -void TQWidget::contextMenuEvent( TQContextMenuEvent *e ) -{ - e->ignore(); -} - - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive Input Method composition events. This handler - is called when the user begins entering text using an Input Method. - - The default implementation calls e->ignore(), which rejects the - Input Method event. See the \l TQIMEvent documentation for more - details. - - \sa event(), TQIMEvent -*/ -void TQWidget::imStartEvent( TQIMEvent *e ) -{ - e->ignore(); -} - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive Input Method composition events. This handler - is called when the user has entered some text using an Input Method. - - The default implementation calls e->ignore(), which rejects the - Input Method event. See the \l TQIMEvent documentation for more - details. - - \sa event(), TQIMEvent -*/ -void TQWidget::imComposeEvent( TQIMEvent *e ) -{ - e->ignore(); -} - - -/*! - This event handler, for event \a e, can be reimplemented in a - subclass to receive Input Method composition events. This handler - is called when the user has finished inputting text via an Input - Method. - - The default implementation calls e->ignore(), which rejects the - Input Method event. See the \l TQIMEvent documentation for more - details. - - \sa event(), TQIMEvent -*/ -void TQWidget::imEndEvent( TQIMEvent *e ) -{ - e->ignore(); -} - - -#ifndef TQT_NO_DRAGANDDROP - -/*! - This event handler is called when a drag is in progress and the - mouse enters this widget. - - See the \link dnd.html Drag-and-drop documentation\endlink for an - overview of how to provide drag-and-drop in your application. - - \sa TQTextDrag, TQImageDrag, TQDragEnterEvent -*/ -void TQWidget::dragEnterEvent( TQDragEnterEvent * ) -{ -} - -/*! - This event handler is called when a drag is in progress and the - mouse enters this widget, and whenever it moves within the widget. - - See the \link dnd.html Drag-and-drop documentation\endlink for an - overview of how to provide drag-and-drop in your application. - - \sa TQTextDrag, TQImageDrag, TQDragMoveEvent -*/ -void TQWidget::dragMoveEvent( TQDragMoveEvent * ) -{ -} - -/*! - This event handler is called when a drag is in progress and the - mouse leaves this widget. - - See the \link dnd.html Drag-and-drop documentation\endlink for an - overview of how to provide drag-and-drop in your application. - - \sa TQTextDrag, TQImageDrag, TQDragLeaveEvent -*/ -void TQWidget::dragLeaveEvent( TQDragLeaveEvent * ) -{ -} - -/*! - This event handler is called when the drag is dropped on this - widget. - - See the \link dnd.html Drag-and-drop documentation\endlink for an - overview of how to provide drag-and-drop in your application. - - \sa TQTextDrag, TQImageDrag, TQDropEvent -*/ -void TQWidget::dropEvent( TQDropEvent * ) -{ -} - -#endif // TQT_NO_DRAGANDDROP - -/*! - This event handler can be reimplemented in a subclass to receive - widget show events. - - Non-spontaneous show events are sent to widgets immediately before - they are shown. The spontaneous show events of top-level widgets - are delivered afterwards. - - \sa event(), TQShowEvent -*/ -void TQWidget::showEvent( TQShowEvent * ) -{ -} - -/*! - This event handler can be reimplemented in a subclass to receive - widget hide events. - - Hide events are sent to widgets immediately after they have been - hidden. - - \sa event(), TQHideEvent -*/ -void TQWidget::hideEvent( TQHideEvent * ) -{ -} - -/* - \fn TQWidget::x11Event( MSG * ) - - This special event handler can be reimplemented in a subclass to - receive native X11 events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::x11EventFilter() -*/ - - -#if defined(TQ_WS_MAC) - -/*! - This special event handler can be reimplemented in a subclass to - receive native Macintosh events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::macEventFilter() -*/ - -bool TQWidget::macEvent( MSG * ) -{ - return FALSE; -} - -#endif -#if defined(TQ_WS_WIN) - -/*! - This special event handler can be reimplemented in a subclass to - receive native Windows events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::winEventFilter() -*/ -bool TQWidget::winEvent( MSG * ) -{ - return FALSE; -} - -#endif -#if defined(TQ_WS_X11) - -/*! - This special event handler can be reimplemented in a subclass to - receive native X11 events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::x11EventFilter() -*/ -bool TQWidget::x11Event( XEvent * ) -{ - return FALSE; -} - -#endif -#if defined(TQ_WS_TQWS) - -/*! - This special event handler can be reimplemented in a subclass to - receive native TQt/Embedded events. - - In your reimplementation of this function, if you want to stop the - event being handled by TQt, return TRUE. If you return FALSE, this - native event is passed back to TQt, which translates the event into - a TQt event and sends it to the widget. - - \warning This function is not portable. - - \sa TQApplication::qwsEventFilter() -*/ -bool TQWidget::qwsEvent( TQWSEvent * ) -{ - return FALSE; -} - -#endif - -/*! - \property TQWidget::autoMask - \brief whether the auto mask feature is enabled for the widget - - Transparent widgets use a mask to define their visible region. - TQWidget has some built-in support to make the task of - recalculating the mask easier. When setting auto mask to TRUE, - updateMask() will be called whenever the widget is resized or - changes its focus state. Note that you must reimplement - updateMask() (which should include a call to setMask()) or nothing - will happen. - - Note: when you re-implement resizeEvent(), focusInEvent() or - focusOutEvent() in your custom widgets and still want to ensure - that the auto mask calculation works, you should add: - - \code - if ( autoMask() ) - updateMask(); - \endcode - - at the end of your event handlers. This is true for all member - functions that change the appearance of the widget in a way that - requires a recalculation of the mask. - - While being a technically appealing concept, masks have a big - drawback: when using complex masks that cannot be expressed easily - with relatively simple regions, they can be very slow on some - window systems. The classic example is a transparent label. The - complex tqshape of its contents makes it necessary to represent its - mask by a bitmap, which consumes both memory and time. If all you - want is to blend the background of several neighboring widgets - together seamlessly, you will probably want to use - setBackgroundOrigin() rather than a mask. - - \sa autoMask() updateMask() setMask() clearMask() setBackgroundOrigin() -*/ - -bool TQWidget::autoMask() const -{ - return testWState(WState_AutoMask); -} - -void TQWidget::setAutoMask( bool enable ) -{ - if ( enable == autoMask() ) - return; - - if ( enable ) { - setWState(WState_AutoMask); - updateMask(); - } else { - clearWState(WState_AutoMask); - clearMask(); - } -} - -/*! - \enum TQWidget::BackgroundOrigin - - This enum defines the origin used to draw a widget's background - pixmap. - - The pixmap is drawn using the: - \value WidgetOrigin widget's coordinate system. - \value ParentOrigin parent's coordinate system. - \value WindowOrigin top-level window's coordinate system. - \value AncestorOrigin same origin as the parent uses. -*/ - -/*! - \property TQWidget::backgroundOrigin - \brief the origin of the widget's background - - The origin is either WidgetOrigin (the default), ParentOrigin, - WindowOrigin or AncestorOrigin. - - This only makes a difference if the widget has a background - pixmap, in which case positioning matters. Using \c WindowOrigin - for several neighboring widgets makes the background blend - together seamlessly. \c AncestorOrigin allows blending backgrounds - seamlessly when an ancestor of the widget has an origin other than - \c WindowOrigin. - - \sa backgroundPixmap(), setBackgroundMode() -*/ -TQWidget::BackgroundOrigin TQWidget::backgroundOrigin() const -{ - return extra ? (BackgroundOrigin)extra->bg_origin : WidgetOrigin; -} - -void TQWidget::setBackgroundOrigin( BackgroundOrigin origin ) -{ - if ( origin == backgroundOrigin() ) - return; - createExtra(); - extra->bg_origin = origin; - update(); -} - -/*! - This function can be reimplemented in a subclass to support - transparent widgets. It should be called whenever a widget changes - state in a way that means that the tqshape mask must be recalculated. - - \sa setAutoMask(), updateMask(), setMask(), clearMask() -*/ -void TQWidget::updateMask() -{ -} - -/*! - \internal - Returns the offset of the widget from the backgroundOrigin. - - \sa setBackgroundMode(), backgroundMode(), -*/ -TQPoint TQWidget::backgroundOffset() const -{ - if (!isTopLevel()) { - switch(backgroundOrigin()) { - case WidgetOrigin: - break; - case ParentOrigin: - return pos(); - case WindowOrigin: - { - const TQWidget *topl = this; - while(topl && !topl->isTopLevel() && !topl->testWFlags(TQt::WSubWindow)) - topl = topl->parentWidget(TRUE); - return mapTo((TQWidget *)topl, TQPoint(0, 0) ); - } - case AncestorOrigin: - { - const TQWidget *topl = this; - bool ancestorIsWindowOrigin = FALSE; - while(topl && !topl->isTopLevel() && !topl->testWFlags(TQt::WSubWindow)) - { - if (!ancestorIsWindowOrigin) { - if (topl->backgroundOrigin() == TQWidget::WidgetOrigin) - break; - if (topl->backgroundOrigin() == TQWidget::ParentOrigin) - { - topl = topl->parentWidget(TRUE); - break; - } - if (topl->backgroundOrigin() == TQWidget::WindowOrigin) - ancestorIsWindowOrigin = TRUE; - } - topl = topl->parentWidget(TRUE); - } - - return mapTo((TQWidget *) topl, TQPoint(0,0) ); - } - } - } - // fall back - return TQPoint(0,0); -} - -/*! - \fn TQLayout* TQWidget::tqlayout () const - - Returns the tqlayout engine that manages the tqgeometry of this - widget's tqchildren. - - If the widget does not have a tqlayout, tqlayout() returns 0. - - \sa sizePolicy() -*/ - - -/* Sets this widget to use tqlayout \a l to manage the tqgeometry of its - tqchildren. - - If the widget already had a tqlayout, the old tqlayout is - forgotten. (Note that it is not deleted.) - - \sa tqlayout() TQLayout sizePolicy() -*/ -#ifndef TQT_NO_LAYOUT -void TQWidget::setLayout( TQLayout *l ) -{ - lay_out = l; -} -#endif - -/*! - \property TQWidget::sizePolicy - \brief the default tqlayout behavior of the widget - - If there is a TQLayout that manages this widget's tqchildren, the - size policy specified by that tqlayout is used. If there is no such - TQLayout, the result of this function is used. - - The default policy is Preferred/Preferred, which means that the - widget can be freely resized, but prefers to be the size - tqsizeHint() returns. Button-like widgets set the size policy to - specify that they may stretch horizontally, but are fixed - vertically. The same applies to lineedit controls (such as - TQLineEdit, TQSpinBox or an editable TQComboBox) and other - horizontally orientated widgets (such as TQProgressBar). - TQToolButton's are normally square, so they allow growth in both - directions. Widgets that support different directions (such as - TQSlider, TQScrollBar or TQHeader) specify stretching in the - respective direction only. Widgets that can provide scrollbars - (usually subclasses of TQScrollView) tend to specify that they can - use additional space, and that they can make do with less than - tqsizeHint(). - - \sa tqsizeHint() TQLayout TQSizePolicy updateGeometry() -*/ -TQSizePolicy TQWidget::sizePolicy() const -{ - return extra ? extra->size_policy - : TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred ); -} - -void TQWidget::tqsetSizePolicy( TQSizePolicy policy ) -{ - setWState( WState_OwnSizePolicy ); - if ( policy == sizePolicy() ) - return; - createExtra(); - extra->size_policy = policy; - updateGeometry(); -} - -/*! - \overload void TQWidget::tqsetSizePolicy( TQSizePolicy::SizeType hor, TQSizePolicy::SizeType ver, bool hfw ) - - Sets the size policy of the widget to \a hor, \a ver and \a hfw - (height for width). - - \sa TQSizePolicy::TQSizePolicy() -*/ - -/*! - Returns the preferred height for this widget, given the width \a - w. The default implementation returns 0, indicating that the - preferred height does not depend on the width. - - \warning Does not look at the widget's tqlayout. -*/ - -int TQWidget::heightForWidth( int w ) const -{ - (void)w; - return 0; -} - -/*! - \property TQWidget::customWhatsThis - \brief whether the widget wants to handle What's This help manually - - The default implementation of customWhatsThis() returns FALSE, - which means the widget will not receive any events in Whats This - mode. - - The widget may leave What's This mode by calling - TQWhatsThis::leaveWhatsThisMode(), with or without actually - displaying any help text. - - You can also reimplement customWhatsThis() if your widget is a - "passive interactor" supposed to work under all circumstances. - Simply don't call TQWhatsThis::leaveWhatsThisMode() in that case. - - \sa TQWhatsThis::inWhatsThisMode() TQWhatsThis::leaveWhatsThisMode() -*/ -bool TQWidget::customWhatsThis() const -{ - return FALSE; -} - -/*! - Returns the visible child widget at pixel position \a (x, y) in - the widget's own coordinate system. - - If \a includeThis is TRUE, and there is no child visible at \a (x, - y), the widget itself is returned. -*/ -TQWidget *TQWidget::tqchildAt( int x, int y, bool includeThis ) const -{ - if ( !rect().contains( x, y ) ) - return 0; - if ( childrenListObject() ) { - TQObjectListIt it( *childrenListObject() ); - it.toLast(); - TQWidget *w, *t; - while( (w=(TQWidget *)it.current()) != 0 ) { - --it; - if ( w->isWidgetType() && !w->isTopLevel() && !w->isHidden() ) { - if ( ( t = w->tqchildAt( x - w->x(), y - w->y(), TRUE ) ) ) - return t; - } - } - } - if ( includeThis ) - return (TQWidget*)this; - return 0; -} - -/*! - \overload - - Returns the visible child widget at point \a p in the widget's own - coordinate system. - - If \a includeThis is TRUE, and there is no child visible at \a p, - the widget itself is returned. - -*/ -TQWidget *TQWidget::tqchildAt( const TQPoint & p, bool includeThis ) const -{ - return tqchildAt( p.x(), p.y(), includeThis ); -} - - -/*! - Notifies the tqlayout system that this widget has changed and may - need to change tqgeometry. - - Call this function if the tqsizeHint() or sizePolicy() have changed. - - For explicitly hidden widgets, updateGeometry() is a no-op. The - tqlayout system will be notified as soon as the widget is shown. -*/ - -void TQWidget::updateGeometry() -{ - if ( !isTopLevel() && isShown() ) - TQApplication::postEvent( parentWidget(), - new TQEvent( TQEvent::LayoutHint ) ); -} - - -/*! - Reparents the widget. The widget gets a new \a parent, new widget - flags (\a f, but as usual, use 0) at a new position in its new - parent (\a p). - - If \a showIt is TRUE, show() is called once the widget has been - reparented. - - If the new parent widget is in a different top-level widget, the - reparented widget and its tqchildren are appended to the end of the - \link setFocusPolicy() tab chain \endlink of the new parent - widget, in the same internal order as before. If one of the moved - widgets had keyboard focus, reparent() calls clearFocus() for that - widget. - - If the new parent widget is in the same top-level widget as the - old parent, reparent doesn't change the tab order or keyboard - focus. - - \warning It is extremely unlikely that you will ever need this - function. If you have a widget that changes its content - dynamically, it is far easier to use \l TQWidgetStack or \l - TQWizard. - - \sa getWFlags() -*/ - -void TQWidget::reparent( TQWidget *parent, WFlags f, const TQPoint &p, - bool showIt ) -{ - reparentSys( parent, f, p, showIt ); - TQEvent e( TQEvent::Reparent ); - TQApplication::sendEvent( this, &e ); - if (!own_font) - unsetFont(); - else - setFont( fnt.resolve( qt_naturalWidgetFont( this ) ) ); -#ifndef TQT_NO_PALETTE - if (!own_palette) - unsetPalette(); -#endif -} - -/*! - \overload - - A convenience version of reparent that does not take widget flags - as argument. - - Calls reparent(\a parent, getWFlags() \& ~\l WType_Mask, \a p, \a - showIt). -*/ -void TQWidget::reparent( TQWidget *parent, const TQPoint & p, - bool showIt ) -{ - reparent( parent, getWFlags() & ~WType_Mask, p, showIt ); -} - -/*! - \property TQWidget::ownCursor - \brief whether the widget uses its own cursor - - If FALSE, the widget uses its parent widget's cursor. - - \sa cursor -*/ - -/*! - \property TQWidget::ownFont - \brief whether the widget uses its own font - - If FALSE, the widget uses its parent widget's font. - - \sa font -*/ - -/*! - \property TQWidget::ownPalette - \brief whether the widget uses its own palette - - If FALSE, the widget uses its parent widget's palette. - - \sa palette -*/ - - -void TQWidget::tqrepaint( bool erase ) -{ - tqrepaint( visibleRect(), erase ); -} - - - - -/*!\obsolete Use paletteBackgroundColor() or eraseColor() instead. */ -const TQColor & TQWidget::backgroundColor() const { return eraseColor(); } -/*!\obsolete Use setPaletteBackgroundColor() or setEraseColor() instead. */ -void TQWidget::setBackgroundColor( const TQColor &c ) { setEraseColor( c ); } -/*!\obsolete Use paletteBackgroundPixmap() or erasePixmap() instead. */ -const TQPixmap *TQWidget::backgroundPixmap() const { return erasePixmap(); } -/*!\obsolete Use setPaletteBackgroundPixmap() or setErasePixmap() instead. */ -void TQWidget::setBackgroundPixmap( const TQPixmap &pm ) { setErasePixmap( pm ); } - - -// documentation in qdesktopwidget_win.cpp -void TQDesktopWidget::insertChild( TQObject *obj ) -{ - if ( obj->isWidgetType() ) - return; - TQWidget::insertChild( obj ); -} - -/*! - \property TQWidget::windowOpacity - - \brief The level of opacity for the window. - - The valid range of opacity is from 1.0 (completely opaque) to - 0.0 (completely transparent). - - By default the value of this property is 1.0. - - This feature is only present on Mac OS X and Windows 2000 and up. - - \warning Changing this property from opaque to transparent might issue a - paint event that needs to be processed before the window is displayed - correctly. This affects mainly the use of TQPixmap::grabWindow(). Also note - that semi-transparent windows update and resize significantely slower than - opaque windows. -*/ - -#endif // USE_QT4 |