001package com.ericlam.mc.eldgui.view;
002
003import com.ericlam.mc.eldgui.component.Component;
004import com.ericlam.mc.eldgui.component.ComponentFactory;
005
006/**
007 * UI 操作類,主要用於界面渲染時存放組件和綁定屬性
008 */
009public interface UIContext {
010
011    /**
012     * 指定一個 pattern 進行操作
013     * @param pattern pattern
014     * @return this
015     */
016    PatternComponentBuilder pattern(char pattern);
017
018    /**
019     * 獲取已注冊的組件工廠
020     * @param factoryCls 組件工廠類,必須為 interface
021     * @param <T> 工廠類
022     * @return 指定組件工廠
023     */
024    <T extends ComponentFactory<T>> T factory(Class<T> factoryCls);
025
026    /**
027     * 針對指定 pattern 的操作器
028     */
029    interface PatternComponentBuilder {
030
031        /**
032         * 填滿組件
033         * @param component 組件
034         * @return this
035         */
036        PatternComponentBuilder fill(Component component);
037
038        /**
039         * 新增組件
040         * @param components 多個組件
041         * @return this
042         */
043        PatternComponentBuilder components(Component... components);
044
045        /**
046         * 根據位置設定組件
047         * @param pos 位置,僅爲 pattern 内的位置
048         * @param component 組件
049         * @return this
050         */
051        PatternComponentBuilder component(int pos, Component component);
052
053        /**
054         * 綁定該 pattern 内所有物品的屬性
055         * @param key 鍵
056         * @param value 數值
057         * @return this
058         */
059        PatternComponentBuilder bindAll(String key, Object value);
060
061        /**
062         * 返回並執行第二個 pattern 的操作
063         * @return UI context
064         */
065        UIContext and();
066
067    }
068
069}