summaryrefslogtreecommitdiffstats
path: root/src/kernel/qwidget.cpp
diff options
context:
space:
mode:
authorMichele Calgaro <michele.calgaro@yahoo.it>2024-06-02 23:07:22 +0900
committerMichele Calgaro <michele.calgaro@yahoo.it>2024-06-02 23:22:42 +0900
commit8ac0e970e4464d9f8f73c0fb34a178ff135be8c3 (patch)
treeb95884617b9a37accc843676d5d42be4116a3f54 /src/kernel/qwidget.cpp
parent68b81013e8668f50fc18b7e26a520ec93a7a1251 (diff)
downloadtqt-8ac0e970e4464d9f8f73c0fb34a178ff135be8c3.tar.gz
tqt-8ac0e970e4464d9f8f73c0fb34a178ff135be8c3.zip
Rename ntqwidget* related files to equivalent tqwidget*
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'src/kernel/qwidget.cpp')
-rw-r--r--src/kernel/qwidget.cpp6122
1 files changed, 0 insertions, 6122 deletions
diff --git a/src/kernel/qwidget.cpp b/src/kernel/qwidget.cpp
deleted file mode 100644
index e855e7448..000000000
--- a/src/kernel/qwidget.cpp
+++ /dev/null
@@ -1,6122 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQWidget class
-**
-** Created : 931031
-**
-** Copyright (C) 1992-2008 Trolltech ASA. All rights reserved.
-**
-** 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 sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-
-#include "tqobjectlist.h"
-#include "ntqwidget.h"
-#include "ntqwidgetlist.h"
-#include "ntqwidgetintdict.h"
-#include "ntqptrdict.h"
-#include "ntqfocusdata.h"
-#include "ntqcursor.h"
-#include "ntqpixmap.h"
-#include "ntqapplication.h"
-#include "qapplication_p.h"
-#include "ntqbrush.h"
-#include "ntqlayout.h"
-#include "ntqstylefactory.h"
-#include "ntqcleanuphandler.h"
-#include "ntqstyle.h"
-#include "ntqmetaobject.h"
-#include "ntqguardedptr.h"
-#if defined(TQT_THREAD_SUPPORT)
-#include "ntqthread.h"
-#endif
-#if defined(QT_ACCESSIBILITY_SUPPORT)
-#include "ntqaccessible.h"
-#endif
-#if defined(TQ_WS_WIN)
-#include "qt_windows.h"
-#include "qinputcontext_p.h"
-#endif
-#if defined(TQ_WS_QWS)
-#include "qwsmanager_qws.h"
-#endif
-#include "qfontdata_p.h"
-
-
-/*!
- \class TQWidget ntqwidget.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 layout to the parent TQWidget. (See \link
- layout.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(),
- repaint(),
- erase(),
- scroll(),
- updateMask().
-
- \row \i Geometry \i
- pos(),
- size(),
- rect(),
- x(),
- y(),
- width(),
- height(),
- sizePolicy(),
- setSizePolicy(),
- sizeHint(),
- updateGeometry(),
- layout(),
- move(),
- resize(),
- setGeometry(),
- frameGeometry(),
- geometry(),
- childrenRect(),
- adjustSize(),
- mapFromGlobal(),
- mapFromParent()
- mapToGlobal(),
- mapToParent(),
- maximumSize(),
- minimumSize(),
- 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(),
- colorGroup(),
- 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(),
- topLevelWidget(),
- 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 geometry (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 children 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 children 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 ntqevent.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 sizeHint() and to set
- the correct size policy with setSizePolicy(), so users of your class
- can set up layout management more easily. A size policy lets you
- supply good defaults for the layout management handling, so that
- other widgets can contain and manage yours easily. sizeHint()
- 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_QWS) || defined(Q_OS_TEMP)
-static const int WDictSize = 163; // plenty for small devices
-#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::mapper = 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->sizeHint();
- TQSizePolicy::ExpandData exp;
-#ifndef TQT_NO_LAYOUT
- if ( w->layout() ) {
- if ( w->layout()->hasHeightForWidth() )
- s.setHeight( w->layout()->totalHeightForWidth( s.width() ) );
- exp = w->layout()->expanding();
- } else
-#endif
- {
- if ( w->sizePolicy().hasHeightForWidth() )
- s.setHeight( w->heightForWidth( s.width() ) );
- exp = w->sizePolicy().expanding();
- }
- 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 repaint events directly. (This tends to produce more events
- and smaller repaint 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::NETWMFlags
-
- \keyword NETWM flag
-
- This enum type is used to specify various NETWM properties
- under X11 and similar systems.
-
- The main types are
-
- \value WX11DisableMove
- \value WX11DisableClose
- \value WX11DisableResize
- \value WX11DisableMinimize
- \value WX11DisableMaximize
- \value WX11DisableShade
-
-*/
-
-/*!
- \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, widget flags set to \a f, and NETWM flags set to \a n.
-
- 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, NFlags n )
- : TQObject( parent, name ), TQPaintDevice( TQInternal::Widget )
-{
-#if defined(QT_CHECK_STATE) && !defined(TQ_WS_WIN)
- if ( tqApp->type() == TQApplication::Tty ) {
- tqWarning( "TQWidget: Cannot create a TQWidget when no GUI "
- "is being used" );
- }
-#endif
-
-#if defined(TQT_THREAD_SUPPORT) && defined(QT_CHECK_STATE)
- if (TQThread::currentThreadObject() != TQApplication::guiThread()) {
- tqFatal( "TQWidget: Cannot create a TQWidget outside of the main GUI thread" );
- }
-#endif
-
- fstrut_dirty = 1;
-
- isWidget = TRUE; // is a widget
- winid = 0; // default attributes
- widget_state = 0;
- widget_flags = f;
- netwm_flags = n;
- 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->focusWidgets.findRef(this) < 0 )
- fd->focusWidgets.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 children are deleted first. The application
- exits if this widget is the main widget.
-*/
-
-TQWidget::~TQWidget()
-{
-#if defined (QT_CHECK_STATE)
- if ( paintingActive() )
- tqWarning( "%s (%s): deleted while being painted", className(), name() );
-#endif
-
- // Remove myself and all children from the can-take-focus list
- TQFocusData *f = focusData( FALSE );
- if ( f ) {
- TQPtrListIterator<TQWidget> it(f->focusWidgets);
- TQWidget *w;
- while ( (w = it.current()) ) {
- ++it;
- TQWidget * p = w;
- while( p && p != this )
- p = p->parentWidget();
- if ( p ) // my descendant
- f->focusWidgets.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 children before destroying itself
- if ( childObjects ) { // delete children 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;
- 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::topLevelWidgets()
-*/
-
-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_QWS) && !defined(TQT_NO_QWS_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 );
-
- extra->m_ceData = NULL;
-
- createSysExtra();
- }
-}
-
-
-/*!
- \internal
- Deletes the widget extra data.
-*/
-
-void TQWidget::deleteExtra()
-{
- if ( extra ) { // if exists
- delete extra->m_ceData;
- 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_QWS) && !defined(TQT_NO_QWS_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 ntqwindowdefs.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
- geometry.
-
- \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 topLevelWidget(), 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 geometry.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 children. 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 ( children() ) {
- TQObjectListIt it( *children() );
- 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 (focusWidget() == this) {
- bool parentIsEnabled = (!parentWidget() || parentWidget()->isEnabled());
- if (!parentIsEnabled || !focusNextPrevChild(TRUE))
- clearFocus();
- }
- setWState( WState_Disabled );
- setBackgroundFromMode();
- enabledChange( !enable );
- if ( children() ) {
- TQObjectListIt it( *children() );
- 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 tqt_x11_enforce_cursor( TQWidget * w ); // defined in qwidget_x11.cpp
- tqt_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(), repaint(), update(), clipRegion()
-*/
-
-void TQWidget::enabledChange( bool )
-{
- update();
-#if defined(QT_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 geometry of the widget relative to its parent including any
- window frame
-
- See the \link geometry.html Window Geometry documentation\endlink
- for an overview of geometry issues with top-level widgets.
-
- \sa geometry() 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 geometry.html Window Geometry documentation\endlink
- for an overview of top-level widget geometry.
-
- \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 geometry.html Window Geometry documentation\endlink
- for an overview of top-level widget geometry.
-
- \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 geometry.html Window Geometry documentation\endlink
- for an overview of top-level widget geometry.
-
- \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::geometry
- \brief the geometry of the widget relative to its parent and
- excluding the window frame
-
- When changing the geometry, 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 minimumSize() and maximumSize().
-
- 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 geometry.html Window Geometry documentation\endlink
- for an overview of top-level widget geometry.
-
- \sa frameGeometry(), rect(), move(), resize(), moveEvent(),
- resizeEvent(), minimumSize(), maximumSize()
-*/
-
-/*!
- \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
- minimumSize() and maximumSize(). 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 layout.
-
- 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, geometry, minimumSize, maximumSize, resizeEvent()
-*/
-
-/*!
- \property TQWidget::width
- \brief the width of the widget excluding any window frame
-
- See the \link geometry.html Window Geometry documentation\endlink
- for an overview of top-level widget geometry.
-
- \sa geometry, height, size
-*/
-
-/*!
- \property TQWidget::height
- \brief the height of the widget excluding any window frame
-
- See the \link geometry.html Window Geometry documentation\endlink
- for an overview of top-level widget geometry.
-
- \sa geometry, width, size
-*/
-
-/*!
- \property TQWidget::rect
- \brief the internal geometry of the widget excluding any window
- frame
-
- The rect property equals TQRect(0, 0, width(), height()).
-
- See the \link geometry.html Window Geometry documentation\endlink
- for an overview of top-level widget geometry.
-
- \sa size
-*/
-
-/*!
- \property TQWidget::childrenRect
- \brief the bounding rectangle of the widget's children
-
- Hidden children are excluded.
-
- \sa childrenRegion() geometry()
-*/
-
-TQRect TQWidget::childrenRect() const
-{
- TQRect r( 0, 0, 0, 0 );
- if ( !children() )
- return r;
- TQObjectListIt it( *children() );
- TQObject *obj;
- while ( (obj = it.current()) ) {
- ++it;
- if ( obj->isWidgetType() && !((TQWidget*)obj)->isHidden() && !((TQWidget*)obj)->isTopLevel())
- r = r.unite( ((TQWidget*)obj)->geometry() );
- }
- return r;
-}
-
-/*!
- \property TQWidget::childrenRegion
- \brief the combined region occupied by the widget's children
-
- Hidden children are excluded.
-
- \sa childrenRect() geometry()
-*/
-
-TQRegion TQWidget::childrenRegion() const
-{
- TQRegion r;
- if ( !children() )
- return r;
- TQObjectListIt it( *children() ); // iterate over all children
- TQObject *obj;
- while ( (obj=it.current()) ) {
- ++it;
- if ( obj->isWidgetType() && !((TQWidget*)obj)->isHidden() && !((TQWidget*)obj)->isTopLevel())
- r = r.unite( ((TQWidget*)obj)->geometry() );
- }
- return r;
-}
-
-
-/*!
- \property TQWidget::minimumSize
- \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 layout inside the widget, the minimum size will be
- set by the layout and not by setMinimumSize(), unless you set the
- layout's resize mode to TQLayout::FreeResize.
-
- \sa minimumWidth, minimumHeight, maximumSize, sizeIncrement
- TQLayout::setResizeMode()
-*/
-
-TQSize TQWidget::minimumSize() const
-{
- return extra ? TQSize( extra->minw, extra->minh ) : TQSize( 0, 0 );
-}
-
-/*!
- \property TQWidget::maximumSize
- \brief the widget's maximum size
-
- The widget cannot be resized to a larger size than the maximum
- widget size.
-
- \sa maximumWidth(), maximumHeight(), setMaximumSize(),
- minimumSize(), sizeIncrement()
-*/
-
-TQSize TQWidget::maximumSize() 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 minimumSize().width().
-
- \sa minimumSize, minimumHeight
-*/
-
-/*!
- \property TQWidget::minimumHeight
- \brief the widget's minimum height
-
- This property corresponds to minimumSize().height().
-
- \sa minimumSize, minimumWidth
-*/
-
-/*!
- \property TQWidget::maximumWidth
- \brief the widget's maximum width
-
- This property corresponds to maximumSize().width().
-
- \sa maximumSize, maximumHeight
-*/
-
-/*!
- \property TQWidget::maximumHeight
- \brief the widget's maximum height
-
- This property corresponds to maximumSize().height().
-
- \sa maximumSize, 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, minimumSize, maximumSize
-*/
-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, minimumSize().height() );
-}
-
-void TQWidget::setMinimumHeight( int h )
-{
- setMinimumSize( minimumSize().width(), h );
-}
-
-void TQWidget::setMaximumWidth( int w )
-{
- setMaximumSize( w, maximumSize().height() );
-}
-
-void TQWidget::setMaximumHeight( int h )
-{
- setMaximumSize( maximumSize().width(), h );
-}
-
-/*!
- Sets both the minimum and maximum width of the widget to \a w
- without changing the heights. Provided for convenience.
-
- \sa sizeHint() minimumSize() maximumSize() setFixedSize()
-*/
-
-void TQWidget::setFixedWidth( int w )
-{
- setMinimumSize( w, minimumSize().height() );
- setMaximumSize( w, maximumSize().height() );
-}
-
-
-/*!
- Sets both the minimum and maximum heights of the widget to \a h
- without changing the widths. Provided for convenience.
-
- \sa sizeHint() minimumSize() maximumSize() setFixedSize()
-*/
-
-void TQWidget::setFixedHeight( int h )
-{
- setMinimumSize( minimumSize().width(), h );
- setMaximumSize( maximumSize().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->topLevelWidget()->setCaption( "New Caption" );
- \endcode
-
- \sa isTopLevel()
-*/
-
-TQWidget *TQWidget::topLevelWidget() 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 colorGroup().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 = colorGroup();
- 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 colorGroup().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(QT_DEBUG)
- tqWarning( "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, colorGroup()
-*/
-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 colorGroup().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, colorGroup()
-*/
-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 colorGroup().brush( role );
- }
-#else
- return noBrush;
-#endif
-}
-
-
-/*!
- \property TQWidget::colorGroup
- \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::colorGroup() 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, colorGroup(), 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 ( children() ) {
- TQEvent e( TQEvent::ParentPaletteChange );
- TQObjectListIt it( *children() );
- 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 children
- 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 ( children() ) {
- TQEvent e( TQEvent::ParentFontChange );
- TQObjectListIt it( *children() );
- 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
- geometry.
-
- \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 shape for this widget
-
- The mouse cursor will assume this shape when it's over this
- widget. See the \link TQt::CursorShape list of predefined cursor
- objects\endlink for a range of useful shapes.
-
- 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 (QT_CHECK_STATE)
- tqWarning( "%s (%s): already in focus proxy chain", className(), name() );
-#endif
- return;
- }
- }
-
- createExtra();
-
- if ( extra->focus_proxy ) {
- disconnect( extra->focus_proxy, TQ_SIGNAL(destroyed()),
- this, TQ_SLOT(focusProxyDestroyed()) );
- extra->focus_proxy = 0;
- }
-
- if ( w ) {
- setFocusPolicy( w->focusPolicy() );
- connect( w, TQ_SIGNAL(destroyed()),
- this, TQ_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->focusWidget() == this}.
-
- \sa setFocus(), clearFocus(), setFocusPolicy(), TQApplication::focusWidget()
-*/
-bool TQWidget::hasFocus() const
-{
- const TQWidget* w = this;
- while ( w->focusProxy() )
- w = w->focusProxy();
- return tqApp->focusWidget() == 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::focusWidget() grabKeyboard()
- grabMouse()
-*/
-
-void TQWidget::setFocus()
-{
- if ( !isEnabled() )
- return;
-
- if ( focusProxy() ) {
- focusProxy()->setFocus();
- return;
- }
-
- TQFocusData * f = focusData( TRUE );
- if ( f->it.current() == this && tqApp->focusWidget() == 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->focusWidgets.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 ( !topLevelWidget()->isPopup() )
- SetFocus( winId() );
- else {
-#endif
-#if defined(QT_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::focusWidget()
-*/
-
-void TQWidget::clearFocus()
-{
- if ( focusProxy() ) {
- focusProxy()->clearFocus();
- return;
- } else if ( hasFocus() ) {
-#if !defined(TQ_WS_X11)
- resetInputContext();
-#else
- unfocusInputContext();
-#endif
- TQWidget* w = tqApp->focusWidget();
- // 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(QT_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->focusWidgets.last() : f->focusWidgets.first();
- extern bool tqt_tab_all_widgets;
- uint focus_flag = tqt_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->focusWidgets.prev() : f->focusWidgets.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::focusWidget(), which returns the focus
- widget in the currently active window.
-*/
-
-TQWidget *TQWidget::focusWidget() const
-{
- TQWidget *that = (TQWidget *)this; // mutable
- TQFocusData *f = that->focusData( FALSE );
- if ( f && f->focusWidgets.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 (focusWidget() 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 = topLevelWidget();
- 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 layout recalculation
- takes too long for the CPU.
-
- If a widget supports multiple character unicode 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 = topLevelWidget();
- if(testWFlags(WSubWindow) && parentWidget())
- tlw = parentWidget()->topLevelWidget();
- if(tlw == tqApp->activeWindow() || ( isVisible() && tlw->isPopup() ))
- return TRUE;
-#ifndef TQT_NO_STYLE
- const_cast<TQWidget*>(this)->createExtra();
- if (!extra->m_ceData) {
- const_cast<TQWidget*>(this)->extra->m_ceData = new TQStyleControlElementData();
- }
- //extra->m_ceData->widgetObjectTypes = getObjectTypeListForObject(this);
- extra->m_ceData->widgetObjectTypes.clear();
- extra->m_ceData->allDataPopulated = false;
- //if(style().styleHint(TQStyle::SH_Widget_ShareActivation, *extra->m_ceData, getControlElementFlagsForObject(this, extra->m_ceData->widgetObjectTypes, TQStyleOption(), false), TQStyleOption(), NULL, this)) {
- if(style().styleHint(TQStyle::SH_Widget_ShareActivation, *extra->m_ceData, TQStyle::CEF_None, TQStyleOption(), NULL, 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()->topLevelWidget() == tlw)
- return TRUE;
- while(w && (tlw->isDialog() || tlw->testWFlags(TQt::WStyle_Tool)) &&
- !w->testWFlags(TQt::WShowModal) && w->parentWidget()) {
- w = w->parentWidget()->topLevelWidget();
- 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())->topLevelWidget() == first->topLevelWidget()) {
- 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->focusWidgets.removeRef( second );
- if ( f->focusWidgets.findRef( first ) >= 0 )
- f->focusWidgets.insert( f->focusWidgets.at() + 1, second );
- else
- f->focusWidgets.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 == topLevelWidget() )
- return; // nothing to do
-
- TQFocusData * from = oldtlw ? oldtlw->topData()->focusData : 0;
- TQFocusData * to;
- to = focusData();
-
- if ( from ) {
- from->focusWidgets.first();
- do {
- TQWidget * pw = from->focusWidgets.current();
- while( pw && pw != this )
- pw = pw->parentWidget();
- if ( pw == this ) {
- TQWidget * w = from->focusWidgets.take();
- if ( w == from->it.current() )
- // probably best to clear keyboard focus, or
- // the user might become rather confused
- w->clearFocus();
- if ( !isTopLevel() )
- to->focusWidgets.append( w );
- } else {
- from->focusWidgets.next();
- }
- } while( from->focusWidgets.current() );
- }
-
- if ( to->focusWidgets.findRef(this) < 0 )
- to->focusWidgets.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 children,
- 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->children();
-
- 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 + geometry().x() - TQWidget::x(),
- y + geometry().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( geometry().x(), geometry().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->focusWidgets.findRef( this ) < 0 )
- f->focusWidgets.append( this );
- }
- focus_policy = (uint) policy;
-}
-
-/*!
- \property TQWidget::updatesEnabled
- \brief whether updates are enabled
-
- Calling update() and repaint() 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 );
- repaint();
- \endcode
-
- \sa update(), repaint(), 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 Q_OS_TEMP
- if ( isTopLevel() && !testWState( WState_Resized ) ) {
- // do this before sending the posted resize events. Otherwise
- // the layout would catch the resize event and may expand the
- // minimum size.
- TQSize s = qt_naturalWidgetSize( this );
- if ( !s.isEmpty() )
- resize( s );
- }
-#endif // Q_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) ) {
- // tqt_enter_modal *before* show, otherwise the initial
- // stacking might be wrong
- tqt_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(QT_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) )
- tqt_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->focusWidget() == this )
- focusNextPrevChild( TRUE );
- TQHideEvent hideEvent;
- TQApplication::sendEvent( this, &hideEvent );
- hideChildren( FALSE );
-
-#if defined(QT_ACCESSIBILITY_SUPPORT)
- TQAccessible::updateAccessibility( this, 0, TQAccessible::ObjectHide );
-#endif
- } else {
- TQEvent hideToParentEvent( TQEvent::HideToParent );
- TQApplication::sendEvent( this, &hideToParentEvent );
- }
-
- // post layout 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 ( children() ) {
- TQObjectListIt it(*children());
- 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 ( children() ) {
- TQObjectListIt it(*children());
- 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->topLevelWidget() : 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 sizeHint() 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->receivers(TQ_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->topLevelWidgets();
- 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 repaint(). If you do not
- need the rectangle for repaint(), 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 repaint() 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 sizeHint() if valid (i.e if the size hint's width and height
- are \>= 0), otherwise sets the size to the children rectangle (the
- union of all child widget geometries).
-
- \sa sizeHint(), childrenRect()
-*/
-
-void TQWidget::adjustSize()
-{
- TQApplication::sendPostedEvents( 0, TQEvent::ChildInserted );
- TQApplication::sendPostedEvents( 0, TQEvent::LayoutHint );
- if ( !testWState(WState_Polished) )
- polish();
- TQSize s = sizeHint();
-
- 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 ( layout() ) {
- if ( layout()->hasHeightForWidth() ) {
- s = s.boundedTo( screen.size() );
- s.setHeight( layout()->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 = childrenRect(); // get children rectangle
- if ( r.isNull() ) // probably no widgets
- return;
- resize( r.width() + 2 * r.x(), r.height() + 2 * r.y() );
-}
-
-
-/*!
- \property TQWidget::sizeHint
- \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 sizeHint() returns an invalid size
- if there is no layout for this widget, and returns the layout's
- preferred size otherwise.
-
- \sa TQSize::isValid(), minimumSizeHint(), sizePolicy(),
- setMinimumSize(), updateGeometry()
-*/
-
-TQSize TQWidget::sizeHint() const
-{
-#ifndef TQT_NO_LAYOUT
- if ( layout() )
- return layout()->totalSizeHint();
-#endif
- return TQSize( -1, -1 );
-}
-
-/*!
- \property TQWidget::minimumSizeHint
- \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 minimumSizeHint() returns an invalid
- size if there is no layout for this widget, and returns the
- layout's minimum size otherwise. Most built-in widgets reimplement
- minimumSizeHint().
-
- \l TQLayout will never resize a widget to a size smaller than
- minimumSizeHint.
-
- \sa TQSize::isValid(), resize(), setMinimumSize(), sizePolicy()
-*/
-TQSize TQWidget::minimumSizeHint() const
-{
-#ifndef TQT_NO_LAYOUT
- if ( layout() )
- return layout()->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_QWS) && !defined (TQT_NO_QWS_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 ( children() ) {
- TQObjectListIt it( *children() );
- 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 ( children() ) {
- TQObjectListIt it( *children() );
- TQObject *o;
- while( ( o = it.current() ) != 0 ) {
- ++it;
- TQApplication::sendEvent( o, e );
- }
- }
- if ( e->type() == TQEvent::LanguageChange ) {
- int index = metaObject()->findSlot( "languageChange()", TRUE );
- if ( index >= 0 )
- tqt_invoke( index, 0 );
- }
- update();
- break;
-#ifndef TQT_NO_LAYOUT
- case TQEvent::LayoutDirectionChange:
- if ( layout() ) {
- layout()->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 ( children() ) {
- TQObjectListIt it( *children() );
- TQObject *o;
- while( ( o = it.current() ) != 0 ) {
- ++it;
- TQWidget *w = ::tqt_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 || 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 repaint all or part of the widget.
- It can happen as a result of repaint() or update(), or because the
- widget was obscured and has now been uncovered, or for many other
- reasons.
-
- Many widgets can simply repaint 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()).
- repaint() 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(), repaint(), 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 geometry. 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_QWS)
-
-/*!
- 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 shape 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 shape 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::layout () const
-
- Returns the layout engine that manages the geometry of this
- widget's children.
-
- If the widget does not have a layout, layout() returns 0.
-
- \sa sizePolicy()
-*/
-
-
-/* Sets this widget to use layout \a l to manage the geometry of its
- children.
-
- If the widget already had a layout, the old layout is
- forgotten. (Note that it is not deleted.)
-
- \sa layout() TQLayout sizePolicy()
-*/
-#ifndef TQT_NO_LAYOUT
-void TQWidget::setLayout( TQLayout *l )
-{
- lay_out = l;
-}
-#endif
-
-/*!
- \property TQWidget::sizePolicy
- \brief the default layout behavior of the widget
-
- If there is a TQLayout that manages this widget's children, the
- size policy specified by that layout 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
- sizeHint() 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
- sizeHint().
-
- \sa sizeHint() TQLayout TQSizePolicy updateGeometry()
-*/
-TQSizePolicy TQWidget::sizePolicy() const
-{
- return extra ? extra->size_policy
- : TQSizePolicy( TQSizePolicy::Preferred, TQSizePolicy::Preferred );
-}
-
-void TQWidget::setSizePolicy( TQSizePolicy policy )
-{
- setWState( WState_OwnSizePolicy );
- if ( policy == sizePolicy() )
- return;
- createExtra();
- extra->size_policy = policy;
- updateGeometry();
-}
-
-/*!
- \overload void TQWidget::setSizePolicy( 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 layout.
-*/
-
-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::childAt( int x, int y, bool includeThis ) const
-{
- if ( !rect().contains( x, y ) )
- return 0;
- if ( children() ) {
- TQObjectListIt it( *children() );
- it.toLast();
- TQWidget *w, *t;
- while( (w=(TQWidget *)it.current()) != 0 ) {
- --it;
- if ( w->isWidgetType() && !w->isTopLevel() && !w->isHidden() ) {
- if ( ( t = w->childAt( 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::childAt( const TQPoint & p, bool includeThis ) const
-{
- return childAt( p.x(), p.y(), includeThis );
-}
-
-
-/*!
- Notifies the layout system that this widget has changed and may
- need to change geometry.
-
- Call this function if the sizeHint() or sizePolicy() have changed.
-
- For explicitly hidden widgets, updateGeometry() is a no-op. The
- layout system will be notified as soon as the widget is shown.
-*/
-
-void TQWidget::updateGeometry()
-{
- TQWidget *parent = parentWidget();
- if (parent && !isTopLevel() && isShown())
- TQApplication::postEvent(parent, 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 children 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::repaint( bool erase )
-{
- repaint( 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.
-*/