1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the Qt Designer of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21 ** included in the packaging of this file. Please review the following
22 ** information to ensure the GNU General Public License requirements will
23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24 **
25 ** $QT_END_LICENSE$
26 **
27 ****************************************************************************/
28 
29 //
30 //  W A R N I N G
31 //  -------------
32 //
33 // This file is not part of the Qt API.  It exists for the convenience
34 // of Qt Designer.  This header
35 // file may change from version to version without notice, or even be removed.
36 //
37 // We mean it.
38 //
39 
40 #ifndef LAYOUTINFO_H
41 #define LAYOUTINFO_H
42 
43 #include "shared_global_p.h"
44 
45 QT_BEGIN_NAMESPACE
46 
47 class QWidget;
48 class QLayout;
49 class QLayoutItem;
50 class QDesignerFormEditorInterface;
51 class QFormLayout;
52 class QRect;
53 class QString;
54 
55 namespace qdesigner_internal {
56 
57 class QDESIGNER_SHARED_EXPORT LayoutInfo
58 {
59 public:
60     enum Type
61     {
62         NoLayout,
63         HSplitter,
64         VSplitter,
65         HBox,
66         VBox,
67         Grid,
68         Form,
69         UnknownLayout // QDockWindow inside QMainWindow is inside QMainWindowLayout - it doesn't mean there is no layout
70     };
71 
72     static void deleteLayout(const QDesignerFormEditorInterface *core, QWidget *widget);
73 
74     // Examines the immediate layout of the widget.
75     static Type layoutType(const QDesignerFormEditorInterface *core, const QWidget *w);
76     // Examines the managed layout of the widget
77     static Type managedLayoutType(const QDesignerFormEditorInterface *core, const QWidget *w, QLayout **layout = nullptr);
78     static Type layoutType(const QDesignerFormEditorInterface *core, const QLayout *layout);
79     static Type layoutType(const QString &typeName);
80     static QString layoutName(Type t);
81 
82     static QWidget *layoutParent(const QDesignerFormEditorInterface *core, QLayout *layout);
83 
84     static Type laidoutWidgetType(const QDesignerFormEditorInterface *core, QWidget *widget, bool *isManaged = nullptr, QLayout **layout = nullptr);
isWidgetLaidout(const QDesignerFormEditorInterface * core,QWidget * widget)85     static bool inline isWidgetLaidout(const QDesignerFormEditorInterface *core, QWidget *widget) { return laidoutWidgetType(core, widget) != NoLayout; }
86 
87     static QLayout *managedLayout(const QDesignerFormEditorInterface *core, const QWidget *widget);
88     static QLayout *managedLayout(const QDesignerFormEditorInterface *core, QLayout *layout);
89     static QLayout *internalLayout(const QWidget *widget);
90 
91     // Is it a a dummy grid placeholder created by Designer?
92     static bool isEmptyItem(QLayoutItem *item);
93 };
94 
95 QDESIGNER_SHARED_EXPORT void getFormLayoutItemPosition(const QFormLayout *formLayout, int index, int *rowPtr, int *columnPtr = nullptr, int *rowspanPtr = nullptr, int *colspanPtr = nullptr);
96 QDESIGNER_SHARED_EXPORT void formLayoutAddWidget(QFormLayout *formLayout, QWidget *w, const QRect &r, bool insert);
97 } // namespace qdesigner_internal
98 
99 QT_END_NAMESPACE
100 
101 #endif // LAYOUTINFO_H
102