/** @packageDocumentation
 * @module SelectionSet
 */
import { Id64Arg } from "@itwin/core-bentley";
import { Point3d } from "@itwin/core-geometry";
import { DialogItem, DialogPropertySyncItem } from "@itwin/appui-abstract";
import { LocateFilterStatus, LocateResponse } from "../ElementLocateManager";
import { HitDetail } from "../HitDetail";
import { DecorateContext } from "../ViewContext";
import { PrimitiveTool } from "./PrimitiveTool";
import { BeButtonEvent, BeModifierKeys, BeTouchEvent, EventHandled } from "./Tool";
/** The method for choosing elements with the [[SelectionTool]]
 * @public
 * @extensions
 */
export declare enum SelectionMethod {
    /** Identify element(s) by picking for drag selection (inside/overlap for drag box selection determined by point direction and shift key) */
    Pick = 0,
    /** Identify elements by overlap with crossing line */
    Line = 1,
    /** Identify elements by box selection (inside/overlap for box selection determined by point direction and shift key) */
    Box = 2
}
/** The mode for choosing elements with the [[SelectionTool]]
 * @public
 * @extensions
 */
export declare enum SelectionMode {
    /** Identified elements replace the current selection set (use control key to add or remove) */
    Replace = 0,
    /** Identified elements are added to the current selection set */
    Add = 1,
    /** Identified elements are removed from the current selection set */
    Remove = 2
}
/** The processing method to use to update the current selection.
 * @public
 * @extensions
 */
export declare enum SelectionProcessing {
    /** Add element to selection. */
    AddElementToSelection = 0,
    /** Remove element from selection. */
    RemoveElementFromSelection = 1,
    /** If element is in selection remove it, else add it. */
    InvertElementInSelection = 2,
    /** Replace current selection with element. */
    ReplaceSelectionWithElement = 3
}
/** Tool for picking a set of elements of interest, selected by the user.
 * @public
 */
export declare class SelectionTool extends PrimitiveTool {
    static hidden: boolean;
    static toolId: string;
    static iconSpec: string;
    protected _isSelectByPoints: boolean;
    protected _isSuspended: boolean;
    protected readonly _points: Point3d[];
    private _selectionMethodValue;
    private _selectionModeValue;
    requireWriteableTarget(): boolean;
    autoLockTarget(): void;
    protected wantSelectionClearOnMiss(_ev: BeButtonEvent): boolean;
    protected wantEditManipulators(): boolean;
    protected wantPickableDecorations(): boolean;
    protected wantToolSettings(): boolean;
    get selectionMethod(): SelectionMethod;
    set selectionMethod(method: SelectionMethod);
    get selectionMode(): SelectionMode;
    set selectionMode(mode: SelectionMode);
    private static methodsMessage;
    private static _methodsName;
    private static _getMethodsDescription;
    private static modesMessage;
    private static _modesName;
    private static _getModesDescription;
    protected showPrompt(mode: SelectionMode, method: SelectionMethod): void;
    protected initSelectTool(): void;
    protected processMiss(_ev: BeButtonEvent): boolean;
    updateSelection(elementId: Id64Arg, process: SelectionProcessing): boolean;
    processSelection(elementId: Id64Arg, process: SelectionProcessing): Promise<boolean>;
    protected useOverlapSelection(ev: BeButtonEvent): boolean;
    private selectByPointsDecorate;
    protected selectByPointsProcess(origin: Point3d, corner: Point3d, ev: BeButtonEvent, method: SelectionMethod, overlap: boolean): void;
    protected selectByPointsStart(ev: BeButtonEvent): boolean;
    protected selectByPointsEnd(ev: BeButtonEvent): boolean;
    onMouseMotion(ev: BeButtonEvent): Promise<void>;
    selectDecoration(ev: BeButtonEvent, currHit?: HitDetail): Promise<EventHandled>;
    processHit(ev: BeButtonEvent, hit: HitDetail): Promise<EventHandled>;
    onMouseStartDrag(ev: BeButtonEvent): Promise<EventHandled>;
    onMouseEndDrag(ev: BeButtonEvent): Promise<EventHandled>;
    onDataButtonUp(ev: BeButtonEvent): Promise<EventHandled>;
    onResetButtonUp(ev: BeButtonEvent): Promise<EventHandled>;
    onSuspend(): Promise<void>;
    onUnsuspend(): Promise<void>;
    onTouchMoveStart(ev: BeTouchEvent, startEv: BeTouchEvent): Promise<EventHandled>;
    onTouchMove(ev: BeTouchEvent): Promise<void>;
    onTouchComplete(ev: BeTouchEvent): Promise<void>;
    onTouchCancel(ev: BeTouchEvent): Promise<void>;
    decorate(context: DecorateContext): void;
    onModifierKeyTransition(_wentDown: boolean, modifier: BeModifierKeys, _event: KeyboardEvent): Promise<EventHandled>;
    filterHit(hit: HitDetail, out?: LocateResponse): Promise<LocateFilterStatus>;
    onRestartTool(): Promise<void>;
    onCleanup(): Promise<void>;
    onPostInstall(): Promise<void>;
    static startTool(): Promise<boolean>;
    private syncSelectionMode;
    /** Used to supply DefaultToolSettingProvider with a list of properties to use to generate ToolSettings.  If undefined then no ToolSettings will be displayed
     * @beta
     */
    supplyToolSettingsProperties(): DialogItem[] | undefined;
    /** Used to send changes from UI back to Tool
     * @beta
     */
    applyToolSettingPropertyChange(updatedValue: DialogPropertySyncItem): Promise<boolean>;
}
//# sourceMappingURL=SelectTool.d.ts.map