BayTemplate/PropertyEditor/source/src/QQuickDetailsView.cpp

87 lines
2.6 KiB
C++

#include "QQuickDetailsView.h"
#include "private/qqmldata_p.h"
#include <QQmlEngine>
#include "qqmlcontext.h"
#include "QQuickDetailsViewPrivate.h"
#include "QQuickDetailsViewRow.h"
#include "QQuickFunctionLibrary.h"
void QQuickDetailsViewPrivate::initItemCallback(int serializedModelIndex, QObject* object)
{
QQuickTreeViewExPrivate::initItemCallback(serializedModelIndex, object);
auto item = qobject_cast<QQuickItem*>(object);
if (!item)
return;
const QModelIndex& index = m_treeModelToTableModel.mapToModel(serializedModelIndex);;
IDetailsViewRow* node = static_cast<IDetailsViewRow*>(index.internalPointer());
node->setupItem(item);
}
QQuickDetailsView::QQuickDetailsView(QQuickItem* parent /*= nullptr*/)
: QQuickTreeViewEx(*(new QQuickDetailsViewPrivate()),parent)
{
setModel(QVariant::fromValue(d_func()->mModel));
setReuseItems(false);
setEditTriggers(QQuickTableView::EditTrigger::DoubleTapped);
}
qreal QQuickDetailsView::getSpliterPencent() const
{
return d_func()->mSpliterPencent;
}
void QQuickDetailsView::setSpliterPencent(qreal val)
{
if(val != d_func()->mSpliterPencent){
d_func()->mSpliterPencent = val;
Q_EMIT asSpliterPencentChanged(val);
}
}
void QQuickDetailsView::setObject(QObject* inObject)
{
if (inObject != d_func()->mModel->getObject()) {
d_func()->mModel->setObject(inObject);
Q_EMIT asObjectChanged(inObject);
}
}
QObject* QQuickDetailsView::getObject() const
{
return d_func()->mModel->getObject();
}
void QQuickDetailsView::componentComplete()
{
QQmlEngine* engine = qmlEngine(this);
QQmlComponent* delegate = new QQmlComponent(engine, this);
engine->rootContext()->setContextProperty("helper", QQuickFunctionLibrary::Get());
delegate->setData(R"(
import QtQuick;
import QtQuick.Controls;
import QtQuick.Layouts;
import QtQuick.DetailsView;
Item {
id: detailsDelegate
readonly property real indent: 20
readonly property real padding: 5
required property DetailsView detailsView
required property int row
required property bool isTreeNode
required property bool expanded
required property int hasChildren
required property int depth
implicitWidth: detailsView.width
implicitHeight: heightProxy ? heightProxy.height + 5 : 30
TapHandler {
onTapped: detailsView.toggleExpanded(row)
}
onImplicitHeightChanged: {
detailsView.invalidateLayout();
}
})", QUrl("QQuickDetailsView.componentComplete"));;
setDelegate(delegate);
QQuickTreeViewEx::componentComplete();
}