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}