[]
如果一个属性的类型是List类型,List的每一项又包含了子属性,那么可以通过标注@ObjectListProperty 注解,使得活字格设计器可以通过弹出二级对话框来编辑该属性。
注意:
itemType 声明的类型必须与项目属性类型一致
自定义对象必须实现 INamedObject 接口
自定义对象必须从 ObjectPropertyBase 类派生
@Data
@Icon("resources/Icon.png")
public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {
@ObjectListProperty(itemType = MyObj.class)
public List<INamedObject> list;
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
return new ExecuteResult();
}
@Override
public String toString() {
return "我的服务端命令插件";
}
}
@Data
public class MyObj extends ObjectPropertyBase implements INamedObject {
private String name;
private String description;
}
设计器中效果如下:
列表项目的子属性也可以通过注解来控制属性编辑控件。
下面例子中,额外声明了两个属性分别使用公式编辑器和下拉列表编辑器。具体标注的用法请参考之前的章节。
@Data
@Icon("resources/Icon.png")
public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {
@ObjectListProperty(itemType = MyObj.class)
public List<INamedObject> list;
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
return new ExecuteResult();
}
@Override
public String toString() {
return "我的服务端命令插件";
}
}
@Data
public class MyObj extends ObjectPropertyBase implements INamedObject {
private String name;
private String description;
@FormulaProperty
private Object formulaProperty;
@ComboProperty(valueList = "选项1|选项2|选项3")
public String type;
}
在设计器中效果如下:
如果需要更细致的控制,可以通过@ObjectListProperty 的其他属性来控制。
1.控制列表最大元素个数
设置 @ObjectListProperty 的 maxCount 属性。
代码
@Data
@Icon("resources/Icon.png")
public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {
@ObjectListProperty(itemType = MyObj.class,maxCount = 4)
public List<INamedObject> list;
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
return new ExecuteResult();
}
@Override
public String toString() {
return "我的服务端命令插件";
}
}
2.控制默认结点名称
设置 @ObjectListProperty 的 defaultName属性。
代码
@Data
@Icon("resources/Icon.png")
public class MyPluginServerCommand extends Command implements ICommandExecutableInServerSide {
@ObjectListProperty(itemType = MyObj.class,defaultName = "结点")
public List<INamedObject> list;
@Override
public ExecuteResult execute(IServerCommandExecuteContext dataContext) {
return new ExecuteResult();
}
@Override
public String toString() {
return "我的服务端命令插件";
}
}
设计器表现
@ListProperty和@ObjectListProperty解决的是完全相同的问题,只是表现方式不同,@ObjectListProperty 更适合项目子属性比较多的情况,而@ListProperty 则在子属性比较少的时候比较适用。