<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 36, comments - 30, trackbacks - 0, articles - 3
     要實(shí)現(xiàn)大綱視圖,我們先回顧一下以前在編輯器中實(shí)現(xiàn)GraphicalViewer視圖,是如何實(shí)現(xiàn)的,找到以前的代碼,在WorkflowProcessEditor的configureGraphicalViewer方法中,
    GraphicalViewer viewer = getGraphicalViewer();
    viewer.setEditPartFactory(
    new WorkflowProcessEditPartFactory());
    我們給GraphicalViewer設(shè)置了模型和控制映射的工廠類,大綱視圖的實(shí)現(xiàn)和GraphicalViewer視圖類似,也需要為模型定義控制器,不過(guò)這個(gè)控制器不同于以前的控制器,這些控制器必須繼承AbstractTreeEditPart,(注意:一個(gè)模型可以對(duì)應(yīng)多個(gè)控制器,多個(gè)視圖),由于在大綱視圖中我們不用顯示轉(zhuǎn)移,因此,我們只需定義兩個(gè)控制器:流程和活動(dòng),代碼如下:
    流程控制器


    package com.example.workflow.parts;
     
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
    import java.util.List;
     
    import org.eclipse.gef.editparts.AbstractTreeEditPart;
     
    import com.example.workflow.model.ModelElement;
    import com.example.workflow.model.WorkflowProcess;
     
    public class WorkflowProcessTreeEditPart extends AbstractTreeEditPart
           
    implements PropertyChangeListener{
                  
           
    public void activate() {
                  
    if (!isActive()) {
                         
    super.activate();
                         ((ModelElement) getModel()).addPropertyChangeListener(
    this);
                  }

           }

                  
           
    public void deactivate() {
                  
    if (isActive()) {
                         
    super.deactivate();
                         ((ModelElement) getModel()).removePropertyChangeListener(
    this);
                  }

           }

           
           
    private WorkflowProcess getCastedModel() {
                  
    return (WorkflowProcess) getModel();
           }

           
           
    protected List getModelChildren() {
                  
    return getCastedModel().getChildren(); // return a list of activities
           }

           
           
    //當(dāng)往編輯器中增加活動(dòng)時(shí),刷新活動(dòng)模型對(duì)應(yīng)的視圖
           public void propertyChange(PropertyChangeEvent arg0) {
                  String prop 
    = evt.getPropertyName();
           
    if (WorkflowProcess.CHILD_ADDED_PROP.equals(prop)
                  
    || WorkflowProcess.CHILD_REMOVED_PROP.equals(prop)) {
               refreshChildren();
           }

                  
           }

     
    }

    //活動(dòng)控制器


    package com.example.workflow.parts;
     
    import java.beans.PropertyChangeEvent;
    import java.beans.PropertyChangeListener;
     
    import org.eclipse.gef.editparts.AbstractTreeEditPart;
    import org.eclipse.swt.graphics.Image;
     
     
    import com.example.workflow.model.AbstractActivity;
    import com.example.workflow.model.ModelElement;
     
    public class AbstractActivityTreeEditPart extends AbstractTreeEditPart 
           
    implements    PropertyChangeListener{
                  
           
    public void activate() {
                  
    if (!isActive()) {
                         
    super.activate();
                         ((ModelElement) getModel()).addPropertyChangeListener(
    this);
                  }

           }

                  
           
    public void deactivate() {
                  
    if (isActive()) {
                         
    super.deactivate();
                         ((ModelElement) getModel()).removePropertyChangeListener(
    this);
                  }

           }

     
           
    private AbstractActivity getCastedModel() {
                  
    return (AbstractActivity) getModel();
           }

                  
     
           
           
    protected String getText() {
                  
    return getCastedModel().getName();
           }

     
           
    public void propertyChange(PropertyChangeEvent evt) {
                  
           }

     
    }

     這些類中方法大家應(yīng)該很熟悉,我只說(shuō)一下getText()方法,就是活動(dòng)在大綱視圖中顯示的名稱,還有個(gè)getImage()方法,可以定義顯示的圖標(biāo),定義完這些控制器后,我們還必須定義模型和這些控制器的映射類,代碼如下:

    package com.example.workflow.parts;
     
    import org.eclipse.gef.EditPart;
    import org.eclipse.gef.EditPartFactory;
     
    import com.example.workflow.model.AbstractActivity;
    import com.example.workflow.model.WorkflowProcess;
     
    public class WorkflowProcessTreeEditPartFactory implements EditPartFactory{
     
           
    public EditPart createEditPart(EditPart context, Object modelElement) {
                  
    //get EditPart for model element
                  EditPart part = getPartForElement(modelElement);
                  
    // store model element in EditPart
                  part.setModel(modelElement);
                  
    return part;
           }

           
           
    /**
            * Maps an object to an EditPart. 
            * 
    @throws RuntimeException if no match was found (programming error)
            
    */

           
    private EditPart getPartForElement(Object modelElement) {
                  
    if (modelElement instanceof WorkflowProcess) {
                         
    return new WorkflowProcessTreeEditPart();
                  }

                  
    if (modelElement instanceof AbstractActivity) {
                         
    return new AbstractActivityTreeEditPart();
                  }

                  
    //because the outline view of the WorkflowProcessEditor dont
                  
    //need to display the Trasntion ,we dont create the TransitionTreeEditPart
                  throw new RuntimeException(
                                
    "Can't create part for model element: "
                                
    + ((modelElement != null? modelElement.getClass().getName() : "null"));
           }

     
    }

     

    這個(gè)映射類和以前GraphicalViewer視圖基本一樣,我也不解釋了。
    定義完控制器和映射類之后,我們還需定義一個(gè)大綱視圖對(duì)應(yīng)類,由于大綱視圖和編輯器聯(lián)系緊密,因此我們把這個(gè)類作為WorkflowProcessEditor的內(nèi)部類,代碼如下:
    class WorkflowProcessOutlinePage extends ContentOutlinePage{
     
                  
    /**
                   * Create a new outline page for the WorkflowProcess editor.
                   * 
    @param viewer a viewer (TreeViewer instance) used for this outline page
                   * 
    @throws IllegalArgumentException if editor is null
                   
    */

                  
    public WorkflowProcessOutlinePage(EditPartViewer viewer) {
                         
    super(viewer);                     
                  }

     
                  
    public void createControl(Composite parent) {
                         
    //create outline viewer page
                         getViewer().createControl(parent);
                         
    // configure outline viewer
                         getViewer().setEditDomain(getEditDomain());
                         getViewer().setEditPartFactory(
    new WorkflowProcessTreeEditPartFactory());
                         
                         
    //讓大綱視圖和編輯器的GraphicalViewer視圖同步選擇
                         getSelectionSynchronizer().addViewer(getViewer());
                         
                         
    //設(shè)置大綱視圖的根內(nèi)容為流程模型
                         getViewer().setContents(getModel());
                  }

     
                  
    public Control getControl() {
                         
    return getViewer().getControl();
                  }
         
                  
                  
    public void dispose() {
                         
    // unhook outline viewer
                         getSelectionSynchronizer().removeViewer(getViewer());
                         
    // dispose
                         super.dispose();
                  }

                  
           }
    為了在大綱視圖中顯示內(nèi)容,我們還必須在WorkflowProcessEditor類中重寫getAdapter方法,代碼如下:
    public Object getAdapter(Class type) {
                  
    if (type == IContentOutlinePage.class)
                         
    return new WorkflowProcessOutlinePage(new TreeViewer());
                  
    return super.getAdapter(type);
           }
    同時(shí)在插件依賴項(xiàng)中增加
     org.eclipse.ui.ide,
     org.eclipse.ui.views
    這樣運(yùn)行程序,就可以看到編輯器大綱視圖的效果了

     

    Feedback

    # re: 流程設(shè)計(jì)器開(kāi)發(fā)八(大綱視圖部分)[未登錄](méi)  回復(fù)  更多評(píng)論   

    2008-01-11 19:32 by fisher
    強(qiáng)!!!!!!
    主站蜘蛛池模板: 97se亚洲国产综合自在线| 亚洲日本中文字幕区| 亚洲综合色在线观看亚洲| 国产偷v国产偷v亚洲高清| 亚洲精品自在线拍| 亚洲熟妇久久精品| 白白色免费在线视频| 中文字幕版免费电影网站| 67194成手机免费观看| 午夜视频免费观看| 亚洲一级特黄无码片| 久久久久亚洲AV片无码下载蜜桃| 中文文字幕文字幕亚洲色| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 精品无码AV无码免费专区| 免费做爰猛烈吃奶摸视频在线观看 | 亚洲人成电影福利在线播放| 亚洲 欧洲 视频 伦小说| 免费精品视频在线| 亚洲精品免费观看| 国产人妖ts在线观看免费视频| 一本色道久久综合亚洲精品| 亚洲国产理论片在线播放| 羞羞网站免费观看| 精品熟女少妇a∨免费久久| 日韩中文无码有码免费视频 | 亚洲综合色区中文字幕| 三级片免费观看久久| 13一14周岁毛片免费| 人人狠狠综合久久亚洲高清| 少妇中文字幕乱码亚洲影视| 老子影院午夜伦不卡亚洲| 免费成人在线电影| 国产免费黄色大片| 亚洲精品偷拍无码不卡av| 深夜a级毛片免费视频| av无码国产在线看免费网站 | 亚洲欧洲国产经精品香蕉网| 免费看又黄又爽又猛的视频软件| 96免费精品视频在线观看| 亚洲高清偷拍一区二区三区|