/**************************************************************************** ** $Id: qwidget.h,v 2.137.2.1 1999/07/13 19:59:02 warwick Exp $ ** ** Definition of QWidget class ** ** Created : 931029 ** ** Copyright (C) 1992-1999 Troll Tech AS. All rights reserved. ** ** This file is part of the Qt GUI Toolkit. ** ** This file may be distributed under the terms of the Q Public License ** as defined by Troll Tech AS of Norway and appearing in the file ** LICENSE.QPL included in the packaging of this file. ** ** Licensees holding valid Qt Professional Edition licenses may use this ** file in accordance with the Qt Professional Edition License Agreement ** provided with the Qt Professional Edition. ** ** See http://www.troll.no/pricing.html or email sales@troll.no for ** information about the Professional Edition licensing, or see ** http://www.troll.no/qpl/ for QPL licensing information. ** *****************************************************************************/ #ifndef QWIDGET_H #define QWIDGET_H #ifndef QT_H #include "qwindowdefs.h" #include "qobject.h" #include "qpaintdevice.h" #include "qpalette.h" #include "qcursor.h" #include "qfont.h" #include "qfontmetrics.h" #include "qfontinfo.h" #include "qstyle.h" #include "qsizepolicy.h" #endif // QT_H class QLayout; struct QWExtra; class QFocusData; class QStyle; class Q_EXPORT QWidget : public QObject, public QPaintDevice { Q_OBJECT public: QWidget( QWidget *parent=0, const char *name=0, WFlags f=0 ); ~QWidget(); WId winId() const; void setName( const char *name ); // GUI style setting QStyle &style() const; void setStyle( QStyle * ); // Widget types and states bool isTopLevel() const; bool isModal() const; bool isPopup() const; bool isDesktop() const; bool isEnabled() const; bool isEnabledTo(QWidget*) const; bool isEnabledToTLW() const; public slots: virtual void setEnabled( bool ); // Widget coordinates public: QRect frameGeometry() const; const QRect &geometry() const; int x() const; int y() const; QPoint pos() const; QSize frameSize() const; QSize size() const; int width() const; int height() const; QRect rect() const; QRect childrenRect() const; QRegion childrenRegion() const; QSize minimumSize() const; QSize maximumSize() const; int minimumWidth() const; int minimumHeight() const; int maximumWidth() const; int maximumHeight() const; void setMinimumSize( const QSize & ); virtual void setMinimumSize( int minw, int minh ); void setMaximumSize( const QSize & ); virtual void setMaximumSize( int maxw, int maxh ); void setMinimumWidth( int minw ); void setMinimumHeight( int minh ); void setMaximumWidth( int maxw ); void setMaximumHeight( int maxh ); QSize sizeIncrement() const; void setSizeIncrement( const QSize & ); virtual void setSizeIncrement( int w, int h ); QSize baseSize() const; void setBaseSize( const QSize & ); void setBaseSize( int basew, int baseh ); void setFixedSize( const QSize & ); void setFixedSize( int w, int h ); void setFixedWidth( int w ); void setFixedHeight( int h ); // Widget coordinate mapping QPoint mapToGlobal( const QPoint & ) const; QPoint mapFromGlobal( const QPoint & ) const; QPoint mapToParent( const QPoint & ) const; QPoint mapFromParent( const QPoint & ) const; QWidget *topLevelWidget() const; // Widget attribute functions enum BackgroundMode { FixedColor, FixedPixmap, NoBackground, PaletteForeground, PaletteButton, PaletteLight, PaletteMidlight, PaletteDark, PaletteMid, PaletteText, PaletteBrightText, PaletteBase, PaletteBackground, PaletteShadow, PaletteHighlight, PaletteHighlightedText }; BackgroundMode backgroundMode() const; virtual void setBackgroundMode( BackgroundMode ); const QColor & backgroundColor() const; const QColor & foregroundColor() const; virtual void setBackgroundColor( const QColor & ); const QPixmap * backgroundPixmap() const; virtual void setBackgroundPixmap( const QPixmap & ); const QColorGroup & colorGroup() const; const QPalette & palette() const; virtual void setPalette( const QPalette & ); void setPalette( const QPalette &, bool fixed ); QFont font() const; virtual void setFont( const QFont & ); void setFont( const QFont &, bool fixed ); QFontMetrics fontMetrics() const; QFontInfo fontInfo() const; enum PropagationMode { NoChildren, AllChildren, SameFont, SamePalette = SameFont }; PropagationMode fontPropagation() const; virtual void setFontPropagation( PropagationMode ); PropagationMode palettePropagation() const; virtual void setPalettePropagation( PropagationMode ); const QCursor &cursor() const; virtual void setCursor( const QCursor & ); virtual void unsetCursor(); QString caption() const; const QPixmap *icon() const; QString iconText() const; bool hasMouseTracking() const; virtual void setMask( const QBitmap & ); virtual void setMask( const QRegion & ); void clearMask(); public slots: virtual void setCaption( const QString &); virtual void setIcon( const QPixmap & ); virtual void setIconText( const QString &); virtual void setMouseTracking( bool enable ); // Keyboard input focus functions virtual void setFocus(); void clearFocus(); public: enum FocusPolicy { NoFocus = 0, TabFocus = 0x1, ClickFocus = 0x2, StrongFocus = 0x3, WheelFocus = 0x7 }; bool isActiveWindow() const; virtual void setActiveWindow(); bool isFocusEnabled() const; FocusPolicy focusPolicy() const; virtual void setFocusPolicy( FocusPolicy ); bool hasFocus() const; static void setTabOrder( QWidget *, QWidget * ); virtual void setFocusProxy( QWidget * ); QWidget * focusProxy() const; // Grab functions void grabMouse(); void grabMouse( const QCursor & ); void releaseMouse(); void grabKeyboard(); void releaseKeyboard(); static QWidget * mouseGrabber(); static QWidget * keyboardGrabber(); // Update/refresh functions bool isUpdatesEnabled() const; public slots: virtual void setUpdatesEnabled( bool enable ); void update(); void update( int x, int y, int w, int h ); void update( const QRect& ); void repaint(); void repaint( bool erase ); void repaint( int x, int y, int w, int h, bool erase=TRUE ); void repaint( const QRect &, bool erase=TRUE ); void repaint( const QRegion &, bool erase=TRUE ); // Widget management functions virtual void show(); virtual void hide(); #ifndef QT_NO_COMPAT void iconify() { showMinimized(); } #endif virtual void showMinimized(); virtual void showMaximized(); virtual void showNormal(); virtual void polish(); bool close(); void raise(); void lower(); virtual void move( int x, int y ); void move( const QPoint & ); virtual void resize( int w, int h ); void resize( const QSize & ); virtual void setGeometry( int x, int y, int w, int h ); virtual void setGeometry( const QRect & ); public: virtual bool close( bool forceKill ); bool isVisible() const; bool isVisibleTo(QWidget*) const; bool isVisibleToTLW() const; QRect visibleRect() const; bool isMinimized() const; virtual QSize sizeHint() const; virtual QSize minimumSizeHint() const; virtual QSizePolicy sizePolicy() const; virtual int heightForWidth(int) const; virtual void adjustSize(); QLayout * layout() const { return lay_out; } void updateGeometry(); virtual void reparent( QWidget *parent, WFlags, const QPoint &, bool showIt=FALSE ); #ifndef QT_NO_COMPAT void recreate( QWidget *parent, WFlags f, const QPoint & p, bool showIt=FALSE ) { reparent(parent,f,p,showIt); } #endif void erase(); void erase( int x, int y, int w, int h ); void erase( const QRect & ); void erase( const QRegion & ); void scroll( int dx, int dy ); void scroll( int dx, int dy, const QRect& ); void drawText( int x, int y, const QString &); void drawText( const QPoint &, const QString &); // Misc. functions QWidget * focusWidget() const; // drag and drop bool acceptDrops() const; virtual void setAcceptDrops( bool on ); virtual void setAutoMask(bool); bool autoMask() const; // whats this help virtual bool customWhatsThis() const; public: QWidget * parentWidget() const; bool testWState( uint n ) const; bool testWFlags( WFlags n ) const; static QWidget * find( WId ); static QWidgetMapper *wmapper(); // Event handlers protected: bool event( QEvent * ); virtual void mousePressEvent( QMouseEvent * ); virtual void mouseReleaseEvent( QMouseEvent * ); virtual void mouseDoubleClickEvent( QMouseEvent * ); virtual void mouseMoveEvent( QMouseEvent * ); virtual void wheelEvent( QWheelEvent * ); virtual void keyPressEvent( QKeyEvent * ); virtual void keyReleaseEvent( QKeyEvent * ); virtual void focusInEvent( QFocusEvent * ); virtual void focusOutEvent( QFocusEvent * ); virtual void enterEvent( QEvent * ); virtual void leaveEvent( QEvent * ); virtual void paintEvent( QPaintEvent * ); virtual void moveEvent( QMoveEvent * ); virtual void resizeEvent( QResizeEvent * ); virtual void closeEvent( QCloseEvent * ); virtual void dragEnterEvent( QDragEnterEvent * ); virtual void dragMoveEvent( QDragMoveEvent * ); virtual void dragLeaveEvent( QDragLeaveEvent * ); virtual void dropEvent( QDropEvent * ); virtual void showEvent( QShowEvent * ); virtual void hideEvent( QHideEvent * ); virtual void customEvent( QCustomEvent * ); #if defined(_WS_MAC_) virtual bool macEvent( MSG * ); // Macintosh event #elif defined(_WS_WIN_) virtual bool winEvent( MSG * ); // Windows event #elif defined(_WS_X11_) virtual bool x11Event( XEvent * ); // X11 event #endif virtual void updateMask(); // Misc. protected functions protected: virtual void styleChange( QStyle& ); virtual void enabledChange( bool ); virtual void backgroundColorChange( const QColor & ); virtual void backgroundPixmapChange( const QPixmap & ); virtual void paletteChange( const QPalette & ); virtual void fontChange( const QFont & ); int metric( int ) const; virtual void create( WId = 0, bool initializeWindow = TRUE, bool destroyOldWindow = TRUE ); virtual void destroy( bool destroyWindow = TRUE, bool destroySubWindows = TRUE ); uint getWState() const; virtual void setWState( uint ); void clearWState( uint n ); WFlags getWFlags() const; virtual void setWFlags( WFlags ); void clearWFlags( WFlags n ); virtual void setFRect( const QRect & ); virtual void setCRect( const QRect & ); virtual bool focusNextPrevChild( bool next ); QWExtra *extraData(); QFocusData *focusData(); virtual void setKeyCompression(bool); virtual void setMicroFocusHint(int x, int y, int w, int h, bool text=TRUE); private slots: void focusProxyDestroyed(); private: void setFontSys(); void setLayout( QLayout *l ); void setWinId( WId ); void showWindow(); void hideWindow(); void createTLExtra(); void createExtra(); void deleteExtra(); void createSysExtra(); void deleteSysExtra(); void createTLSysExtra(); void deleteTLSysExtra(); void deactivateWidgetCleanup(); void internalSetGeometry( int, int, int, int, bool ); void reparentFocusWidgets( QWidget *parent ); QFocusData *focusData( bool create ); void setBackgroundFromMode(); void setBackgroundColorDirect( const QColor & ); void setBackgroundPixmapDirect( const QPixmap & ); void setBackgroundModeDirect( BackgroundMode ); void setBackgroundEmpty(); WId winid; uint widget_state; uint widget_flags; uint propagate_font : 2; uint propagate_palette : 2; uint focus_policy : 4; QPoint fpos; QRect crect; QColor bg_col; QPalette pal; QFont fnt; QLayout *lay_out; QWExtra *extra; static void createMapper(); static void destroyMapper(); static QWidgetList *wList(); static QWidgetList *tlwList(); static QWidgetMapper *mapper; friend class QApplication; friend class QBaseApplication; friend class QPainter; friend class QFontMetrics; friend class QFontInfo; friend class QETWidget; #if 1 //was #ifdef TOTAL_LOSER_COMPILER but they all seem to be friend class QLayout; #else friend void QLayout::setWidgetLayout( QWidget *, QLayout * ); #endif private: // Disabled copy constructor and operator= #if defined(Q_DISABLE_COPY) QWidget( const QWidget & ); QWidget &operator=( const QWidget & ); #endif }; inline bool QWidget::testWState( uint f ) const { return (widget_state & f) != 0; } inline bool QWidget::testWFlags( WFlags f ) const { return (widget_flags & f) != 0; } inline WId QWidget::winId() const { return winid; } inline bool QWidget::isTopLevel() const { return testWFlags(WType_TopLevel); } inline bool QWidget::isModal() const { return testWFlags(WType_Modal); } inline bool QWidget::isPopup() const { return testWFlags(WType_Popup); } inline bool QWidget::isDesktop() const { return testWFlags(WType_Desktop); } inline bool QWidget::isEnabled() const { return !testWState(WState_Disabled); } inline const QRect &QWidget::geometry() const { return crect; } inline int QWidget::x() const { return fpos.x(); } inline int QWidget::y() const { return fpos.y(); } inline QPoint QWidget::pos() const { return fpos; } inline QSize QWidget::size() const { return crect.size(); } inline int QWidget::width() const { return crect.width(); } inline int QWidget::height() const { return crect.height(); } inline QRect QWidget::rect() const { return QRect(0,0,crect.width(),crect.height()); } inline int QWidget::minimumWidth() const { return minimumSize().width(); } inline int QWidget::minimumHeight() const { return minimumSize().height(); } inline int QWidget::maximumWidth() const { return maximumSize().width(); } inline int QWidget::maximumHeight() const { return maximumSize().height(); } inline void QWidget::setMinimumSize( const QSize &s ) { setMinimumSize(s.width(),s.height()); } inline void QWidget::setMaximumSize( const QSize &s ) { setMaximumSize(s.width(),s.height()); } inline void QWidget::setSizeIncrement( const QSize &s ) { setSizeIncrement(s.width(),s.height()); } inline void QWidget::setBaseSize( const QSize &s ) { setBaseSize(s.width(),s.height()); } inline const QColor &QWidget::backgroundColor() const { return bg_col; } inline const QPalette &QWidget::palette() const { return pal; } inline QFont QWidget::font() const { return fnt; } inline QFontMetrics QWidget::fontMetrics() const { return QFontMetrics(font()); } inline QFontInfo QWidget::fontInfo() const { return QFontInfo(font()); } inline bool QWidget::hasMouseTracking() const { return testWState(WState_MouseTracking); } inline bool QWidget::isFocusEnabled() const { return (FocusPolicy)focus_policy != NoFocus; } inline QWidget::FocusPolicy QWidget::focusPolicy() const { return (FocusPolicy)focus_policy; } inline bool QWidget::isUpdatesEnabled() const { return !testWState(WState_BlockUpdates); } inline void QWidget::update( const QRect &r ) { update( r.x(), r.y(), r.width(), r.height() ); } inline void QWidget::repaint() { repaint( 0, 0, crect.width(), crect.height(), TRUE ); } inline void QWidget::repaint( bool erase ) { repaint( 0, 0, crect.width(), crect.height(), erase ); } inline void QWidget::repaint( const QRect &r, bool erase ) { repaint( r.x(), r.y(), r.width(), r.height(), erase ); } inline void QWidget::erase() { erase( 0, 0, crect.width(), crect.height() ); } inline void QWidget::erase( const QRect &r ) { erase( r.x(), r.y(), r.width(), r.height() ); } inline bool QWidget::close() { return close( FALSE ); } inline bool QWidget::isVisible() const { return testWState(WState_Visible); } inline void QWidget::move( const QPoint &p ) { move( p.x(), p.y() ); } inline void QWidget::resize( const QSize &s ) { resize( s.width(), s.height()); } inline void QWidget::setGeometry( const QRect &r ) { setGeometry( r.left(), r.top(), r.width(), r.height() ); } inline void QWidget::drawText( const QPoint &p, const QString &s ) { drawText( p.x(), p.y(), s ); } inline QWidget *QWidget::parentWidget() const { return (QWidget *)QObject::parent(); } inline QWidgetMapper *QWidget::wmapper() { return mapper; } inline uint QWidget::getWState() const { return widget_state; } inline void QWidget::setWState( uint f ) { widget_state |= f; } inline void QWidget::clearWState( uint f ) { widget_state &= ~f; } inline Qt::WFlags QWidget::getWFlags() const { return widget_flags; } inline void QWidget::setWFlags( WFlags f ) { widget_flags |= f; } inline void QWidget::clearWFlags( WFlags f ) { widget_flags &= ~f; } // Extra QWidget data // - to minimize memory usage for members that are seldom used. // - top-level widgets have extra extra data to reduce cost further class QFocusData; #if defined(_WS_WIN_) class QOleDropTarget; #endif struct QTLWExtra { QString caption; // widget caption QString iconText; // widget icon text QPixmap *icon; // widget icon QFocusData *focusData; // focus data (for TLW) QSize fsize; // rect of frame short incw, inch; // size increments uint iconic: 1; // iconified [cur. win32 only] short basew, baseh; // base sizes #if defined(_WS_X11_) QRect normalGeometry; // used by showMin/maximized WId parentWinId; // parent window Id (valid after reparenting) uint embedded : 1; // window is embedded in another Qt application uint wmstate: 2; // wmstate trigger void *xic; // XIM Input Context #endif }; #define QWIDGETSIZE_MAX 32767 struct QWExtra { Q_INT16 minw, minh; // minimum size Q_INT16 maxw, maxh; // maximum size QPixmap *bg_pix; // background pixmap QWidget *focus_proxy; QCursor *curs; QTLWExtra *topextra; // only useful for TLWs #if defined(_WS_WIN_) HICON winIcon; // internal Windows icon QOleDropTarget *dropTarget; // drop target #endif #if defined(_WS_X11_) WId xDndProxy; // XDND forwarding to embedded windows #endif char bg_mode; // background mode QStyle* style; }; #endif // QWIDGET_H
Copyright © 1999 Troll Tech | Trademarks | Qt version 2.0.2
|