1886da342Sopenharmony_ci/* 2886da342Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd. 3886da342Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 4886da342Sopenharmony_ci * you may not use this file except in compliance with the License. 5886da342Sopenharmony_ci * You may obtain a copy of the License at 6886da342Sopenharmony_ci * 7886da342Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 8886da342Sopenharmony_ci * 9886da342Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 10886da342Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 11886da342Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12886da342Sopenharmony_ci * See the License for the specific language governing permissions and 13886da342Sopenharmony_ci * limitations under the License. 14886da342Sopenharmony_ci */ 15886da342Sopenharmony_ci 16886da342Sopenharmony_ci#ifndef SELECT_STRATEGY_H 17886da342Sopenharmony_ci#define SELECT_STRATEGY_H 18886da342Sopenharmony_ci 19886da342Sopenharmony_ci#include "ui_model.h" 20886da342Sopenharmony_ci#include "element_node_iterator.h" 21886da342Sopenharmony_ci 22886da342Sopenharmony_cinamespace OHOS::uitest { 23886da342Sopenharmony_ci enum class StrategyEnum { 24886da342Sopenharmony_ci PLAIN, 25886da342Sopenharmony_ci WITH_IN, 26886da342Sopenharmony_ci IS_AFTER, 27886da342Sopenharmony_ci IS_BEFORE, 28886da342Sopenharmony_ci COMPLEX, 29886da342Sopenharmony_ci }; 30886da342Sopenharmony_ci 31886da342Sopenharmony_ci struct StrategyBuildParam { 32886da342Sopenharmony_ci std::vector<WidgetMatchModel> myselfMatcher; 33886da342Sopenharmony_ci std::vector<std::vector<WidgetMatchModel>> afterAnchorMatcherVec; 34886da342Sopenharmony_ci std::vector<std::vector<WidgetMatchModel>> beforeAnchorMatcherVec; 35886da342Sopenharmony_ci std::vector<std::vector<WidgetMatchModel>> withInAnchorMatcherVec; 36886da342Sopenharmony_ci }; 37886da342Sopenharmony_ci 38886da342Sopenharmony_ci class SelectStrategy { 39886da342Sopenharmony_ci public: 40886da342Sopenharmony_ci SelectStrategy() = default; 41886da342Sopenharmony_ci static unique_ptr<SelectStrategy> BuildSelectStrategy(const StrategyBuildParam &buildParam, bool isWantMulti); 42886da342Sopenharmony_ci virtual void SetAndCalcSelectWindowRect(const Rect &windowBounds, const std::vector<Rect> &windowBoundsVec); 43886da342Sopenharmony_ci virtual std::string Describe() const; 44886da342Sopenharmony_ci virtual void RegisterAnchorMatch(const WidgetMatchModel &matchModel); 45886da342Sopenharmony_ci virtual void RegisterMyselfMatch(const WidgetMatchModel &matchModel); 46886da342Sopenharmony_ci virtual void SetWantMulti(bool isWantMulti); 47886da342Sopenharmony_ci virtual StrategyEnum GetStrategyType() const = 0; 48886da342Sopenharmony_ci virtual void LocateNode(const Window &window, ElementNodeIterator &elementNodeRef, 49886da342Sopenharmony_ci vector<Widget> &visitWidgets, vector<int> &targetWidgets, bool isSkipInvisible = true) = 0; 50886da342Sopenharmony_ci virtual ~SelectStrategy(); 51886da342Sopenharmony_ci 52886da342Sopenharmony_ci protected: 53886da342Sopenharmony_ci virtual void RefreshWidgetBounds(Widget &widget); 54886da342Sopenharmony_ci virtual void CalcWidgetVisibleBounds(Widget &widget); 55886da342Sopenharmony_ci std::vector<WidgetMatchModel> anchorMatch_; 56886da342Sopenharmony_ci std::vector<WidgetMatchModel> myselfMatch_; 57886da342Sopenharmony_ci bool wantMulti_ = false; 58886da342Sopenharmony_ci Rect windowBounds_{0, 0, 0, 0}; 59886da342Sopenharmony_ci std::vector<Rect> overplayWindowBoundsVec_; 60886da342Sopenharmony_ci std::map<string, Rect> clipers_; 61886da342Sopenharmony_ci }; 62886da342Sopenharmony_ci} // namespace OHOS::uitest 63886da342Sopenharmony_ci 64886da342Sopenharmony_ci#endif