import { UIComponent } from "./UIComponent";
import { ISelect } from "./ISelect";
import { Text } from "../display/Text";
import { Event } from "../events/Event";
import { AutoBitmap } from "./AutoBitmap";
import { Handler } from "../utils/Handler";
/**
 * 当按钮的选中状态（ <code>selected</code> 属性）发生改变时调度。
 * @eventType laya.events.Event
 */
/**
 * <code>Button</code> 组件用来表示常用的多态按钮。 <code>Button</code> 组件可显示文本标签、图标或同时显示两者。	 *
 * <p>可以是单态，两态和三态，默认三态(up,over,down)。</p>
 *
 * @example <caption>以下示例代码，创建了一个 <code>Button</code> 实例。</caption>
 * package
 *	{
 *		import laya.ui.Button;
 *		import laya.utils.Handler;
 *		public class Button_Example
 *		{
 *			public function Button_Example()
 *			{
 *				Laya.init(640, 800);//设置游戏画布宽高。
 *				Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
 *				Laya.loader.load("resource/ui/button.png", Handler.create(this,onLoadComplete));//加载资源。
 *			}
 *			private function onLoadComplete():void
 *			{
 *				trace("资源加载完成！");
 *				var button:Button = new Button("resource/ui/button.png","label");//创建一个 Button 类的实例对象 button ,并传入它的皮肤。
 *				button.x = 100;//设置 button 对象的属性 x 的值，用于控制 button 对象的显示位置。
 *				button.y = 100;//设置 button 对象的属性 y 的值，用于控制 button 对象的显示位置。
 *				button.clickHandler = new Handler(this, onClickButton,[button]);//设置 button 的点击事件处理器。
 *				Laya.stage.addChild(button);//将此 button 对象添加到显示列表。
 *			}
 *			private function onClickButton(button:Button):void
 *			{
 *				trace("按钮button被点击了！");
 *			}
 *		}
 *	}
 * @example
 * Laya.init(640, 800);//设置游戏画布宽高、渲染模式。
 * Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
 * Laya.loader.load("resource/ui/button.png",laya.utils.Handler.create(this,loadComplete));//加载资源
 * function loadComplete()
 * {
 *     console.log("资源加载完成！");
 *     var button = new laya.ui.Button("resource/ui/button.png","label");//创建一个 Button 类的实例对象 button ,传入它的皮肤skin和标签label。
 *     button.x =100;//设置 button 对象的属性 x 的值，用于控制 button 对象的显示位置。
 *     button.y =100;//设置 button 对象的属性 y 的值，用于控制 button 对象的显示位置。
 *     button.clickHandler = laya.utils.Handler.create(this,onClickButton,[button],false);//设置 button 的点击事件处理函数。
 *     Laya.stage.addChild(button);//将此 button 对象添加到显示列表。
 * }
 * function onClickButton(button)
 * {
 *     console.log("按钮被点击了。",button);
 * }
 * @example
 * import Button=laya.ui.Button;
 * import Handler=laya.utils.Handler;
 * class Button_Example{
 *     constructor()
 *     {
 *         Laya.init(640, 800);
 *         Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
 *         Laya.loader.load("resource/ui/button.png", laya.utils.Handler.create(this,this.onLoadComplete));//加载资源。
 *     }
 *     private onLoadComplete()
 *     {
 *         var button:Button = new Button("resource/ui/button.png","label");//创建一个 Button 类的实例对象 button ,并传入它的皮肤。
 *         button.x = 100;//设置 button 对象的属性 x 的值，用于控制 button 对象的显示位置。
 *         button.y = 100;//设置 button 对象的属性 y 的值，用于控制 button 对象的显示位置。
 *         button.clickHandler = new Handler(this, this.onClickButton,[button]);//设置 button 的点击事件处理器。
 *         Laya.stage.addChild(button);//将此 button 对象添加到显示列表。
 *     }
 *     private onClickButton(button:Button):void
 *     {
 *         console.log("按钮button被点击了！")
 *     }
 * }
 */
export declare class Button extends UIComponent implements ISelect {
    /**
     * 按钮状态集。
     */
    protected static stateMap: any;
    /**
     * 指定按钮按下时是否是切换按钮的显示状态。
     *
     * @example 以下示例代码，创建了一个 <code>Button</code> 实例，并设置为切换按钮。
     * @example
     * package
     *	{
     *		import laya.ui.Button;
     *		import laya.utils.Handler;
     *		public class Button_toggle
     *		{
     *			public function Button_toggle()
     *			{
     *				Laya.init(640, 800);//设置游戏画布宽高、渲染模式。
     *				Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
     *				Laya.loader.load("resource/ui/button.png", Handler.create(this,onLoadComplete));
     *			}
     *			private function onLoadComplete():void
     *			{
     *				trace("资源加载完成！");
     *				var button:Button = new Button("resource/ui/button.png","label");//创建一个 Button 实例对象 button ,传入它的皮肤skin和标签label。
     *				button.x = 100;//设置 button 对象的属性 x 的值，用于控制 button 对象的显示位置。
     *				button.y = 100;//设置 button 对象的属性 y 的值，用于控制 button 对象的显示位置。
     *				button.toggle = true;//设置 button 对象为切换按钮。
     *				button.clickHandler = new Handler(this, onClickButton,[button]);//设置 button 的点击事件处理器。
     *				Laya.stage.addChild(button);//将此 button 对象添加到显示列表。
     *	 		}
     *			private function onClickButton(button:Button):void
     *			{
     *				trace("button.selected = "+ button.selected);
     *			}
     *		}
     *	}
     * @example
     * Laya.init(640, 800);//设置游戏画布宽高、渲染模式。
     * Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
     * Laya.loader.load("resource/ui/button.png",laya.utils.Handler.create(this,loadComplete));//加载资源
     * function loadComplete()
     * {
     *     console.log("资源加载完成！");
     *     var button = new laya.ui.Button("resource/ui/button.png","label");//创建一个 Button 类的实例对象 button ,传入它的皮肤skin和标签label。
     *     button.x =100;//设置 button 对象的属性 x 的值，用于控制 button 对象的显示位置。
     *     button.y =100;//设置 button 对象的属性 y 的值，用于控制 button 对象的显示位置。
     *     button.toggle = true;//设置 button 对象为切换按钮。
     *     button.clickHandler = laya.utils.Handler.create(this,onClickButton,[button],false);//设置 button 的点击事件处理器。
     *     Laya.stage.addChild(button);//将此 button 对象添加到显示列表。
     * }
     * function onClickButton(button)
     * {
     *     console.log("button.selected = ",button.selected);
     * }
     * @example
     * Laya.init(640, 800);//设置游戏画布宽高、渲染模式。
     * Laya.stage.bgColor = "#efefef";//设置画布的背景颜色。
     * Laya.loader.load("button.png", null,null, null, null, null);//加载资源
     * function loadComplete() {
     *     console.log("资源加载完成！");
     *     var button:laya.ui.Button = new laya.ui.Button("button.png", "label");//创建一个 Button 类的实例对象 button ,传入它的皮肤skin和标签label。
     *     button.x = 100;//设置 button 对象的属性 x 的值，用于控制 button 对象的显示位置。
     *     button.y = 100;//设置 button 对象的属性 y 的值，用于控制 button 对象的显示位置。
     *     button.toggle = true;//设置 button 对象为切换按钮。
     *     button.clickHandler = laya.utils.Handler.create(this, onClickButton, [button], false);//设置 button 的点击事件处理器。
     *     Laya.stage.addChild(button);//将此 button 对象添加到显示列表。
     * }
     * function onClickButton(button) {
     *     console.log("button.selected = ", button.selected);
     * }
     */
    toggle: boolean;
    /**
     * @private
     */
    protected _bitmap: AutoBitmap;
    /**
     * @private
     * 按钮上的文本。
     */
    protected _text: Text;
    /**
     * @private
     * 按钮文本标签的颜色值。
     */
    protected _labelColors: any[];
    /**
     * @private
     * 按钮文本标签描边的颜色值。
     */
    protected _strokeColors: any[];
    /**
     * @private
     * 按钮的状态值。
     */
    protected _state: number;
    /**
     * @private
     * 表示按钮的选中状态。
     */
    protected _selected: boolean;
    /**
     * @private
     * 按钮的皮肤资源。
     */
    protected _skin: string;
    /**
     * @private
     * 指定此显示对象是否自动计算并改变大小等属性。
     */
    protected _autoSize: boolean;
    /**
     * @private
     * 按钮的状态数。
     */
    protected _stateNum: number;
    /**
     * @private
     * 源数据。
     */
    protected _sources: any[];
    /**
     * @private
     * 按钮的点击事件函数。
     */
    protected _clickHandler: Handler;
    /**
     * @private
     */
    protected _stateChanged: boolean;
    /**
     * 创建一个新的 <code>Button</code> 类实例。
     * @param skin 皮肤资源地址。
     * @param label 按钮的文本内容。
     */
    constructor(skin?: string, label?: string);
    /**
     * @inheritDoc
     * @override
     */
    destroy(destroyChild?: boolean): void;
    /**
     * @inheritDoc
     * @override
     */
    protected createChildren(): void;
    /**@private */
    protected createText(): void;
    /**@inheritDoc
     * @override
    */
    protected initialize(): void;
    /**
     * 对象的 <code>Event.MOUSE_OVER、Event.MOUSE_OUT、Event.MOUSE_DOWN、Event.MOUSE_UP、Event.CLICK</code> 事件侦听处理函数。
     * @param e Event 对象。
     */
    protected onMouse(e: Event): void;
    /**
     * <p>对象的皮肤资源地址。</p>
     * 支持单态，两态和三态，用 <code>stateNum</code> 属性设置
     * <p>对象的皮肤地址，以字符串表示。</p>
     * @see #stateNum
     */
    get skin(): string;
    set skin(value: string);
    protected _skinLoaded(): void;
    /**
     * <p>指定对象的状态值，以数字表示。</p>
     * <p>默认值为3。此值决定皮肤资源图片的切割方式。</p>
     * <p><b>取值：</b>
     * <li>1：单态。图片不做切割，按钮的皮肤状态只有一种。</li>
     * <li>2：两态。图片将以竖直方向被等比切割为2部分，从上向下，依次为
     * 弹起状态皮肤、
     * 按下和经过及选中状态皮肤。</li>
     * <li>3：三态。图片将以竖直方向被等比切割为3部分，从上向下，依次为
     * 弹起状态皮肤、
     * 经过状态皮肤、
     * 按下和选中状态皮肤</li>
     * </p>
     */
    get stateNum(): number;
    set stateNum(value: number);
    /**
     * @private
     * 对象的资源切片发生改变。
     */
    protected changeClips(): void;
    /**
     * @inheritDoc
     * @override
     */
    protected measureWidth(): number;
    /**
     * @inheritDoc
     * @override
     */
    protected measureHeight(): number;
    /**
     * 按钮的文本内容。
     */
    get label(): string;
    set label(value: string);
    /**
     * 表示按钮的选中状态。
     * <p>如果值为true，表示该对象处于选中状态。否则该对象处于未选中状态。</p>
     * @implements
     */
    get selected(): boolean;
    set selected(value: boolean);
    /**
     * 对象的状态值。
     * @see #stateMap
     */
    protected get state(): number;
    protected set state(value: number);
    /**
     * @private
     * 改变对象的状态。
     */
    protected changeState(): void;
    /**
     * 表示按钮各个状态下的文本颜色。
     * <p><b>格式:</b> "upColor,overColor,downColor,disableColor"。</p>
     */
    get labelColors(): string;
    set labelColors(value: string);
    /**
     * 表示按钮各个状态下的描边颜色。
     * <p><b>格式:</b> "upColor,overColor,downColor,disableColor"。</p>
     */
    get strokeColors(): string;
    set strokeColors(value: string);
    /**
     * 表示按钮文本标签的边距。
     * <p><b>格式：</b>"上边距,右边距,下边距,左边距"。</p>
     */
    get labelPadding(): string;
    set labelPadding(value: string);
    /**
     * 表示按钮文本标签的字体大小。
     * @see laya.display.Text.fontSize()
     */
    get labelSize(): number;
    set labelSize(value: number);
    /**
     * <p>描边宽度（以像素为单位）。</p>
     * 默认值0，表示不描边。
     * @see laya.display.Text.stroke()
     */
    get labelStroke(): number;
    set labelStroke(value: number);
    /**
     * <p>描边颜色，以字符串表示。</p>
     * 默认值为 "#000000"（黑色）;
     * @see laya.display.Text.strokeColor()
     */
    get labelStrokeColor(): string;
    set labelStrokeColor(value: string);
    /**
     * 表示按钮文本标签是否为粗体字。
     * @see laya.display.Text.bold()
     */
    get labelBold(): boolean;
    set labelBold(value: boolean);
    /**
     * 表示按钮文本标签的字体名称，以字符串形式表示。
     * @see laya.display.Text.font()
     */
    get labelFont(): string;
    set labelFont(value: string);
    /**标签对齐模式，默认为居中对齐。*/
    get labelAlign(): string;
    set labelAlign(value: string);
    /**
     * 对象的点击事件处理器函数（无默认参数）。
     * @implements
     */
    get clickHandler(): Handler;
    set clickHandler(value: Handler);
    /**
     * 按钮文本标签 <code>Text</code> 控件。
     */
    get text(): Text;
    /**
     * <p>当前实例的位图 <code>AutoImage</code> 实例的有效缩放网格数据。</p>
     * <p>数据格式："上边距,右边距,下边距,左边距,是否重复填充(值为0：不重复填充，1：重复填充)"，以逗号分隔。
     * <ul><li>例如："4,4,4,4,1"</li></ul></p>
     * @see laya.ui.AutoBitmap.sizeGrid
     */
    get sizeGrid(): string;
    set sizeGrid(value: string);
    /**
     * @inheritDoc
     * @override
     */
    set width(value: number);
    /**
     * @inheritDoc
     * @override
     */
    get width(): number;
    /**
     * @inheritDoc
     * @override
     */
    set height(value: number);
    /**
     * @inheritDoc
     * @override
     */
    get height(): number;
    /**
     * @inheritDoc
     * @override
     */
    set dataSource(value: any);
    /**
     * @inheritDoc
     * @override
     */
    get dataSource(): any;
    /**图标x,y偏移，格式：100,100*/
    get iconOffset(): string;
    set iconOffset(value: string);
    /**@private */
    protected _setStateChanged(): void;
}
