mirror of
https://gitee.com/openharmony/arkui_ace_engine
synced 2024-10-07 08:24:11 +00:00
list item action builder can be decreased
Signed-off-by: huzeqi <huzeqi@huawei.com> Change-Id: Iecf205dc36c50c78913f8cf910e6721c77366a9e
This commit is contained in:
parent
89cdbd10cf
commit
f4ec734765
@ -22,10 +22,10 @@
|
||||
#include "bridge/declarative_frontend/engine/functions/js_drag_function.h"
|
||||
#include "bridge/declarative_frontend/engine/functions/js_function.h"
|
||||
#include "bridge/declarative_frontend/jsview/js_utils.h"
|
||||
#include "core/components_ng/base/view_abstract_model.h"
|
||||
#include "bridge/declarative_frontend/jsview/js_view_common_def.h"
|
||||
#include "bridge/declarative_frontend/jsview/models/list_item_model_impl.h"
|
||||
#include "core/common/container.h"
|
||||
#include "core/components_ng/base/view_abstract_model.h"
|
||||
#include "core/components_ng/event/gesture_event_hub.h"
|
||||
#include "core/components_ng/pattern/list/list_item_model.h"
|
||||
#include "core/components_ng/pattern/list/list_item_model_ng.h"
|
||||
@ -171,7 +171,6 @@ void JSListItem::SetSelected(const JSCallbackInfo& info)
|
||||
void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal>& jsValue, bool isStartArea)
|
||||
{
|
||||
auto deleteAreaObj = JSRef<JSObject>::Cast(jsValue);
|
||||
auto listItemTheme = GetTheme<ListItemTheme>();
|
||||
|
||||
std::function<void()> builderAction;
|
||||
auto builderObject = deleteAreaObj->GetProperty("builder");
|
||||
@ -179,15 +178,8 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
|
||||
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::Cast(builderObject));
|
||||
builderAction = [builderFunc]() { builderFunc->Execute(); };
|
||||
}
|
||||
auto defaultDeleteAnimation = deleteAreaObj->GetProperty("useDefaultDeleteAnimation");
|
||||
bool useDefaultDeleteAnimation = true;
|
||||
if (defaultDeleteAnimation->IsBoolean()) {
|
||||
useDefaultDeleteAnimation = defaultDeleteAnimation->ToBoolean();
|
||||
}
|
||||
|
||||
auto onAction = deleteAreaObj->GetProperty("onAction");
|
||||
if (!onAction->IsFunction()) {
|
||||
onAction = deleteAreaObj->GetProperty("onDelete");
|
||||
}
|
||||
std::function<void()> onActionCallback;
|
||||
if (onAction->IsFunction()) {
|
||||
onActionCallback = [execCtx = args.GetExecutionContext(), func = JSRef<JSFunc>::Cast(onAction)]() {
|
||||
@ -196,9 +188,6 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
|
||||
};
|
||||
}
|
||||
auto onEnterActionArea = deleteAreaObj->GetProperty("onEnterActionArea");
|
||||
if (!onEnterActionArea->IsFunction()) {
|
||||
onEnterActionArea = deleteAreaObj->GetProperty("onEnterDeleteArea");
|
||||
}
|
||||
std::function<void()> onEnterActionAreaCallback;
|
||||
if (onEnterActionArea->IsFunction()) {
|
||||
onEnterActionAreaCallback = [execCtx = args.GetExecutionContext(),
|
||||
@ -208,9 +197,6 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
|
||||
};
|
||||
}
|
||||
auto onExitActionArea = deleteAreaObj->GetProperty("onExitActionArea");
|
||||
if (!onExitActionArea->IsFunction()) {
|
||||
onExitActionArea = deleteAreaObj->GetProperty("onExitDeleteArea");
|
||||
}
|
||||
std::function<void()> onExitActionAreaCallback;
|
||||
if (onExitActionArea->IsFunction()) {
|
||||
onExitActionAreaCallback = [execCtx = args.GetExecutionContext(),
|
||||
@ -222,10 +208,8 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
|
||||
auto actionAreaDistance = deleteAreaObj->GetProperty("actionAreaDistance");
|
||||
CalcDimension length;
|
||||
if (!ParseJsDimensionVp(actionAreaDistance, length)) {
|
||||
actionAreaDistance = deleteAreaObj->GetProperty("deleteAreaDistance");
|
||||
if (!ParseJsDimensionVp(actionAreaDistance, length)) {
|
||||
length = listItemTheme->GetDeleteDistance();
|
||||
}
|
||||
auto listItemTheme = GetTheme<ListItemTheme>();
|
||||
length = listItemTheme->GetDeleteDistance();
|
||||
}
|
||||
auto onStateChange = deleteAreaObj->GetProperty("onStateChange");
|
||||
std::function<void(SwipeActionState state)> onStateChangeCallback;
|
||||
@ -239,9 +223,9 @@ void JSListItem::JsParseDeleteArea(const JSCallbackInfo& args, const JSRef<JSVal
|
||||
};
|
||||
}
|
||||
|
||||
ListItemModel::GetInstance()->SetDeleteArea(std::move(builderAction), useDefaultDeleteAnimation,
|
||||
std::move(onActionCallback), std::move(onEnterActionAreaCallback), std::move(onExitActionAreaCallback),
|
||||
std::move(onStateChangeCallback), length, isStartArea);
|
||||
ListItemModel::GetInstance()->SetDeleteArea(std::move(builderAction), std::move(onActionCallback),
|
||||
std::move(onEnterActionAreaCallback), std::move(onExitActionAreaCallback), std::move(onStateChangeCallback),
|
||||
length, isStartArea);
|
||||
}
|
||||
|
||||
void JSListItem::SetSwiperAction(const JSCallbackInfo& args)
|
||||
@ -253,20 +237,34 @@ void JSListItem::SetSwiperAction(const JSCallbackInfo& args)
|
||||
JSRef<JSObject> obj = JSRef<JSObject>::Cast(args[0]);
|
||||
std::function<void()> startAction;
|
||||
auto startObject = obj->GetProperty("start");
|
||||
if (startObject->IsFunction()) {
|
||||
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::Cast(startObject));
|
||||
startAction = [builderFunc]() { builderFunc->Execute(); };
|
||||
} else if (startObject->IsObject()) {
|
||||
JsParseDeleteArea(args, startObject, true);
|
||||
if (startObject->IsObject()) {
|
||||
if (startObject->IsFunction()) {
|
||||
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::Cast(startObject));
|
||||
startAction = [builderFunc]() { builderFunc->Execute(); };
|
||||
ListItemModel::GetInstance()->SetDeleteArea(
|
||||
std::move(startAction), nullptr, nullptr, nullptr, nullptr, CalcDimension(0), true);
|
||||
} else {
|
||||
JsParseDeleteArea(args, startObject, true);
|
||||
}
|
||||
} else {
|
||||
ListItemModel::GetInstance()->SetDeleteArea(
|
||||
nullptr, nullptr, nullptr, nullptr, nullptr, CalcDimension(0), true);
|
||||
}
|
||||
|
||||
std::function<void()> endAction;
|
||||
auto endObject = obj->GetProperty("end");
|
||||
if (endObject->IsFunction()) {
|
||||
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::Cast(endObject));
|
||||
endAction = [builderFunc]() { builderFunc->Execute(); };
|
||||
} else if (endObject->IsObject()) {
|
||||
JsParseDeleteArea(args, endObject, false);
|
||||
if (startObject->IsObject()) {
|
||||
if (startObject->IsFunction()) {
|
||||
auto builderFunc = AceType::MakeRefPtr<JsFunction>(JSRef<JSFunc>::Cast(endObject));
|
||||
endAction = [builderFunc]() { builderFunc->Execute(); };
|
||||
ListItemModel::GetInstance()->SetDeleteArea(
|
||||
std::move(endAction), nullptr, nullptr, nullptr, nullptr, CalcDimension(0), false);
|
||||
} else {
|
||||
JsParseDeleteArea(args, endObject, false);
|
||||
}
|
||||
} else {
|
||||
ListItemModel::GetInstance()->SetDeleteArea(
|
||||
nullptr, nullptr, nullptr, nullptr, nullptr, CalcDimension(0), false);
|
||||
}
|
||||
|
||||
auto edgeEffect = obj->GetProperty("edgeEffect");
|
||||
@ -286,8 +284,9 @@ void JSListItem::SetSwiperAction(const JSCallbackInfo& args)
|
||||
return;
|
||||
};
|
||||
}
|
||||
ListItemModel::GetInstance()->SetSwiperAction(std::move(startAction), std::move(endAction),
|
||||
std::move(onOffsetChangeCallback), swipeEdgeEffect);
|
||||
|
||||
// use SetDeleteArea to update builder function
|
||||
ListItemModel::GetInstance()->SetSwiperAction(nullptr, nullptr, std::move(onOffsetChangeCallback), swipeEdgeEffect);
|
||||
}
|
||||
|
||||
void JSListItem::SelectCallback(const JSCallbackInfo& args)
|
||||
|
@ -117,8 +117,8 @@ void ListItemModelImpl::SetSelectCallback(OnSelectFunc&& selectCallback)
|
||||
JSViewSetProperty(&V2::ListItemComponent::SetOnSelectId, std::move(selectCallback));
|
||||
}
|
||||
|
||||
void ListItemModelImpl::SetDeleteArea(std::function<void()>&& builderAction, bool useDefaultDeleteAnimation,
|
||||
OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
|
||||
void ListItemModelImpl::SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
|
||||
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
|
||||
OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) {};
|
||||
|
||||
void ListItemModelImpl::SetOnDragStart(NG::OnDragStartFunc&& onDragStart)
|
||||
|
@ -39,7 +39,7 @@ public:
|
||||
[[maybe_unused]] OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect) override;
|
||||
void SetSelectCallback(OnSelectFunc&& selectCallback) override;
|
||||
void SetOnDragStart(NG::OnDragStartFunc&& onDragStart) override;
|
||||
void SetDeleteArea(std::function<void()>&& builderAction, bool useDefaultDeleteAnimation, OnDeleteEvent&& onDelete,
|
||||
void SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
|
||||
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
|
||||
OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) override;
|
||||
|
||||
|
@ -43,12 +43,13 @@ public:
|
||||
virtual void SetSelectable(bool selectable) = 0;
|
||||
virtual void SetSelected(bool selected) = 0;
|
||||
virtual void SetSelectChangeEvent(std::function<void(bool)>&& changeEvent) = 0;
|
||||
// use SetDeleteArea to update builder function
|
||||
virtual void SetSwiperAction(std::function<void()>&& startAction, std::function<void()>&& endAction,
|
||||
OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect) = 0;
|
||||
virtual void SetSelectCallback(OnSelectFunc&& selectCallback) = 0;
|
||||
virtual void SetOnDragStart(NG::OnDragStartFunc&& onDragStart) = 0;
|
||||
virtual void SetDeleteArea(std::function<void()>&& builderAction, bool useDefaultDeleteAnimation,
|
||||
OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
|
||||
virtual void SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
|
||||
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
|
||||
OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea) = 0;
|
||||
|
||||
private:
|
||||
|
@ -38,8 +38,7 @@ void ListItemModelNG::Create(std::function<void(int32_t)>&& deepRenderFunc, V2::
|
||||
return ViewStackProcessor::GetInstance()->Finish();
|
||||
};
|
||||
ACE_SCOPED_TRACE("Create[%s][self:%d]", V2::LIST_ITEM_ETS_TAG, nodeId);
|
||||
auto frameNode = FrameNode::GetOrCreateFrameNode(
|
||||
V2::LIST_ITEM_ETS_TAG, nodeId,
|
||||
auto frameNode = FrameNode::GetOrCreateFrameNode(V2::LIST_ITEM_ETS_TAG, nodeId,
|
||||
[shallowBuilder = AceType::MakeRefPtr<ShallowBuilder>(std::move(deepRender)), itemStyle = listItemStyle]() {
|
||||
return AceType::MakeRefPtr<ListItemPattern>(shallowBuilder, itemStyle);
|
||||
});
|
||||
@ -54,7 +53,7 @@ void ListItemModelNG::Create()
|
||||
[]() { return AceType::MakeRefPtr<ListItemPattern>(nullptr, V2::ListItemStyle::NONE); });
|
||||
stack->Push(frameNode);
|
||||
}
|
||||
|
||||
// use SetDeleteArea to update builder function
|
||||
void ListItemModelNG::SetSwiperAction(std::function<void()>&& startAction, std::function<void()>&& endAction,
|
||||
OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect)
|
||||
{
|
||||
@ -62,27 +61,7 @@ void ListItemModelNG::SetSwiperAction(std::function<void()>&& startAction, std::
|
||||
CHECK_NULL_VOID(frameNode);
|
||||
auto pattern = frameNode->GetPattern<ListItemPattern>();
|
||||
CHECK_NULL_VOID(pattern);
|
||||
RefPtr<NG::UINode> startNode;
|
||||
if (startAction) {
|
||||
NG::ScopedViewStackProcessor builderViewStackProcessor;
|
||||
startAction();
|
||||
startNode = NG::ViewStackProcessor::GetInstance()->Finish();
|
||||
}
|
||||
if (startNode) {
|
||||
pattern->SetStartNode(startNode);
|
||||
}
|
||||
RefPtr<NG::UINode> endNode;
|
||||
if (endAction) {
|
||||
NG::ScopedViewStackProcessor builderViewStackProcessor;
|
||||
endAction();
|
||||
endNode = NG::ViewStackProcessor::GetInstance()->Finish();
|
||||
}
|
||||
if (endNode) {
|
||||
pattern->SetEndNode(endNode);
|
||||
}
|
||||
if (onOffsetChangeFunc) {
|
||||
pattern->SetOffsetChangeCallBack(std::move(onOffsetChangeFunc));
|
||||
}
|
||||
pattern->SetOffsetChangeCallBack(std::move(onOffsetChangeFunc));
|
||||
ACE_UPDATE_LAYOUT_PROPERTY(ListItemLayoutProperty, EdgeEffect, edgeEffect);
|
||||
}
|
||||
|
||||
@ -135,8 +114,8 @@ void ListItemModelNG::SetSelectCallback(OnSelectFunc&& selectCallback)
|
||||
eventHub->SetOnSelect(std::move(selectCallback));
|
||||
}
|
||||
|
||||
void ListItemModelNG::SetDeleteArea(std::function<void()>&& builderAction, bool useDefaultDeleteAnimation,
|
||||
OnDeleteEvent&& onDelete, OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
|
||||
void ListItemModelNG::SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
|
||||
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
|
||||
OnStateChangedEvent&& onStateChange, const Dimension& length, bool isStartArea)
|
||||
{
|
||||
auto frameNode = ViewStackProcessor::GetInstance()->GetMainFrameNode();
|
||||
@ -152,12 +131,9 @@ void ListItemModelNG::SetDeleteArea(std::function<void()>&& builderAction, bool
|
||||
builderAction();
|
||||
startNode = NG::ViewStackProcessor::GetInstance()->Finish();
|
||||
}
|
||||
if (startNode) {
|
||||
pattern->SetStartNode(startNode);
|
||||
}
|
||||
pattern->SetStartNode(startNode);
|
||||
InstallSwiperCallBack(eventHub, std::move(onDelete), std::move(onEnterDeleteArea),
|
||||
std::move(onExitDeleteArea), std::move(onStateChange), isStartArea);
|
||||
pattern->SetUseStartDefaultDeleteAnimation(useDefaultDeleteAnimation);
|
||||
ACE_UPDATE_LAYOUT_PROPERTY(ListItemLayoutProperty, StartDeleteAreaDistance, length);
|
||||
} else {
|
||||
RefPtr<NG::UINode> endNode;
|
||||
@ -166,12 +142,9 @@ void ListItemModelNG::SetDeleteArea(std::function<void()>&& builderAction, bool
|
||||
builderAction();
|
||||
endNode = NG::ViewStackProcessor::GetInstance()->Finish();
|
||||
}
|
||||
if (endNode) {
|
||||
pattern->SetEndNode(endNode);
|
||||
}
|
||||
pattern->SetEndNode(endNode);
|
||||
InstallSwiperCallBack(eventHub, std::move(onDelete), std::move(onEnterDeleteArea),
|
||||
std::move(onExitDeleteArea), std::move(onStateChange), isStartArea);
|
||||
pattern->SetUseEndDefaultDeleteAnimation(useDefaultDeleteAnimation);
|
||||
ACE_UPDATE_LAYOUT_PROPERTY(ListItemLayoutProperty, EndDeleteAreaDistance, length);
|
||||
}
|
||||
}
|
||||
@ -185,31 +158,15 @@ void ListItemModelNG::InstallSwiperCallBack(RefPtr<ListItemEventHub> eventHub,
|
||||
{
|
||||
CHECK_NULL_VOID(eventHub);
|
||||
if (isStartArea) {
|
||||
if (onDelete) {
|
||||
eventHub->SetStartOnDelete(std::move(onDelete));
|
||||
}
|
||||
if (onEnterDeleteArea) {
|
||||
eventHub->SetOnEnterStartDeleteArea(std::move(onEnterDeleteArea));
|
||||
}
|
||||
if (onExitDeleteArea) {
|
||||
eventHub->SetOnExitStartDeleteArea(std::move(onExitDeleteArea));
|
||||
}
|
||||
if (onStateChange) {
|
||||
eventHub->SetStartOnStateChange(std::move(onStateChange));
|
||||
}
|
||||
eventHub->SetStartOnDelete(std::move(onDelete));
|
||||
eventHub->SetOnEnterStartDeleteArea(std::move(onEnterDeleteArea));
|
||||
eventHub->SetOnExitStartDeleteArea(std::move(onExitDeleteArea));
|
||||
eventHub->SetStartOnStateChange(std::move(onStateChange));
|
||||
} else {
|
||||
if (onDelete) {
|
||||
eventHub->SetEndOnDelete(std::move(onDelete));
|
||||
}
|
||||
if (onEnterDeleteArea) {
|
||||
eventHub->SetOnEnterEndDeleteArea(std::move(onEnterDeleteArea));
|
||||
}
|
||||
if (onExitDeleteArea) {
|
||||
eventHub->SetOnExitEndDeleteArea(std::move(onExitDeleteArea));
|
||||
}
|
||||
if (onStateChange) {
|
||||
eventHub->SetEndOnStateChange(std::move(onStateChange));
|
||||
}
|
||||
eventHub->SetEndOnDelete(std::move(onDelete));
|
||||
eventHub->SetOnEnterEndDeleteArea(std::move(onEnterDeleteArea));
|
||||
eventHub->SetOnExitEndDeleteArea(std::move(onExitDeleteArea));
|
||||
eventHub->SetEndOnStateChange(std::move(onStateChange));
|
||||
}
|
||||
}
|
||||
} // namespace OHOS::Ace::NG
|
||||
|
@ -19,8 +19,8 @@
|
||||
#include <functional>
|
||||
|
||||
#include "base/utils/macros.h"
|
||||
#include "core/components_ng/pattern/list/list_item_model.h"
|
||||
#include "core/components_ng/pattern/list/list_item_event_hub.h"
|
||||
#include "core/components_ng/pattern/list/list_item_model.h"
|
||||
|
||||
namespace OHOS::Ace::NG {
|
||||
class ACE_EXPORT ListItemModelNG : public ListItemModel {
|
||||
@ -39,9 +39,10 @@ public:
|
||||
OnOffsetChangeFunc&& onOffsetChangeFunc, V2::SwipeEdgeEffect edgeEffect) override;
|
||||
void SetSelectCallback(OnSelectFunc&& selectCallback) override;
|
||||
void SetOnDragStart(NG::OnDragStartFunc&& onDragStart) override {}
|
||||
void SetDeleteArea(std::function<void()>&& builderAction, bool useDefaultDeleteAnimation, OnDeleteEvent&& onDelete,
|
||||
void SetDeleteArea(std::function<void()>&& builderAction, OnDeleteEvent&& onDelete,
|
||||
OnEnterDeleteAreaEvent&& onEnterDeleteArea, OnExitDeleteAreaEvent&& onExitDeleteArea,
|
||||
OnStateChangedEvent&& onStateChangeEvent, const Dimension& length, bool isStartArea) override;
|
||||
|
||||
private:
|
||||
void InstallSwiperCallBack(RefPtr<ListItemEventHub> eventHub,
|
||||
OnDeleteEvent&& onDelete,
|
||||
|
@ -124,6 +124,7 @@ void ListItemPattern::SetStartNode(const RefPtr<NG::UINode>& startNode)
|
||||
host->ReplaceChild(host->GetChildAtIndex(startNodeIndex_), startNode);
|
||||
}
|
||||
} else if (HasStartNode()) {
|
||||
host->RemoveChildAtIndex(startNodeIndex_);
|
||||
if (endNodeIndex_ > startNodeIndex_) {
|
||||
endNodeIndex_--;
|
||||
}
|
||||
@ -152,6 +153,7 @@ void ListItemPattern::SetEndNode(const RefPtr<NG::UINode>& endNode)
|
||||
host->ReplaceChild(host->GetChildAtIndex(endNodeIndex_), endNode);
|
||||
}
|
||||
} else if (HasEndNode()) {
|
||||
host->RemoveChildAtIndex(endNodeIndex_);
|
||||
if (startNodeIndex_ > endNodeIndex_) {
|
||||
startNodeIndex_--;
|
||||
}
|
||||
@ -239,6 +241,9 @@ void ListItemPattern::OnModifyDone()
|
||||
InitSwiperAction(axisChanged);
|
||||
return;
|
||||
}
|
||||
auto gestureHub = listItemEventHub->GetOrCreateGestureEventHub();
|
||||
CHECK_NULL_VOID(gestureHub);
|
||||
gestureHub->RemovePanEvent(panEvent_);
|
||||
panEvent_.Reset();
|
||||
springController_.Reset();
|
||||
SetAccessibilityAction();
|
||||
@ -527,6 +532,7 @@ void ListItemPattern::StartSpringMotion(float start, float end, float velocity,
|
||||
CHECK_NULL_VOID(listItem);
|
||||
if (NearZero(listItem->curOffset_)) {
|
||||
listItem->ResetToItemChild();
|
||||
listItem->ResetNodeSize();
|
||||
listItem->FireSwipeActionOffsetChange(SWIPE_SPRING_MASS, listItem->curOffset_);
|
||||
}
|
||||
listItem->MarkDirtyNode();
|
||||
@ -611,27 +617,17 @@ void ListItemPattern::HandleDragEnd(const GestureEvent& info)
|
||||
auto endOnDelete = listItemEventHub->GetEndOnDelete();
|
||||
|
||||
if (hasStartDeleteArea_ && !HasStartNode() && startOnDelete && GreatOrEqual(curOffset_, startDeleteAreaDistance_)) {
|
||||
if (!useStartDefaultDeleteAnimation_) {
|
||||
startOnDelete();
|
||||
FireSwipeActionStateChange(SwipeActionState::ACTIONING);
|
||||
} else {
|
||||
DoDeleteAnimation(true);
|
||||
startOnDelete();
|
||||
return;
|
||||
}
|
||||
DoDeleteAnimation(true);
|
||||
startOnDelete();
|
||||
return;
|
||||
} else if (hasStartDeleteArea_ && !HasStartNode()) {
|
||||
FireSwipeActionStateChange(SwipeActionState::COLLAPSED);
|
||||
}
|
||||
|
||||
if (hasEndDeleteArea_ && !HasEndNode() && endOnDelete && GreatOrEqual(-curOffset_, endDeleteAreaDistance_)) {
|
||||
if (!useEndDefaultDeleteAnimation_) {
|
||||
endOnDelete();
|
||||
FireSwipeActionStateChange(SwipeActionState::ACTIONING);
|
||||
} else {
|
||||
DoDeleteAnimation(false);
|
||||
endOnDelete();
|
||||
return;
|
||||
}
|
||||
DoDeleteAnimation(false);
|
||||
endOnDelete();
|
||||
return;
|
||||
} else if (hasEndDeleteArea_ && !HasEndNode()) {
|
||||
FireSwipeActionStateChange(SwipeActionState::COLLAPSED);
|
||||
}
|
||||
@ -644,14 +640,9 @@ void ListItemPattern::HandleDragEnd(const GestureEvent& info)
|
||||
return;
|
||||
}
|
||||
if (hasStartDeleteArea_ && startOnDelete && GreatOrEqual(curOffset_, width + startDeleteAreaDistance_)) {
|
||||
if (!useStartDefaultDeleteAnimation_) {
|
||||
startOnDelete();
|
||||
FireSwipeActionStateChange(SwipeActionState::ACTIONING);
|
||||
} else {
|
||||
DoDeleteAnimation(true);
|
||||
startOnDelete();
|
||||
return;
|
||||
}
|
||||
DoDeleteAnimation(true);
|
||||
startOnDelete();
|
||||
return;
|
||||
}
|
||||
if (swiperIndex_ == ListItemSwipeIndex::ITEM_CHILD &&
|
||||
width > 0 && (curOffset_ > width * threshold || reachRightSpeed)) {
|
||||
@ -672,14 +663,9 @@ void ListItemPattern::HandleDragEnd(const GestureEvent& info)
|
||||
return;
|
||||
}
|
||||
if (hasEndDeleteArea_ && endOnDelete && GreatOrEqual(-curOffset_, width + endDeleteAreaDistance_)) {
|
||||
if (!useEndDefaultDeleteAnimation_) {
|
||||
endOnDelete();
|
||||
FireSwipeActionStateChange(SwipeActionState::ACTIONING);
|
||||
} else {
|
||||
DoDeleteAnimation(false);
|
||||
endOnDelete();
|
||||
return;
|
||||
}
|
||||
DoDeleteAnimation(false);
|
||||
endOnDelete();
|
||||
return;
|
||||
}
|
||||
if (swiperIndex_ == ListItemSwipeIndex::ITEM_CHILD &&
|
||||
width > 0 && (width * threshold < -curOffset_ || reachLeftSpeed)) {
|
||||
|
@ -153,16 +153,6 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
void SetUseStartDefaultDeleteAnimation(bool useStartDefaultDeleteAnimation)
|
||||
{
|
||||
useStartDefaultDeleteAnimation_ = useStartDefaultDeleteAnimation;
|
||||
}
|
||||
|
||||
void SetUseEndDefaultDeleteAnimation(bool useEndDefaultDeleteAnimation)
|
||||
{
|
||||
useEndDefaultDeleteAnimation_ = useEndDefaultDeleteAnimation;
|
||||
}
|
||||
|
||||
int32_t GetIndexInList() const
|
||||
{
|
||||
return indexInList_;
|
||||
@ -229,9 +219,12 @@ private:
|
||||
void ResetToItemChild()
|
||||
{
|
||||
swiperIndex_ = ListItemSwipeIndex::ITEM_CHILD;
|
||||
FireSwipeActionStateChange(SwipeActionState::COLLAPSED);
|
||||
}
|
||||
void ResetNodeSize()
|
||||
{
|
||||
startNodeSize_ = 0.0f;
|
||||
endNodeSize_ = 0.0f;
|
||||
FireSwipeActionStateChange(SwipeActionState::COLLAPSED);
|
||||
}
|
||||
|
||||
RefPtr<ShallowBuilder> shallowBuilder_;
|
||||
@ -257,8 +250,6 @@ private:
|
||||
bool hasEndDeleteArea_ = false;
|
||||
bool inStartDeleteArea_ = false;
|
||||
bool inEndDeleteArea_ = false;
|
||||
bool useStartDefaultDeleteAnimation_ = false;
|
||||
bool useEndDefaultDeleteAnimation_ = false;
|
||||
|
||||
RefPtr<PanEvent> panEvent_;
|
||||
RefPtr<Animator> springController_;
|
||||
|
@ -109,8 +109,8 @@ protected:
|
||||
void Create(const std::function<void(ListModelNG)>& callback = nullptr);
|
||||
void CreateWithItem(const std::function<void(ListModelNG)>& callback = nullptr);
|
||||
void CreateWithSwipe(bool isStartNode, V2::SwipeEdgeEffect swipeEdgeEffect, int32_t itemNumber = TOTAL_LINE_NUMBER);
|
||||
void CreateWithSwipeAction(SwipeActionItem& item, bool useDefaultDeleteAnimation, bool isStartArea,
|
||||
OnOffsetChangeFunc onOffsetChange, V2::SwipeEdgeEffect effect);
|
||||
void CreateWithSwipeAction(
|
||||
SwipeActionItem& item, bool isStartArea, OnOffsetChangeFunc onOffsetChange, V2::SwipeEdgeEffect effect);
|
||||
|
||||
static void CreateItem(
|
||||
int32_t itemNumber, Axis axis = Axis::VERTICAL, V2::ListItemStyle listItemStyle = V2::ListItemStyle::NONE);
|
||||
@ -251,8 +251,8 @@ void ListTestNg::CreateWithSwipe(bool isStartNode, V2::SwipeEdgeEffect swipeEdge
|
||||
});
|
||||
}
|
||||
|
||||
void ListTestNg::CreateWithSwipeAction(SwipeActionItem& item, bool useDefaultDeleteAnimation, bool isStartArea,
|
||||
OnOffsetChangeFunc onOffsetChange, V2::SwipeEdgeEffect effect)
|
||||
void ListTestNg::CreateWithSwipeAction(
|
||||
SwipeActionItem& item, bool isStartArea, OnOffsetChangeFunc onOffsetChange, V2::SwipeEdgeEffect effect)
|
||||
{
|
||||
ListModelNG model;
|
||||
model.Create();
|
||||
@ -261,9 +261,8 @@ void ListTestNg::CreateWithSwipeAction(SwipeActionItem& item, bool useDefaultDel
|
||||
SetHeight(Dimension(ITEM_HEIGHT));
|
||||
SetWidth(FILL_LENGTH);
|
||||
itemModel.SetSwiperAction(nullptr, nullptr, std::move(onOffsetChange), effect);
|
||||
itemModel.SetDeleteArea(std::move(item.builderAction), useDefaultDeleteAnimation, std::move(item.onDelete),
|
||||
std::move(item.onEnterDeleteArea), std::move(item.onExitDeleteArea), std::move(item.onStateChange),
|
||||
item.actionAreaDistance, isStartArea);
|
||||
itemModel.SetDeleteArea(std::move(item.builderAction), std::move(item.onDelete), std::move(item.onEnterDeleteArea),
|
||||
std::move(item.onExitDeleteArea), std::move(item.onStateChange), item.actionAreaDistance, isStartArea);
|
||||
{
|
||||
RowModelNG rowModel;
|
||||
rowModel.Create(std::nullopt, nullptr, "");
|
||||
@ -331,6 +330,14 @@ void ListTestNg::CreateItemWithSwipe(
|
||||
SetWidth(FILL_LENGTH);
|
||||
SetHeight(Dimension(ITEM_HEIGHT));
|
||||
itemModel.SetSwiperAction(std::move(startAction), std::move(endAction), nullptr, effect);
|
||||
if (startAction) {
|
||||
itemModel.SetDeleteArea(
|
||||
std::move(startAction), nullptr, nullptr, nullptr, nullptr, Dimension(DELETE_AREA_DISTANCE), true);
|
||||
}
|
||||
if (endAction) {
|
||||
itemModel.SetDeleteArea(
|
||||
std::move(endAction), nullptr, nullptr, nullptr, nullptr, Dimension(DELETE_AREA_DISTANCE), false);
|
||||
}
|
||||
{
|
||||
RowModelNG rowModel;
|
||||
rowModel.Create(std::nullopt, nullptr, "");
|
||||
@ -1993,7 +2000,7 @@ HWTEST_F(ListTestNg, SwiperItem007, TestSize.Level1)
|
||||
.onStateChange = nullptr
|
||||
|
||||
};
|
||||
CreateWithSwipeAction(item, true, true, nullptr, V2::SwipeEdgeEffect::None);
|
||||
CreateWithSwipeAction(item, true, nullptr, V2::SwipeEdgeEffect::None);
|
||||
const int32_t listItemIndex = 0;
|
||||
const RefPtr<ListItemPattern> listItemPattern = GetChildPattern<ListItemPattern>(frameNode_, listItemIndex);
|
||||
EXPECT_NE(listItemPattern, nullptr);
|
||||
@ -2044,7 +2051,7 @@ HWTEST_F(ListTestNg, SwiperItem008, TestSize.Level1)
|
||||
.onStateChange = nullptr
|
||||
|
||||
};
|
||||
CreateWithSwipeAction(item, true, false, nullptr, V2::SwipeEdgeEffect::None);
|
||||
CreateWithSwipeAction(item, false, nullptr, V2::SwipeEdgeEffect::None);
|
||||
const int32_t listItemIndex = 0;
|
||||
const RefPtr<ListItemPattern> listItemPattern = GetChildPattern<ListItemPattern>(frameNode_, listItemIndex);
|
||||
const float maxDistance = END_NODE_LEN + DELETE_AREA_DISTANCE;
|
||||
@ -2095,7 +2102,7 @@ HWTEST_F(ListTestNg, SwiperItem009, TestSize.Level1)
|
||||
.onEnterDeleteArea = nullptr,
|
||||
.onExitDeleteArea = nullptr,
|
||||
.onStateChange = std::move(onStateChangeFunc) };
|
||||
CreateWithSwipeAction(item, true, true, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
CreateWithSwipeAction(item, true, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
const int32_t listItemIndex = 0;
|
||||
const RefPtr<ListItemPattern> listItemPattern = GetChildPattern<ListItemPattern>(frameNode_, listItemIndex);
|
||||
const float maxDistance = START_NODE_LEN + DELETE_AREA_DISTANCE;
|
||||
@ -2149,7 +2156,7 @@ HWTEST_F(ListTestNg, SwiperItem010, TestSize.Level1)
|
||||
.onEnterDeleteArea = nullptr,
|
||||
.onExitDeleteArea = nullptr,
|
||||
.onStateChange = std::move(onStateChangeFunc) };
|
||||
CreateWithSwipeAction(item, true, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
CreateWithSwipeAction(item, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
const int32_t listItemIndex = 0;
|
||||
const RefPtr<ListItemPattern> listItemPattern = GetChildPattern<ListItemPattern>(frameNode_, listItemIndex);
|
||||
const float maxDistance = END_NODE_LEN + DELETE_AREA_DISTANCE;
|
||||
@ -2205,7 +2212,7 @@ HWTEST_F(ListTestNg, SwiperItem011, TestSize.Level1)
|
||||
.onEnterDeleteArea = std::move(enterEvent),
|
||||
.onExitDeleteArea = std::move(exitEvent),
|
||||
.onStateChange = nullptr };
|
||||
CreateWithSwipeAction(item, true, true, nullptr, V2::SwipeEdgeEffect::Spring);
|
||||
CreateWithSwipeAction(item, true, nullptr, V2::SwipeEdgeEffect::Spring);
|
||||
const int32_t listItemIndex = 0;
|
||||
|
||||
/**
|
||||
@ -2275,7 +2282,7 @@ HWTEST_F(ListTestNg, SwiperItem012, TestSize.Level1)
|
||||
.onEnterDeleteArea = std::move(enterEvent),
|
||||
.onExitDeleteArea = std::move(exitEvent),
|
||||
.onStateChange = nullptr };
|
||||
CreateWithSwipeAction(item, true, false, nullptr, V2::SwipeEdgeEffect::Spring);
|
||||
CreateWithSwipeAction(item, false, nullptr, V2::SwipeEdgeEffect::Spring);
|
||||
const int32_t listItemIndex = 0;
|
||||
const float exceedArea = DELETE_AREA_DISTANCE + 1;
|
||||
|
||||
@ -2344,7 +2351,7 @@ HWTEST_F(ListTestNg, SwiperItem013, TestSize.Level1)
|
||||
.onEnterDeleteArea = std::move(enterEvent),
|
||||
.onExitDeleteArea = std::move(exitEvent),
|
||||
.onStateChange = nullptr };
|
||||
CreateWithSwipeAction(item, true, true, nullptr, V2::SwipeEdgeEffect::None);
|
||||
CreateWithSwipeAction(item, true, nullptr, V2::SwipeEdgeEffect::None);
|
||||
const int32_t listItemIndex = 0;
|
||||
|
||||
/**
|
||||
@ -2405,7 +2412,7 @@ HWTEST_F(ListTestNg, SwiperItem014, TestSize.Level1)
|
||||
.onEnterDeleteArea = std::move(enterEvent),
|
||||
.onExitDeleteArea = std::move(exitEvent),
|
||||
.onStateChange = nullptr };
|
||||
CreateWithSwipeAction(item, true, false, nullptr, V2::SwipeEdgeEffect::None);
|
||||
CreateWithSwipeAction(item, false, nullptr, V2::SwipeEdgeEffect::None);
|
||||
const int32_t listItemIndex = 0;
|
||||
const float exceedArea = DELETE_AREA_DISTANCE + 1;
|
||||
|
||||
@ -2529,7 +2536,7 @@ HWTEST_F(ListTestNg, SwiperItem018, TestSize.Level1)
|
||||
.onEnterDeleteArea = nullptr,
|
||||
.onExitDeleteArea = nullptr,
|
||||
.onStateChange = [&curState](SwipeActionState state) { curState = state; } };
|
||||
CreateWithSwipeAction(item, true, true, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
CreateWithSwipeAction(item, true, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
const int32_t listItemIndex = 0;
|
||||
const RefPtr<ListItemPattern> listItemPattern = GetChildPattern<ListItemPattern>(frameNode_, listItemIndex);
|
||||
|
||||
@ -2591,7 +2598,7 @@ HWTEST_F(ListTestNg, SwiperItem019, TestSize.Level1)
|
||||
.onEnterDeleteArea = nullptr,
|
||||
.onExitDeleteArea = nullptr,
|
||||
.onStateChange = [&curState](SwipeActionState state) { curState = state; } };
|
||||
CreateWithSwipeAction(item, true, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
CreateWithSwipeAction(item, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
const int32_t listItemIndex = 0;
|
||||
const RefPtr<ListItemPattern> listItemPattern = GetChildPattern<ListItemPattern>(frameNode_, listItemIndex);
|
||||
|
||||
@ -2653,7 +2660,7 @@ HWTEST_F(ListTestNg, SwiperItem020, TestSize.Level1)
|
||||
.onEnterDeleteArea = nullptr,
|
||||
.onExitDeleteArea = nullptr,
|
||||
.onStateChange = std::move(onStateChangeFunc) };
|
||||
CreateWithSwipeAction(item, true, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
CreateWithSwipeAction(item, false, std::move(onOffsetChange), V2::SwipeEdgeEffect::Spring);
|
||||
const int32_t listItemIndex = 0;
|
||||
const RefPtr<ListItemPattern> listItemPattern = GetChildPattern<ListItemPattern>(frameNode_, listItemIndex);
|
||||
const float maxDistance = END_NODE_LEN + DELETE_AREA_DISTANCE;
|
||||
|
Loading…
Reference in New Issue
Block a user