/**************************************************************************** ** ** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved. ** ** This file is part of the QtGui module of the Qt Toolkit. ** ** This file may be used under the terms of the GNU General Public ** License version 2.0 as published by the Free Software Foundation ** and appearing in the file LICENSE.GPL included in the packaging of ** this file. 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. ** ** In addition, as a special exception, Trolltech gives you certain ** additional rights. These rights are described in the Trolltech GPL ** Exception version 1.0, which can be found at ** http://www.trolltech.com/products/qt/gplexception/ and in the file ** GPL_EXCEPTION.txt in this package. ** ** In addition, as a special exception, Trolltech, as the sole copyright ** holder for Qt Designer, grants users of the Qt/Eclipse Integration ** plug-in the right for the Qt/Eclipse Integration to link to ** functionality provided by Qt Designer and its related libraries. ** ** Trolltech reserves all rights not expressly granted herein. ** ** Trolltech ASA (c) 2007 ** ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. ** ****************************************************************************/ #ifndef QDOCKAREALAYOUT_P_H #define QDOCKAREALAYOUT_P_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include "QtCore/qlist.h" #include "QtCore/qrect.h" #include "QtCore/qpair.h" #include "QtCore/qlist.h" #include "QtGui/qlayout.h" #ifndef QT_NO_DOCKWIDGET class QLayoutItem; class QWidget; class QLayoutItem; class QDockAreaLayoutInfo; class QDockWidget; class QMainWindow; class QWidgetAnimator; class QMainWindowLayout; struct QLayoutStruct; class QTabBar; struct QDockAreaLayoutItem { QDockAreaLayoutItem(QLayoutItem *_widgetItem = 0); QDockAreaLayoutItem(QDockAreaLayoutInfo *_subinfo); QDockAreaLayoutItem(const QDockAreaLayoutItem &other); ~QDockAreaLayoutItem(); QDockAreaLayoutItem &operator = (const QDockAreaLayoutItem &other); bool skip() const; QSize minimumSize() const; QSize maximumSize() const; QSize sizeHint() const; bool expansive(Qt::Orientation o) const; QLayoutItem *widgetItem; QDockAreaLayoutInfo *subinfo; int pos; int size; bool gap; bool keep_size; }; class Q_AUTOTEST_EXPORT QDockAreaLayoutInfo { public: QDockAreaLayoutInfo(); QDockAreaLayoutInfo(int _sep, QInternal::DockPosition _dockPos, Qt::Orientation _o, int tbhape, QMainWindow *window); QSize minimumSize() const; QSize maximumSize() const; QSize sizeHint() const; QSize size() const; bool insertGap(QList path, QLayoutItem *dockWidgetItem); QLayoutItem *plug(QList path); QLayoutItem *unplug(QList path); enum TabMode { NoTabs, AllowTabs, ForceTabs }; QList gapIndex(const QPoint &pos, bool nestingEnabled, TabMode tabMode) const; void remove(QList path); void unnest(int index); void split(int index, Qt::Orientation orientation, QLayoutItem *dockWidgetItem); void tab(int index, QLayoutItem *dockWidgetItem); QDockAreaLayoutItem &item(QList path); QDockAreaLayoutInfo *info(QList path); QDockAreaLayoutInfo *info(QWidget *widget); enum { // sentinel values used to validate state data SequenceMarker = 0xfc, TabMarker = 0xfa, WidgetMarker = 0xfb }; void saveState(QDataStream &stream) const; bool restoreState(QDataStream &stream, QList &widgets); void fitItems(); bool expansive(Qt::Orientation o) const; int changeSize(int index, int size, bool below); QRect itemRect(int index) const; QRect itemRect(QList path) const; QRect separatorRect(int index) const; QRect separatorRect(QList path) const; void clear(); bool isEmpty() const; QList findSeparator(const QPoint &pos) const; int next(int idx) const; int prev(int idx) const; QList indexOf(QWidget *widget) const; void apply(bool animate); void paintSeparators(QPainter *p, QWidget *widget, const QRegion &clip, const QPoint &mouse) const; QRegion separatorRegion() const; int separatorMove(int index, int delta, QVector *cache); QLayoutItem *itemAt(int *x, int index) const; QLayoutItem *takeAt(int *x, int index); void deleteAllLayoutItems(); QMainWindowLayout *mainWindowLayout() const; int sep; QInternal::DockPosition dockPos; Qt::Orientation o; QRect rect; QMainWindow *mainWindow; QList item_list; #ifndef QT_NO_TABBAR quintptr currentTabId() const; void setCurrentTab(QWidget *widget); void setCurrentTabId(quintptr id); QRect tabContentRect() const; bool tabbed; QTabBar *tabBar; QSize tabBarMin, tabBarHint; int tabBarShape; bool tabBarVisible; void updateTabBar() const; void setTabBarShape(int shape); QSize tabBarMinimumSize() const; QSize tabBarSizeHint() const; QSet usedTabBars() const; #endif // QT_NO_TABBAR }; class Q_AUTOTEST_EXPORT QDockAreaLayout { public: enum { EmptyDropAreaSize = 80 }; // when a dock area is empty, how "wide" is it? Qt::DockWidgetArea corners[4]; // use a Qt::Corner for indexing QRect rect; QLayoutItem *centralWidgetItem; QMainWindow *mainWindow; QRect centralWidgetRect; QDockAreaLayout(QMainWindow *win); QDockAreaLayoutInfo docks[4]; int sep; // separator extent bool isValid() const; enum { DockWidgetStateMarker = 0xfd }; void saveState(QDataStream &stream) const; bool restoreState(QDataStream &stream, const QList &widgets); QList indexOf(QWidget *dockWidget) const; QList gapIndex(const QPoint &pos) const; QList findSeparator(const QPoint &pos) const; QDockAreaLayoutItem &item(QList path); QDockAreaLayoutInfo *info(QList path); const QDockAreaLayoutInfo *info(QList path) const; QDockAreaLayoutInfo *info(QWidget *widget); QRect itemRect(QList path) const; QRect separatorRect(int index) const; QRect separatorRect(QList path) const; bool insertGap(QList path, QLayoutItem *dockWidgetItem); QLayoutItem *plug(QList path); QLayoutItem *unplug(QList path); void remove(QList path); void fitLayout(); void clear(); QSize sizeHint() const; QSize minimumSize() const; void addDockWidget(QInternal::DockPosition pos, QDockWidget *dockWidget, Qt::Orientation orientation); void splitDockWidget(QDockWidget *after, QDockWidget *dockWidget, Qt::Orientation orientation); void tabifyDockWidget(QDockWidget *first, QDockWidget *second); void apply(bool animate); void paintSeparators(QPainter *p, QWidget *widget, const QRegion &clip, const QPoint &mouse) const; QRegion separatorRegion() const; int separatorMove(QList separator, const QPoint &origin, const QPoint &dest, QVector *cache); QLayoutItem *itemAt(int *x, int index) const; QLayoutItem *takeAt(int *x, int index); void deleteAllLayoutItems(); void getGrid(QVector *ver_struct_list, QVector *hor_struct_list); void setGrid(QVector *ver_struct_list, QVector *hor_struct_list); QRect gapRect(QList path) const; void keepSize(QDockWidget *w); QSet usedTabBars() const; }; #endif // QT_NO_QDOCKWIDGET #endif // QDOCKAREALAYOUT_P_H