001package com.ericlam.mc.eldgui.component.factory;
002
003import com.ericlam.mc.eldgui.component.ComponentFactory;
004
005/**
006 * 數字輸入組件工廠,可用任意數字類型
007 */
008public interface NumInputFactory extends ComponentFactory<NumInputFactory> {
009
010    /**
011     *
012     * @param label 標題
013     * @return this
014     */
015    NumInputFactory label(String label);
016
017
018    /**
019     * 綁定指定數字類型
020     * @param type 數字類型
021     * @param <T> 數字類型
022     * @return 泛型數字輸入組件工廠
023     */
024    <T extends Number> NumberTypeFactory<T> useNumberType(Class<T> type);
025
026    /**
027     *
028     * @param wait 等待輸入時間 (ticks)
029     * @return this
030     */
031    NumInputFactory waitForInput(long wait);
032
033    /**
034     *
035     * @param message 輸入時的訊息
036     * @return this
037     */
038    NumInputFactory messageInput(String message);
039
040    /**
041     *
042     * @param message 無效文字時的訊息
043     * @return this
044     */
045    NumInputFactory messageInvalidNumber(String message);
046
047    /**
048     * 設置禁用
049     * @return this
050     */
051    NumInputFactory disabled();
052
053    /**
054     * 泛型數字輸入組件工廠
055     * @param <T> 數字類型
056     */
057    interface NumberTypeFactory<T extends Number> {
058
059        /**
060         * 默認數值為 0
061         * @param min 最少數字
062         * @return this
063         */
064        NumberTypeFactory<T> min(T min);
065
066        /**
067         * 默認數值為 64
068         * @param max 最大數字
069         * @return this
070         */
071        NumberTypeFactory<T> max(T max);
072
073        /**
074         * 默認數值為 1
075         * @param step 增加/減少數量
076         * @return this
077         */
078        NumberTypeFactory<T> step(T step);
079
080
081        /**
082         * 綁定 model 屬性
083         * @param field 屬性
084         * @param initValue 初始數值
085         * @return this
086         */
087        NumberTypeFactory<T> bindInput(String field, T initValue);
088
089        /**
090         * 返回組件工廠
091         * @return this
092         */
093        NumInputFactory then();
094
095    }
096
097}