import type { NobjcObject } from "objc-js";
import type { _NSBrowserDelegate } from "./NSBrowserDelegate.js";
import type { _NSColor } from "./NSColor.js";
import type { _NSControl } from "./NSControl.js";
import type { _NSEvent } from "./NSEvent.js";
import type { _NSImage } from "./NSImage.js";
import type { _NSMatrix } from "./NSMatrix.js";
import type { _NSScroller } from "./NSScroller.js";
import type { _NSArray } from "../Foundation/NSArray.js";
import type { _NSIndexPath } from "../Foundation/NSIndexPath.js";
import type { _NSIndexSet } from "../Foundation/NSIndexSet.js";
import type { _NSString } from "../Foundation/NSString.js";
import type { CGPoint } from "../structs/CGPoint.js";
import type { CGRect } from "../structs/CGRect.js";
import type { NSBrowserColumnResizingType } from "./NSBrowserColumnResizingType.js";
import type { NSDragOperation } from "./NSDragOperation.js";
export declare class _NSBrowser extends _NSControl {
    static alloc(): _NSBrowser;
    static new(): _NSBrowser;
    init(): _NSBrowser;
    /** Removes the column data stored under name from the applications user defaults. */
    static removeSavedColumnsWithAutosaveName$(name: _NSString): void;
    loadColumnZero(): void;
    /**
     * Returns the item at the given index path. This method can only be used if the delegate implements the item data source methods. The indexPath must be displayable in the browser.
     */
    itemAtIndexPath$(indexPath: _NSIndexPath): NobjcObject | null;
    /** Returns the item located at 'row' in 'column'. */
    itemAtRow$inColumn$(row: number, column: number): NobjcObject | null;
    /**
     * Returns the index path of the item whose children are displayed in the given column. This method can only be used if the delegate implements the item data source methods.
     */
    indexPathForColumn$(column: number): _NSIndexPath;
    /**
     * Returns whether the given item is a leaf item. This method can only be used if the delegate implements the item data source methods.
     */
    isLeafItem$(item: NobjcObject | null): boolean;
    /**
     * Updates a particular set of rows in 'column'. For rows that are visible, appropriate dataSource and delegate methods will be called and the row will be redrawn. For browsers that support variable row heights, the row height will not be re-queried from the delegate. This method can only be used if the delegate implements the item data source methods.
     */
    reloadDataForRowIndexes$inColumn$(rowIndexes: _NSIndexSet, column: number): void;
    /**
     * Returns the item that contains all children located in 'column'. In other words, it is the parent item for that column.
     */
    parentForItemsInColumn$(column: number): NobjcObject | null;
    /**
     * Scrolls 'row' to be visible within 'column'. 'column' will not be scrolled visible. To scroll 'column' to visible, first call -[browser scrollColumnToVisible:column].
     */
    scrollRowToVisible$inColumn$(row: number, column: number): void;
    setTitle$ofColumn$(string_: _NSString, column: number): void;
    titleOfColumn$(column: number): _NSString | null;
    setPath$(path: _NSString): boolean;
    path(): _NSString;
    pathToColumn$(column: number): _NSString;
    selectedCellInColumn$(column: number): NobjcObject | null;
    selectRow$inColumn$(row: number, column: number): void;
    selectedRowInColumn$(column: number): number;
    /** Sets the selected row 'indexes' in the matrix located at 'column'. */
    selectRowIndexes$inColumn$(indexes: _NSIndexSet, column: number): void;
    /** Returns the selected cell indexes in the matrix located at 'column'. */
    selectedRowIndexesInColumn$(column: number): _NSIndexSet | null;
    reloadColumn$(column: number): void;
    validateVisibleColumns(): void;
    scrollColumnsRightBy$(shiftAmount: number): void;
    scrollColumnsLeftBy$(shiftAmount: number): void;
    scrollColumnToVisible$(column: number): void;
    /** Adds a column at the end. To remove columns, use -setLastColumn: */
    addColumn(): void;
    loadedCellAtRow$column$(row: number, col: number): NobjcObject | null;
    selectAll$(sender: NobjcObject | null): void;
    tile(): void;
    doClick$(sender: NobjcObject | null): void;
    doDoubleClick$(sender: NobjcObject | null): void;
    sendAction(): boolean;
    titleFrameOfColumn$(column: number): CGRect;
    drawTitleOfColumn$inRect$(column: number, rect: CGRect): void;
    frameOfColumn$(column: number): CGRect;
    frameOfInsideOfColumn$(column: number): CGRect;
    /**
     * Returns the frame of the row at 'row' / 'column' including the area for the expandable arrow. The returned NSRect is in the NSBrowser coordinate space.
     */
    frameOfRow$inColumn$(row: number, column: number): CGRect;
    /**
     * Finds the row and column located at 'point', returning YES if both can be found. If a row does not exist at 'point', then -1 is set for the row. If a column does not exist at 'point', then -1 is set for the column. 'point' is expected to be in the NSBrowser's coordinate system.
     */
    getRow$column$forPoint$(row: NobjcObject | null, column: NobjcObject | null, point: CGPoint): boolean;
    /**
     * These methods convert between column width (the column's scrollview), and the content width (the matrix in the scrollview). For example, to guarantee that 16 pixels of your browser cell are always visible, call [browser setMinColumnWidth:[browser columnWidthForColumnContentWidth:16]]
     */
    columnWidthForColumnContentWidth$(columnContentWidth: number): number;
    columnContentWidthForColumnWidth$(columnWidth: number): number;
    /**
     * setWidth:ofColumn: does nothing if columnResizingType is NSBrowserAutoColumnResizing. Otherwise, Sets the width of the specified column. Due to binary compatibility constraints, you may still set the default width for new columns by passing a columnIndex of -1; you are encouraged to use -setDefaultColumnWidth: instead. NSBrowserColumnConfigurationDidChangeNotification will be posted (not immediately) if necessary. The receiver will autosave its column configuration if necessary.
     */
    setWidth$ofColumn$(columnWidth: number, columnIndex: number): void;
    widthOfColumn$(column: number): number;
    /**
     * If the delegate implements -browser:heightOfRow:inColumn:, this method immediately re-tiles the browser columns using row heights it provides.
     */
    noteHeightOfRowsWithIndexesChanged$inColumn$(indexSet: _NSIndexSet, columnIndex: number): void;
    /**
     * Persistently sets the default width for new columns which don't otherwise have initial width from either defaults or the delegate. This method replaces -setWidth:ofColumn: with a columnIndex of -1.
     */
    setDefaultColumnWidth$(columnWidth: number): void;
    defaultColumnWidth(): number;
    /**
     * The return value indicates whether the receiver can attempt to initiate a drag for the given event. You can override this method and return NO to disallow initiating drags at the location in the given event. By default, the method will return YES if rowIndexes contains at least one item, and each item is enabled. If the equivalent delegate method is present, it will be preferred over this method, and you can safely call this method from your delegate.
     */
    canDragRowsWithIndexes$inColumn$withEvent$(rowIndexes: _NSIndexSet, column: number, event: _NSEvent): boolean;
    /**
     * This method computes and returns an image to use for dragging. You can override this to return a custom drag image, or call it to get the default drag image from the delegate method. 'rowIndexes' are the indexes of the cells being dragged in matrix 'column'. 'event' is a reference to the mouse down event that began the drag. 'dragImageOffset' is an in/out parameter. This method will be called with dragImageOffset set to NSZeroPoint, but it can be modified to re-position the returned image. A dragImageOffset of NSZeroPoint will cause the image to be centered under the mouse. By default, an image will be created that contain the visible cells within 'rowIndexes'. If the equivalent delegate method is present, it will be preferred over this method, and you can safely call this method from your delegate.
     */
    draggingImageForRowsWithIndexes$inColumn$withEvent$offset$(rowIndexes: _NSIndexSet, column: number, event: _NSEvent, dragImageOffset: NobjcObject | null): _NSImage | null;
    /**
     * Configures the value returned from -draggingSourceOperationMaskForLocal:. An isLocal value of YES indicates that 'mask' applies when the destination object is in the same application. By default, NSDragOperationEvery will be returned. An isLocal value of NO indicates that 'mask' applies when the destination object in an application outside the receiver's application. By default, NSDragOperationNone is returned. NSBrowser will save the values you set for each isLocal setting. You typically will invoke this method, and not override it.
     */
    setDraggingSourceOperationMask$forLocal$(mask: NSDragOperation, isLocal: boolean): void;
    /**
     * Begins editing the item at the specified path. event may be nil if programmatically editing. The cell's contents will be selected if select is YES. Overriding this method will not affect the editing behavior of the browser.
     */
    editItemAtIndexPath$withEvent$select$(indexPath: _NSIndexPath, event: _NSEvent | null, select: boolean): void;
    /**
     * This property has been non-functional since before 10.0.
     * @deprecated
     */
    setAcceptsArrowKeys$(flag: boolean): void;
    /** @deprecated */
    acceptsArrowKeys(): boolean;
    /**
     * Use of -displayColumn: is deprecated in 10.3. Use setNeedsDisplayInRect: instead.
     * @deprecated
     */
    displayColumn$(column: number): void;
    /**
     * Use of -displayAllColumns; is deprecated in 10.3. Use setNeedsDisplay/InRect: instead.
     * @deprecated
     */
    displayAllColumns(): void;
    /**
     * Use of -scrollViaScroller: is deprecated in 10.3. Continuous scrolling no longer requires this functionality.
     * @deprecated
     */
    scrollViaScroller$(sender: _NSScroller): void;
    /**
     * Use of -updateScroller is deprecated in 10.3. Continuous scrolling no longer requires this functionality.
     * @deprecated
     */
    updateScroller(): void;
    /**
     * Matrix based NSBrowser is deprecated in 10.10.
     * @deprecated Use the item based NSBrowser instead
     */
    setMatrixClass$(factoryId: NobjcObject): void;
    /** @deprecated Use the item based NSBrowser instead */
    matrixClass(): NobjcObject;
    /** @deprecated Use the item based NSBrowser instead */
    columnOfMatrix$(matrix: _NSMatrix): number;
    /** @deprecated Use the item based NSBrowser instead */
    matrixInColumn$(column: number): _NSMatrix | null;
    loaded(): boolean;
    doubleAction(): string | null;
    setDoubleAction$(value: string | null): void;
    /** NSCell * */
    cellPrototype(): NobjcObject;
    setCellPrototype$(value: NobjcObject): void;
    delegate(): _NSBrowserDelegate | null;
    setDelegate$(value: _NSBrowserDelegate | null): void;
    reusesColumns(): boolean;
    setReusesColumns$(value: boolean): void;
    hasHorizontalScroller(): boolean;
    setHasHorizontalScroller$(value: boolean): void;
    autohidesScroller(): boolean;
    setAutohidesScroller$(value: boolean): void;
    separatesColumns(): boolean;
    setSeparatesColumns$(value: boolean): void;
    titled(): boolean;
    setTitled$(value: boolean): void;
    minColumnWidth(): number;
    setMinColumnWidth$(value: number): void;
    maxVisibleColumns(): number;
    setMaxVisibleColumns$(value: number): void;
    allowsMultipleSelection(): boolean;
    setAllowsMultipleSelection$(value: boolean): void;
    allowsBranchSelection(): boolean;
    setAllowsBranchSelection$(value: boolean): void;
    allowsEmptySelection(): boolean;
    setAllowsEmptySelection$(value: boolean): void;
    takesTitleFromPreviousColumn(): boolean;
    setTakesTitleFromPreviousColumn$(value: boolean): void;
    sendsActionOnArrowKeys(): boolean;
    setSendsActionOnArrowKeys$(value: boolean): void;
    pathSeparator(): _NSString;
    setPathSeparator$(value: _NSString): void;
    /**
     * Returns the column and row clicked on to display a context menu. These methods will return -1 when no menu is active.
     */
    clickedColumn(): number;
    clickedRow(): number;
    selectedColumn(): number;
    /**
     * For the item based browser, selectedCells returns a copy of all prepared cells in the selected row in the selected column
     */
    selectedCells(): _NSArray | null;
    /**
     * Returns the index path of the item selected in the browser, or nil if there is no selection. The setter sets the browser's selection to the item at path. Throws an exception if the path is invalid. This method can only be used if the delegate implements the item data source methods.
     */
    selectionIndexPath(): _NSIndexPath;
    setSelectionIndexPath$(value: _NSIndexPath): void;
    /**
     * Returns the index paths of all items selected in the browser. The setter sets the browser's selection to the specified index paths. Throws an exception if any of the paths are invalid. This method can only be used if the delegate implements the item data source methods.
     */
    selectionIndexPaths(): _NSArray;
    setSelectionIndexPaths$(value: _NSArray): void;
    /**
     * Returns the last loaded column. This is equal to the total number of columns minus 1. When setting. 'column' must be equal to or less than -lastColumn. To add more columns, use -addColumn.
     */
    lastColumn(): number;
    setLastColumn$(value: number): void;
    numberOfVisibleColumns(): number;
    firstVisibleColumn(): number;
    lastVisibleColumn(): number;
    titleHeight(): number;
    /** Default is NSBrowserAutoColumnResizing. This setting is persistent. */
    columnResizingType(): NSBrowserColumnResizingType;
    setColumnResizingType$(value: NSBrowserColumnResizingType): void;
    /**
     * Default is NO. This setting is persistent. This setting only applies to NSBrowserUserColumnResizing type browsers. If YES, the browser defaults to resizing all columns simultaneously, otherwise it defaults to single column resizing. Holding down the option key while resizing switches the type of resizing used.
     */
    prefersAllColumnUserResizing(): boolean;
    setPrefersAllColumnUserResizing$(value: boolean): void;
    /**
     * Get and set the rowHeight. The value must be greater than 0. Calling -setRowHeight: with a non-pixel aligning (fractional) value will be forced to a pixel aligning (integral) value. For variable row height browsers (ones that have the delegate implement -browser:heightOfRow:column:), -rowHeight will be used to draw alternating rows past the last row in each browser column. The default value is 17.0. Note: The rowHeight methods are only valid when using the item delegate methods introduced in Mac OS 10.6. (see NSObject(NSBrowserDelegate)). An exception is thrown if using the older matrix delegate methods
     */
    rowHeight(): number;
    setRowHeight$(value: number): void;
    /**
     * Sets the name used to automatically save the receivers column configuration. This setting is persistent. If name is different from the current name, this method also reads in the saved column configuration for the new name and applies the values to the browser. Column configuration is defined as an array of column content widths. One width is saved for each level the user has reached. That is, browser saves column width based on depth, not based on unique paths. To do more complex column persistence, you should register for NSBrowserColumnConfigurationDidChangeNotifications and handle persistence yourself.
     */
    columnsAutosaveName(): _NSString;
    setColumnsAutosaveName$(value: _NSString): void;
    /**
     * Allow type selection in this NSBrowser. The default for 'allowsTypeSelect' is YES.
     */
    allowsTypeSelect(): boolean;
    setAllowsTypeSelect$(value: boolean): void;
    /**
     * The background color to be drawn. By default, it will be set [NSColor whiteColor]. You can use [NSColor clearColor] to make the background transparent. NSBrowser will return YES from isOpaque if the backgroundColor has an alphaComponent of 1.0 and it doesn't have a title, otherwise, it will return NO. Calling setBackgroundColor: will cause all NSMatrix instances have setDrawsBackground:NO be called in order for the NSBrowser's background color to show through. When drawing with the background color, NSCompositeSourceOver is used for the compositing operation.
     */
    backgroundColor(): _NSColor;
    setBackgroundColor$(value: _NSColor): void;
}
