/****************************************************************************
**
** Copyright (C) 2017 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt Quick Templates 2 module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL3$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later 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 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#include <QtQml/qqmlextensionplugin.h>
#include <QtQml/private/qqmlglobal_p.h>

#include <QtQuickTemplates2/private/qquickabstractbutton_p.h>
#include <QtQuickTemplates2/private/qquickaction_p.h>
#include <QtQuickTemplates2/private/qquickactiongroup_p.h>
#include <QtQuickTemplates2/private/qquickapplicationwindow_p.h>
#include <QtQuickTemplates2/private/qquickbusyindicator_p.h>
#include <QtQuickTemplates2/private/qquickbutton_p.h>
#include <QtQuickTemplates2/private/qquickbuttongroup_p.h>
#include <QtQuickTemplates2/private/qquickcheckbox_p.h>
#include <QtQuickTemplates2/private/qquickcheckdelegate_p.h>
#include <QtQuickTemplates2/private/qquickcombobox_p.h>
#include <QtQuickTemplates2/private/qquickcontrol_p.h>
#include <QtQuickTemplates2/private/qquickcontainer_p.h>
#include <QtQuickTemplates2/private/qquickdelaybutton_p.h>
#include <QtQuickTemplates2/private/qquickdial_p.h>
#include <QtQuickTemplates2/private/qquickdialog_p.h>
#include <QtQuickTemplates2/private/qquickdialogbuttonbox_p.h>
#include <QtQuickTemplates2/private/qquickdrawer_p.h>
#include <QtQuickTemplates2/private/qquickframe_p.h>
#include <QtQuickTemplates2/private/qquickgroupbox_p.h>
#include <QtQuickTemplates2/private/qquickheaderview_p.h>
#include <QtQuickTemplates2/private/qquickicon_p.h>
#include <QtQuickTemplates2/private/qquickitemdelegate_p.h>
#include <QtQuickTemplates2/private/qquicklabel_p.h>
#include <QtQuickTemplates2/private/qquickmenu_p.h>
#include <QtQuickTemplates2/private/qquickmenubar_p.h>
#include <QtQuickTemplates2/private/qquickmenubaritem_p.h>
#include <QtQuickTemplates2/private/qquickmenuitem_p.h>
#include <QtQuickTemplates2/private/qquickmenuseparator_p.h>
#include <QtQuickTemplates2/private/qquickoverlay_p.h>
#include <QtQuickTemplates2/private/qquickpage_p.h>
#include <QtQuickTemplates2/private/qquickpageindicator_p.h>
#include <QtQuickTemplates2/private/qquickpaletteprovider_p.h>
#include <QtQuickTemplates2/private/qquickpane_p.h>
#include <QtQuickTemplates2/private/qquickpopup_p.h>
#include <QtQuickTemplates2/private/qquickpopupanchors_p.h>
#include <QtQuickTemplates2/private/qquickprogressbar_p.h>
#include <QtQuickTemplates2/private/qquickradiobutton_p.h>
#include <QtQuickTemplates2/private/qquickradiodelegate_p.h>
#include <QtQuickTemplates2/private/qquickrangeslider_p.h>
#include <QtQuickTemplates2/private/qquickroundbutton_p.h>
#include <QtQuickTemplates2/private/qquickscrollbar_p.h>
#include <QtQuickTemplates2/private/qquickscrollindicator_p.h>
#include <QtQuickTemplates2/private/qquickscrollview_p.h>
#include <QtQuickTemplates2/private/qquickshortcutcontext_p_p.h>
#include <QtQuickTemplates2/private/qquickslider_p.h>
#include <QtQuickTemplates2/private/qquickspinbox_p.h>
#include <QtQuickTemplates2/private/qquicksplitview_p.h>
#include <QtQuickTemplates2/private/qquickstackview_p.h>
#include <QtQuickTemplates2/private/qquickswipe_p.h>
#include <QtQuickTemplates2/private/qquickswipedelegate_p.h>
#include <QtQuickTemplates2/private/qquickswipeview_p.h>
#include <QtQuickTemplates2/private/qquickswitch_p.h>
#include <QtQuickTemplates2/private/qquickswitchdelegate_p.h>
#include <QtQuickTemplates2/private/qquicktabbar_p.h>
#include <QtQuickTemplates2/private/qquicktabbutton_p.h>
#include <QtQuickTemplates2/private/qquicktextarea_p.h>
#include <QtQuickTemplates2/private/qquicktextfield_p.h>
#include <QtQuickTemplates2/private/qquicktoolbar_p.h>
#include <QtQuickTemplates2/private/qquicktoolbutton_p.h>
#include <QtQuickTemplates2/private/qquicktoolseparator_p.h>
#include <QtQuickTemplates2/private/qquicktooltip_p.h>
#if QT_CONFIG(quick_listview) && QT_CONFIG(quick_pathview)
#include <QtQuickTemplates2/private/qquicktumbler_p.h>
#endif

#if QT_CONFIG(shortcut)
// qtdeclarative/src/quick/util/qquickshortcut.cpp
typedef bool (*ShortcutContextMatcher)(QObject *, Qt::ShortcutContext);
extern ShortcutContextMatcher qt_quick_shortcut_context_matcher();
extern void qt_quick_set_shortcut_context_matcher(ShortcutContextMatcher matcher);
#endif

QT_BEGIN_NAMESPACE

static void initProviders()
{
    QQuickPaletteProvider::init();
}

static void cleanupProviders()
{
    QQuickPaletteProvider::cleanup();
}

class QtQuickTemplates2Plugin: public QQmlExtensionPlugin
{
    Q_OBJECT
    Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid)

public:
    QtQuickTemplates2Plugin(QObject *parent = nullptr);
    ~QtQuickTemplates2Plugin();

    void registerTypes(const char *uri) override;

private:
    bool registered;
#if QT_CONFIG(shortcut)
    ShortcutContextMatcher originalContextMatcher;
#endif
};

QtQuickTemplates2Plugin::QtQuickTemplates2Plugin(QObject *parent)
    : QQmlExtensionPlugin(parent), registered(false)
{
#if QT_CONFIG(shortcut)
    originalContextMatcher = qt_quick_shortcut_context_matcher();
    qt_quick_set_shortcut_context_matcher(QQuickShortcutContext::matcher);
#endif
}

QtQuickTemplates2Plugin::~QtQuickTemplates2Plugin()
{
    if (registered)
        cleanupProviders();

#if QT_CONFIG(shortcut)
    qt_quick_set_shortcut_context_matcher(originalContextMatcher);
#endif
}

void QtQuickTemplates2Plugin::registerTypes(const char *uri)
{
    registered = true;
    initProviders();

    // Register the latest version, even if there are no new types or new revisions for existing types yet.
    // Before Qt 5.12, we would do the following:
    //
    // qmlRegisterModule(uri, 2, QT_VERSION_MINOR - 7); // Qt 5.7->2.0, 5.8->2.1, 5.9->2.2...
    //
    // However, we want to align with the rest of Qt Quick which uses Qt's minor version.
    qmlRegisterModule(uri, 2, QT_VERSION_MINOR);

    // QtQuick.Templates 2.0 (originally introduced in Qt 5.7)
    qmlRegisterType<QQuickAbstractButton>(uri, 2, 0, "AbstractButton");
    qmlRegisterType<QQuickApplicationWindow>(uri, 2, 0, "ApplicationWindow");
    qmlRegisterAnonymousType<QQuickApplicationWindowAttached>(uri, 2);
    qmlRegisterType<QQuickBusyIndicator>(uri, 2, 0, "BusyIndicator");
    qmlRegisterType<QQuickButton>(uri, 2, 0, "Button");
    qmlRegisterType<QQuickButtonGroup>(uri, 2, 0, "ButtonGroup");
    qmlRegisterAnonymousType<QQuickButtonGroupAttached>(uri, 2);
    qmlRegisterType<QQuickCheckBox>(uri, 2, 0, "CheckBox");
    qmlRegisterType<QQuickCheckDelegate>(uri, 2, 0, "CheckDelegate");
    qmlRegisterType<QQuickComboBox>(uri, 2, 0, "ComboBox");
    qmlRegisterType<QQuickContainer>(uri, 2, 0, "Container");
    qmlRegisterType<QQuickControl>(uri, 2, 0, "Control");
    qmlRegisterType<QQuickDial>(uri, 2, 0, "Dial");
    qmlRegisterType<QQuickDrawer>(uri, 2, 0, "Drawer");
    qmlRegisterType<QQuickFrame>(uri, 2, 0, "Frame");
    qmlRegisterType<QQuickGroupBox>(uri, 2, 0, "GroupBox");
    qmlRegisterType<QQuickItemDelegate>(uri, 2, 0, "ItemDelegate");
    qmlRegisterType<QQuickLabel>(uri, 2, 0, "Label");
    qmlRegisterType<QQuickMenu>(uri, 2, 0, "Menu");
    qmlRegisterType<QQuickMenuItem>(uri, 2, 0, "MenuItem");
    qmlRegisterAnonymousType<QQuickOverlay>(uri, 2);
    qmlRegisterType<QQuickPage>(uri, 2, 0, "Page");
    qmlRegisterType<QQuickPageIndicator>(uri, 2, 0, "PageIndicator");
    qmlRegisterType<QQuickPane>(uri, 2, 0, "Pane");
    qmlRegisterType<QQuickPopup>(uri, 2, 0, "Popup");
    qmlRegisterType<QQuickProgressBar>(uri, 2, 0, "ProgressBar");
    qmlRegisterType<QQuickRadioButton>(uri, 2, 0, "RadioButton");
    qmlRegisterType<QQuickRadioDelegate>(uri, 2, 0, "RadioDelegate");
    qmlRegisterType<QQuickRangeSlider>(uri, 2, 0, "RangeSlider");
    qmlRegisterAnonymousType<QQuickRangeSliderNode>(uri, 2);
    qmlRegisterType<QQuickScrollBar>(uri, 2, 0, "ScrollBar");
    qmlRegisterAnonymousType<QQuickScrollBarAttached>(uri, 2);
    qmlRegisterType<QQuickScrollIndicator>(uri, 2, 0, "ScrollIndicator");
    qmlRegisterAnonymousType<QQuickScrollIndicatorAttached>(uri, 2);
    qmlRegisterType<QQuickSlider>(uri, 2, 0, "Slider");
    qmlRegisterType<QQuickSpinBox>(uri, 2, 0, "SpinBox");
    qmlRegisterAnonymousType<QQuickSpinButton>(uri, 2);
    qmlRegisterType<QQuickStackView>(uri, 2, 0, "StackView");
    qmlRegisterAnonymousType<QQuickStackViewAttached>(uri, 2);
    qmlRegisterAnonymousType<QQuickSwipe>(uri, 2);
    qmlRegisterType<QQuickSwipeDelegate>(uri, 2, 0, "SwipeDelegate");
    qmlRegisterType<QQuickSwipeView>(uri, 2, 0, "SwipeView");
    qmlRegisterAnonymousType<QQuickSwipeViewAttached>(uri, 2);
    qmlRegisterType<QQuickSwitch>(uri, 2, 0, "Switch");
    qmlRegisterType<QQuickSwitchDelegate>(uri, 2, 0, "SwitchDelegate");
    qmlRegisterType<QQuickTabBar>(uri, 2, 0, "TabBar");
    qmlRegisterType<QQuickTabButton>(uri, 2, 0, "TabButton");
    qmlRegisterType<QQuickTextArea>(uri, 2, 0, "TextArea");
    qmlRegisterAnonymousType<QQuickTextAreaAttached>(uri, 2);
    qmlRegisterType<QQuickTextField>(uri, 2, 0, "TextField");
    qmlRegisterType<QQuickToolBar>(uri, 2, 0, "ToolBar");
    qmlRegisterType<QQuickToolButton>(uri, 2, 0, "ToolButton");
    qmlRegisterType<QQuickToolTip>(uri, 2, 0, "ToolTip");
    qmlRegisterAnonymousType<QQuickToolTipAttached>(uri, 2);
#if QT_CONFIG(quick_listview) && QT_CONFIG(quick_pathview)
    qmlRegisterAnonymousType<QQuickTumblerAttached>(uri, 2);
    qmlRegisterType<QQuickTumbler>(uri, 2, 0, "Tumbler");
#endif

    // NOTE: register the latest revisions of all template/control base classes to
    // make revisioned properties available to their subclasses (synced with Qt 5.7)
    qmlRegisterRevision<QQuickItem, 7>(uri, 2, 0);
    qmlRegisterRevision<QQuickText, 6>(uri, 2, 0);
    qmlRegisterRevision<QQuickTextInput, 7>(uri, 2, 0);
    qmlRegisterRevision<QQuickTextEdit, 7>(uri, 2, 0);
    qmlRegisterRevision<QQuickWindow, 2>(uri, 2, 0);
    qmlRegisterRevision<QWindow, 3>(uri, 2, 0);

    // QtQuick.Templates 2.1 (new types and revisions in Qt 5.8)
    qmlRegisterType<QQuickButtonGroup, 1>(uri, 2, 1, "ButtonGroup");
    qmlRegisterType<QQuickComboBox, 1>(uri, 2, 1, "ComboBox");
    qmlRegisterType<QQuickContainer, 1>(uri, 2, 1, "Container");
    qmlRegisterType<QQuickDialog>(uri, 2, 1, "Dialog");
    qmlRegisterType<QQuickDialogButtonBox>(uri, 2, 1, "DialogButtonBox");
    qmlRegisterAnonymousType<QQuickDialogButtonBoxAttached>(uri, 2);
    qmlRegisterType<QQuickMenuSeparator>(uri, 2, 1, "MenuSeparator");
    qmlRegisterType<QQuickPage, 1>(uri, 2, 1, "Page");
    qmlRegisterType<QQuickPopup, 1>(uri, 2, 1, "Popup");
    qmlRegisterType<QQuickRangeSlider, 1>(uri, 2, 1, "RangeSlider");
    qmlRegisterType<QQuickRoundButton>(uri, 2, 1, "RoundButton");
    qmlRegisterType<QQuickSlider, 1>(uri, 2, 1, "Slider");
    qmlRegisterType<QQuickSpinBox, 1>(uri, 2, 1, "SpinBox");
    qmlRegisterType<QQuickStackView, 1>(uri, 2, 1, "StackView");
    qmlRegisterType<QQuickSwipeDelegate, 1>(uri, 2, 1, "SwipeDelegate");
    qmlRegisterType<QQuickSwipeView, 1>(uri, 2, 1, "SwipeView");
    qmlRegisterType<QQuickTextArea, 1>(uri, 2, 1, "TextArea");
    qmlRegisterType<QQuickTextField, 1>(uri, 2, 1, "TextField");
    qmlRegisterType<QQuickToolSeparator>(uri, 2, 1, "ToolSeparator");
#if QT_CONFIG(quick_listview) && QT_CONFIG(quick_pathview)
    qmlRegisterType<QQuickTumbler, 1>(uri, 2, 1, "Tumbler");
#endif

    // QtQuick.Templates 2.2 (new types and revisions in Qt 5.9)
    qmlRegisterType<QQuickAbstractButton, 2>(uri, 2, 2, "AbstractButton");
    qmlRegisterType<QQuickComboBox, 2>(uri, 2, 2, "ComboBox");
    qmlRegisterType<QQuickDelayButton>(uri, 2, 2, "DelayButton");
    qmlRegisterType<QQuickDial, 2>(uri, 2, 2, "Dial");
    qmlRegisterType<QQuickDrawer, 2>(uri, 2, 2, "Drawer");
    qmlRegisterType<QQuickRangeSlider, 2>(uri, 2, 2, "RangeSlider");
    qmlRegisterType<QQuickScrollBar, 2>(uri, 2, 2, "ScrollBar");
    qmlRegisterType<QQuickScrollView>(uri, 2, 2, "ScrollView");
    qmlRegisterType<QQuickSlider, 2>(uri, 2, 2, "Slider");
    qmlRegisterType<QQuickSpinBox, 2>(uri, 2, 2, "SpinBox");
    qmlRegisterType<QQuickSwipeDelegate, 2>(uri, 2, 2, "SwipeDelegate");
    qmlRegisterType<QQuickSwipeView, 2>(uri, 2, 2, "SwipeView");
    qmlRegisterType<QQuickTabBar, 2>(uri, 2, 2, "TabBar");
#if QT_CONFIG(quick_listview) && QT_CONFIG(quick_pathview)
    qmlRegisterType<QQuickTumbler, 2>(uri, 2, 2, "Tumbler");
#endif

    // NOTE: register the latest revisions of all template/control base classes to
    // make revisioned properties available to their subclasses (synced with Qt 5.9)
    qmlRegisterRevision<QQuickText, 9>(uri, 2, 2);
    qmlRegisterRevision<QQuickTextInput, 9>(uri, 2, 2);
    qmlRegisterRevision<QQuickWindowQmlImpl, 3>(uri, 2, 2);

    // QtQuick.Templates 2.3 (new types and revisions in Qt 5.10)
    qmlRegisterType<QQuickAbstractButton, 3>(uri, 2, 3, "AbstractButton");
    qmlRegisterType<QQuickAction>(uri, 2, 3, "Action");
    qmlRegisterType<QQuickActionGroup>(uri, 2, 3, "ActionGroup");
    qmlRegisterType<QQuickApplicationWindow, 3>(uri, 2, 3, "ApplicationWindow");
    qmlRegisterType<QQuickButtonGroup, 3>(uri, 2, 3, "ButtonGroup");
    qmlRegisterType<QQuickControl, 3>(uri, 2, 3, "Control");
    qmlRegisterType<QQuickContainer, 3>(uri, 2, 3, "Container");
    qmlRegisterType<QQuickDialog, 3>(uri, 2, 3, "Dialog");
    qmlRegisterType<QQuickDialogButtonBox, 3>(uri, 2, 3, "DialogButtonBox");
    qmlRegisterAnonymousType<QQuickIcon>(uri, 2);
    qRegisterMetaType<QQuickIcon>();
    qmlRegisterType<QQuickLabel, 3>(uri, 2, 3, "Label");
    qmlRegisterType<QQuickMenu, 3>(uri, 2, 3, "Menu");
    qmlRegisterType<QQuickMenuBar>(uri, 2, 3, "MenuBar");
    qmlRegisterType<QQuickMenuBarItem>(uri, 2, 3, "MenuBarItem");
    qmlRegisterType<QQuickMenuItem, 3>(uri, 2, 3, "MenuItem");
    qmlRegisterUncreatableType<QQuickOverlay>(uri, 2, 3, "Overlay", QStringLiteral("Overlay is only available as an attached property."));
    qmlRegisterAnonymousType<QQuickOverlayAttached>(uri, 2);
    qmlRegisterType<QQuickPopup, 3>(uri, 2, 3, "Popup");
    qmlRegisterType<QQuickRangeSlider, 3>(uri, 2, 3, "RangeSlider");
    qmlRegisterType<QQuickScrollBar, 3>(uri, 2, 3, "ScrollBar");
    qmlRegisterType<QQuickScrollIndicator, 3>(uri, 2, 3, "ScrollIndicator");
    qmlRegisterType<QQuickSlider, 3>(uri, 2, 3, "Slider");
    qmlRegisterType<QQuickSpinBox, 3>(uri, 2, 3, "SpinBox");
    qmlRegisterType<QQuickTextArea, 3>(uri, 2, 3, "TextArea");
    qmlRegisterType<QQuickTextField, 3>(uri, 2, 3, "TextField");

    // NOTE: register the latest revisions of all template/control base classes to
    // make revisioned properties available to their subclasses (synced with Qt 5.10)
    qmlRegisterRevision<QQuickText, 10>(uri, 2, 3);
    qmlRegisterRevision<QQuickTextEdit, 10>(uri, 2, 3);

    // QtQuick.Templates 2.4 (new types and revisions in Qt 5.11)
    qmlRegisterType<QQuickAbstractButton, 4>(uri, 2, 4, "AbstractButton");
    qmlRegisterType<QQuickButtonGroup, 4>(uri, 2, 4, "ButtonGroup");
    qmlRegisterType<QQuickCheckBox, 4>(uri, 2, 4, "CheckBox");
    qmlRegisterType<QQuickCheckDelegate, 4>(uri, 2, 4, "CheckDelegate");
    qmlRegisterType<QQuickScrollBar, 4>(uri, 2, 4, "ScrollBar");
    qmlRegisterType<QQuickScrollIndicator, 4>(uri, 2, 4, "ScrollIndicator");
    qmlRegisterType<QQuickSpinBox, 4>(uri, 2, 4, "SpinBox");

    // QtQuick.Templates 2.5 (new types and revisions in Qt 5.12)
    qmlRegisterType<QQuickAbstractButton, 5>(uri, 2, 5, "AbstractButton");
    qmlRegisterType<QQuickDialogButtonBox, 5>(uri, 2, 5, "DialogButtonBox");
    qmlRegisterType<QQuickComboBox, 5>(uri, 2, 5, "ComboBox");
    qmlRegisterType<QQuickControl, 5>(uri, 2, 5, "Control");
    qmlRegisterType<QQuickContainer, 5>(uri, 2, 5, "Container");
    qmlRegisterType<QQuickDial, 5>(uri, 2, 5, "Dial");
    qmlRegisterType<QQuickDialog, 5>(uri, 2, 5, "Dialog");
    qmlRegisterType<QQuickGroupBox, 5>(uri, 2, 5, "GroupBox");
    qmlRegisterType<QQuickLabel, 5>(uri, 2, 5, "Label");
    qmlRegisterType<QQuickPage, 5>(uri, 2, 5, "Page");
    qmlRegisterType<QQuickPopup, 5>(uri, 2, 5, "Popup");
    qmlRegisterAnonymousType<QQuickPopupAnchors>(uri, 2);
    qmlRegisterType<QQuickRangeSlider, 5>(uri, 2, 5, "RangeSlider");
    qmlRegisterType<QQuickSlider, 5>(uri, 2, 5, "Slider");
    qmlRegisterType<QQuickSpinBox, 5>(uri, 2, 5, "SpinBox");
    qmlRegisterType<QQuickTextArea, 5>(uri, 2, 5, "TextArea");
    qmlRegisterType<QQuickTextField, 5>(uri, 2, 5, "TextField");
    qmlRegisterType<QQuickToolTip, 5>(uri, 2, 5, "ToolTip");

    // QtQuick.Templates 2.13 (new types and revisions in Qt 5.13)
    qmlRegisterType<QQuickSplitView>(uri, 2, 13, "SplitView");
    qmlRegisterAnonymousType<QQuickSplitViewAttached>(uri, 2);
    qmlRegisterUncreatableType<QQuickSplitHandleAttached>(uri, 2, 13, "SplitHandle",
        QStringLiteral("SplitHandle is only available as an attached property."));
    qmlRegisterAnonymousType<QQuickSplitHandleAttached>(uri, 2);

    // QtQuick.Templates 2.14 (new types and revisions in Qt 5.14)
    qmlRegisterType<QQuickComboBox, 14>(uri, 2, 14, "ComboBox");

    // QtQuick.Templates 2.15 (new types and revisions in Qt 5.15)
    qmlRegisterType<QQuickComboBox, 15>(uri, 2, 15, "ComboBox");
    // Register QQuickTableView here to expose headerView's base, with a irregular type name to 'hide' it.
    qmlRegisterType<QQuickTableView, 15>(uri, 2, 15, "__TableView__");
    qmlRegisterType<QQuickHorizontalHeaderView>(uri, 2, 15, "HorizontalHeaderView");
    qmlRegisterType<QQuickVerticalHeaderView>(uri, 2, 15, "VerticalHeaderView");
}

QT_END_NAMESPACE

#include "qtquicktemplates2plugin.moc"
