summaryrefslogtreecommitdiffstats
path: root/src/declarative/fx/qfxcontentwrapper.cpp
blob: 80710cafbe334a6c38620498d25a61b42d58ae76 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/****************************************************************************
**
** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
** Contact: Qt Software Information (qt-info@nokia.com)
**
** This file is part of the QtDeclarative module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** No Commercial Usage
** This file contains pre-release code and may not be distributed.
** You may use this file in accordance with the terms and conditions
** contained in the either Technology Preview License Agreement or the
** Beta Release License Agreement.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 2.1 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL included in the
** packaging of this file.  Please review the following information to
** ensure the GNU Lesser General Public License version 2.1 requirements
** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
**
** In addition, as a special exception, Nokia gives you certain
** additional rights. These rights are described in the Nokia Qt LGPL
** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this
** package.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 3.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 the GNU General Public License version 3.0 requirements will be
** met: http://www.gnu.org/copyleft/gpl.html.
**
** If you are unsure which license is appropriate for your use, please
** contact the sales department at qt-sales@nokia.com.
** $QT_END_LICENSE$
**
****************************************************************************/

#include "qfxcontentwrapper.h"
#include "qfxcontentwrapper_p.h"


QT_BEGIN_NAMESPACE
QML_DEFINE_TYPE(QFxContentWrapper,ContentWrapper);

QFxContentWrapper::QFxContentWrapper(QFxItem *parent)
: QFxItem(*(new QFxContentWrapperPrivate), parent)
{
}

QFxContentWrapper::QFxContentWrapper(QFxContentWrapperPrivate &dd, QFxItem *parent)
  : QFxItem(dd, parent)
{
}

QList<QFxItem *> *QFxContentWrapper::content()
{
    Q_D(QFxContentWrapper);
    return &(d->_content);
}

void QFxContentWrapper::componentComplete()
{
    QFxItem::componentComplete();
    if (content()->size() < 1)
        return;

    QList<QSimpleCanvasItem *> nodes;
    nodes.append(this);
    QFxItem *target = findContent(nodes);
    if (!target)
        return;
    target = target->itemParent();

    QList<QFxItem*> myContent(*content());
    for(int ii = 0; ii < myContent.count();  ++ii) 
        myContent.at(ii)->setParent(target);
}

QFxItem *QFxContentWrapper::findContent(QList<QSimpleCanvasItem *> &nodes)
{
    QSimpleCanvasItem *item = nodes.takeFirst();
    if (qobject_cast<QFxContent*>(item))
        return static_cast<QFxItem *>(item);
    nodes << item->children();
    if (nodes.isEmpty())
        return 0;
    return findContent(nodes);
}

QML_DEFINE_TYPE(QFxContent,Content);

/*!
    \qmlclass Content QFxContent
    \ingroup utility
    \brief Content is used as a placeholder for the content of a component.
    \inherits Item

    In some cases the content of a component is not defined by the component itself.
    For example, the items placed in a group box need to be specified external to
    the where the group box component itself is defined.
    In cases like these Content can be used to specify at what location in the component
    the content should be placed. It is used in conjuntion with the content property of 
    the component instance: any items listed as content will be placed in the location 
    specified by Content.

    Example:
    \code
    <!--GroupBox component definition-->
    <Rect width="{parent.width}" color="white" pen.width="2" pen.color="#adaeb0" radius="10" clip="false" height="{contents.height}">
        <VerticalLayout id="layout" width="{parent.width}">
            <Content/>
        </VerticalLayout>
    </Rect>

    <!--component use-->
    <GroupBox>
        <content>
            <Text text="First Item"/>
            ...
        </content>
    </GroupBox>
    \endcode
*/

QT_END_NAMESPACE