接口作用
在设计器中提供更多类型的形态扩展。
接口内容
主要接口
package com.fr.design.fun;
import com.fr.base.present.Present;
import com.fr.design.beans.FurtherBasicBeanPane;
import com.fr.stable.fun.mark.Mutable;
public interface PresentKindProvider extends Mutable{
int CURRENT_LEVEL = 1;
String MARK_STRING = "PresentKindProvider";
/**
* 形态设置界面
* @return 形态设置界面
*/
FurtherBasicBeanPane<? extends Present> appearanceForPresent();
/**
* 在形态设置面板上显示的名字
* @return 名字
*/
String title();
/**
* 该形态对应的类
* @return 类
*/
Class<? extends Present> kindOfPresent();
/**
* 菜单快捷键
* @return 快捷点对应的字符
*/
char mnemonic();
}
关联接口
package com.fr.base.present;
import com.fr.base.Style;
import com.fr.script.Calculator;
import com.fr.stable.ColumnRow;
import com.fr.stable.DependenceProvider;
import com.fr.stable.script.CalculatorProvider;
import com.fr.stable.script.ExTool;
import com.fr.stable.xml.XMLable;
/**
* 形态。该类用于处理同事拥有实际值和显示值并且这两个值可能不同的对象。
*/
public interface Present extends DependenceProvider, XMLable {
String XML_TAG = "Present";
/**
* 返回经过形态计算后原来的值的结果
*
* @param value 原始值
* @param calculator 算子
* @return 形态计算后的结果
*/
Object present(Object value, Calculator calculator);
/**
* 返回经过形态计算后格子的值的结果
*
* @param value 原始格子的值
* @param calculator 算子
* @param cr 格子所处的行列位置
* @return 形态计算后的结果
*/
Object present(Object value, Calculator calculator, ColumnRow cr);
/**
* 记录形态中使用的相关格子,当格子值改变后,形态值需要相应做改变
*
* @param calculator 算子
* @param exTool 格子间关系计算工具
* @param currentCr 当前行列
*/
void analyzeCorrelative(CalculatorProvider calculator, ExTool exTool, ColumnRow currentCr);
/**
* 返回形态的原型,比如NormalPresent在设计器界面的渲染是跟其他present区分开的
*
* @return 形态的原型
*/
Object getPresentPrototype();
/**
* 处理形态中涉及到的style的改变,传入单元格
* 形态中处理格子的样式
*
* @param cellStyle 单元格的样式
* @param value 单元格的值
*/
Style modifyCellStyle(Style cellStyle, Object value);
/**
* 对当前形态中涉及到的单元格值进行预处理
*
* @param value 值
* @param calculator 算子
*/
void valuePretreatment(Object value, CalculatorProvider calculator);
}
通常情況下为了更好的保持兼容性,都是继承com.fr.base.present.AbstractPresent,而不直接实现接口com.fr.base.present.Present。
接口接入
<extra-designer>
<PresentKindProvider class="com.fr.plugin.present.PresentKindBridge"/>
</extra-designer>
示例效果
模板设计如下所示:
预览效果如下所示:
接口示例
示例源码:https://code.fanruan.com/fanruan/demo-show-present
注意事项
这是一个示例,需要更加高级的功能需要进一步开发。