自定义EMF程序属性视图的Cell Editor

简介:

覆盖EMF生成的XXXEditor.java的getPropertySheetPage()方法,其余步骤见以下代码里的注释,这个例子是对特定类型的EAttribute(eType为"COM.YOUR.ETYPE")使用自定义的对话框来设置属性值。

/**
 * This accesses a cached version of the property sheet.
 * <!-- begin-user-doc -->
 * <!-- end-user-doc -->
 * @generated NOT
 */
public IPropertySheetPage getPropertySheetPage() {
    if (propertySheetPage == null) {
        propertySheetPage =
            new ExtendedPropertySheetPage(editingDomain) {
                public void setSelectionToViewer(List selection) {
                    BMEditor.this.setSelectionToViewer(selection);
                    BMEditor.this.setFocus();
                }

                public void setActionBars(IActionBars actionBars) {
                    super.setActionBars(actionBars);
                    getActionBarContributor().shareGlobalActions(this, actionBars);
                }
            };
        //Use custom content provider here
        propertySheetPage.setPropertySourceProvider(new BMAdapterFactoryContentProvider(adapterFactory));
    }

    return propertySheetPage;
}

/**
 * Apply customized cell editor for custom datatype 
 * @author zhanghao
 *
 */
class BMAdapterFactoryContentProvider extends AdapterFactoryContentProvider{
    
    public BMAdapterFactoryContentProvider(AdapterFactory adapterFactory) {
        super(adapterFactory);
    }

    @Override
    protected IPropertySource createPropertySource(Object object, IItemPropertySource itemPropertySource) {
        return new PropertySource(object, itemPropertySource) {
            @Override
            protected IPropertyDescriptor createPropertyDescriptor(IItemPropertyDescriptor itemPropertyDescriptor) {
                return new PropertyDescriptor(object, itemPropertyDescriptor) {
                    @Override
                    public CellEditor createPropertyEditor(Composite composite) {
                        Object genericFeature = itemPropertyDescriptor.getFeature(object);
                        if(genericFeature instanceof EStructuralFeature && ((EStructuralFeature)genericFeature).getEType() instanceof EDataType){
                            EDataType eType=(EDataType)((EStructuralFeature)genericFeature).getEType();
                            if("COM.YOUR.DATATYPE".equals(eType.getInstanceTypeName())){
                                return new DialogCellEditor(composite) {
                                    @Override
                                    protected Object openDialogBox(Control cellEditorWindow) {
                                        //Open your dialog to read user input
                                        ExpressionDialog dialog = new ExpressionDialog(cellEditorWindow.getShell());
                                        Resource resource = BMEditor.this.getEditingDomain().getResourceSet().getResources().get(0);
                                        BusinessModel model=(BusinessModel)resource.getContents().get(0);
                                        dialog.setModel(model);
                                        if (Window.OK == dialog.open()) {
                                            return dialog.getDemand();
                                        }else{
                                            return object;
                                        }
                                    }
                                };
                            }
                        }
                        return super.createPropertyEditor(composite);
                    }
                };
            }
        };
    }
}

本文转自博客园八进制的博客,原文链接:自定义EMF程序属性视图的Cell Editor,如需转载请自行联系原博主。

相关文章
程序技术好文:自定义GridLookUpEdit编辑器
程序技术好文:自定义GridLookUpEdit编辑器
|
3月前
|
缓存 前端开发
ProFlow 流程编辑器框架问题之创建一个自定义节点如何解决
ProFlow 流程编辑器框架问题之创建一个自定义节点如何解决
44 1
|
4月前
|
JavaScript 前端开发
vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
vue 富文本编辑器 quill (含代码高亮、自定义字体、汉化、鼠标悬浮提示、组件封装等)
232 0
|
6月前
|
前端开发 数据可视化 API
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
421 0
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(二)
|
6月前
|
前端开发 JavaScript CDN
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏(一)
前端react 18.2整合ckeditor富文本编辑器——配置插件、自定义toolbar工具栏
221 0
|
JavaScript
Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)
Vue CKEditor5 自定义编辑器详细流程(插件安装使用流程)
1209 0
|
数据库
wangEditor富文本编辑器的调用开发实录2(V5版本自定义粘贴,去除复制word或网页html冗余样式代码的解决方案)
wangEditor富文本编辑器的调用开发实录2(V5版本自定义粘贴,去除复制word或网页html冗余样式代码的解决方案)
760 0
|
JavaScript 前端开发 程序员
前端开发:VS Code编辑器新建Vue文件自定义模板的方法
在前端开发过程中,尤其是对于经验不足的初级开发者来说,需要掌握一些必备的提升开发速度的技巧,比如使用各种插件来提升开发速度,这样才能事半功倍。
357 0
前端开发:VS Code编辑器新建Vue文件自定义模板的方法
|
Java Spring
Spring自定义属性编辑器及原理解释.md
Spring自定义属性编辑器及原理解释.md
|
图形学
Unity 基础 之 自定义编辑器布局
Unity 是一个强大的开发引擎,一起来认识一下编辑器布局吧。看看如何才能调整出你想要的布局吧,调整后果然舒适哦~
454 0