<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)流程編輯器,光有我們建立的模型,控制器和視圖還不夠,我們還必須新建一個(gè)編輯器類,為此,我們要新建一個(gè)插件項(xiàng)目,我們新建的插件項(xiàng)目com.example.workflow結(jié)構(gòu)如下:





        為了實(shí)現(xiàn)一個(gè)編輯器,我們必須擴(kuò)展org.eclipse.ui.editors這個(gè)擴(kuò)展點(diǎn),這個(gè)可以在plugin.xm定義,定義后的文件如下:

    <extension
             
    point="org.eclipse.ui.editors">
          
    <editor
                
    class="com.example.workflow.ui.WorkflowProcessEditor"
                default
    ="true"
                extensions
    ="workflow"
                icon
    ="src/com/example/workflow/icons/shapes.gif"
                id
    ="com.example.workflow.WorkflowProcessEditor"
                name
    ="流程設(shè)計(jì)器"/>
      
    </extension>

    其中,class屬性指定我們編輯器對(duì)應(yīng)的類;
               Extensions屬性指定編輯器打開(kāi)文件的擴(kuò)展名為workflow;
               Default屬性指出該編輯器是擴(kuò)展名為workflow文件的默認(rèn)打開(kāi)方式;
               Icon為擴(kuò)展名為workflow的文件和編輯器的圖標(biāo);
               Id屬性為編輯器的唯一標(biāo)識(shí)
              Name為編輯器顯示的名稱

     同時(shí),我們還必須定義插件運(yùn)行時(shí)要依賴的包,打開(kāi)META-INF中的文件MANIFEST.MF ,添加依賴項(xiàng)就可以,最后文件內(nèi)容如下:

    Manifest-Version: 1.0
    Bundle-ManifestVersion: 2
    Bundle-Name: Workflow Plug-in
    Bundle-SymbolicName: com.example.workflow;singleton:=true
    Bundle-Version: 1.0.0
    Bundle-Activator: com.example.workflow.Activator
    Bundle-Vendor: EXAMPLE
    Bundle-Localization: plugin
    Require-Bundle: org.eclipse.ui,
     org.eclipse.core.runtime,
     org.eclipse.gef,
     org.eclipse.ui.editors,
     org.eclipse.ui.ide,
     org.eclipse.core.resources,
     org.eclipse.ui.views
    Eclipse-LazyStart: true

    現(xiàn)在我們就可以來(lái)定義編輯器對(duì)應(yīng)的類了WorkflowProcessEditor,代碼如下:

    package com.example.workflow.ui;
     
    import org.eclipse.core.runtime.IProgressMonitor;
    import org.eclipse.gef.DefaultEditDomain;
    import org.eclipse.gef.GraphicalViewer;
    import org.eclipse.gef.editparts.ScalableFreeformRootEditPart;
    import org.eclipse.gef.palette.PaletteRoot;
    import org.eclipse.gef.ui.parts.GraphicalEditorWithFlyoutPalette;
    import org.eclipse.ui.IEditorInput;
     
    import com.example.workflow.model.WorkflowProcess;
    import com.example.workflow.parts.WorkflowProcessEditPartFactory;
     
    public class WorkflowProcessEditor extends GraphicalEditorWithFlyoutPalette{
     
           
    private WorkflowProcess process;
           
    private static PaletteRoot PALETTE_MODEL;
           
           
    public WorkflowProcessEditor(){
                  setEditDomain(
    new DefaultEditDomain(this));
           }

           
           
    private WorkflowProcess getModel(){
                  
    return this.process;
           }

           
           
    protected void initializeGraphicalViewer() {         
                  
    super.initializeGraphicalViewer();
                  GraphicalViewer viewer 
    = getGraphicalViewer();
                  viewer.setContents(getModel());          
           }
         
     
           
    protected void configureGraphicalViewer() {              
                  
    super.configureGraphicalViewer();
                  GraphicalViewer viewer 
    = getGraphicalViewer();
                  viewer.setEditPartFactory(
    new WorkflowProcessEditPartFactory());
                  viewer.setRootEditPart(
    new ScalableFreeformRootEditPart());
           }
         
     
           
    protected void setInput(IEditorInput input) {              
                  
    super.setInput(input);
                  process 
    = new WorkflowProcess();
           }

     
           
    protected PaletteRoot getPaletteRoot() {
                  
    if (PALETTE_MODEL == null)
                         PALETTE_MODEL 
    = WorkflowProcessEditorPaletteFactory.createPalette();
                  
    return PALETTE_MODEL;
           }

     
           
    public void doSave(IProgressMonitor monitor) {
                  
    // TODO Auto-generated method stub
                  
           }

     
    }

    這個(gè)類繼承了GraphicalEditorWithFlyoutPalette,帶有面板的圖形化編輯器。在這個(gè)類getPaletteRoot()方法中,我們定創(chuàng)建了面板,面板類詳細(xì)信息,接下來(lái)將介紹。在setInput方法中,我們定義了一個(gè)流程對(duì)象,在這里我們也可以從外面文件讀入一個(gè)對(duì)象,作為編輯器的輸入,在構(gòu)造函數(shù)中,setEditDomain(new DefaultEditDomain(this));就是給當(dāng)前編輯器設(shè)置一個(gè)默認(rèn)編輯域,這個(gè)域跟命令堆棧有關(guān)。在initializeGraphicalViewer()方法中,我們把GraphicalViewer的內(nèi)容設(shè)計(jì)為流程,說(shuō)明我們以后編輯的是一個(gè)流程對(duì)象,在configureGraphicalViewer(),我們把第二講中定義的模型和控制器映射的類注冊(cè)進(jìn)來(lái),這樣編輯器就知道模型和控制器的映射關(guān)系了。
    接下來(lái)我們?cè)倏匆幌旅姘鍖?duì)應(yīng)的類:

    package com.example.workflow.ui;
     
    import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
    import org.eclipse.gef.palette.ConnectionCreationToolEntry;
    import org.eclipse.gef.palette.MarqueeToolEntry;
    import org.eclipse.gef.palette.PaletteContainer;
    import org.eclipse.gef.palette.PaletteDrawer;
    import org.eclipse.gef.palette.PaletteGroup;
    import org.eclipse.gef.palette.PaletteRoot;
    import org.eclipse.gef.palette.PaletteSeparator;
    import org.eclipse.gef.palette.PanningSelectionToolEntry;
    import org.eclipse.gef.palette.ToolEntry;
    import org.eclipse.gef.requests.CreationFactory;
    import org.eclipse.gef.requests.SimpleFactory;
    import org.eclipse.jface.resource.ImageDescriptor;
     
    import com.example.workflow.Activator;
    import com.example.workflow.model.Activity;
    import com.example.workflow.model.EndActivity;
    import com.example.workflow.model.StartActivity;
    /**
     *UtilityclassthatcancreateaGEFPalette.
     *
    @see#createPalette()
     
    */

    finalclass WorkflowProcessEditorPaletteFactory 
    {    
        
        
    /**
         *CreatesthePaletteRootandaddsallpaletteelements.
         *Usethisfactorymethodtocreateanewpaletteforyourgraphicaleditor.
         *@returnanewPaletteRoot
         
    */

        
    static PaletteRoot createPalette(){
           PaletteRoot palette 
    = new PaletteRoot();
           palette.add(createToolsGroup(palette));
           palette.add(createActivitiesDrawer());
           
    return palette;
        }

        
        
    /**Createthe"Activities"drawer.*/
        privatestatic PaletteContainer createActivitiesDrawer() 
    {
           PaletteDrawer componentsDrawer 
    = new PaletteDrawer("Process");
     
           CombinedTemplateCreationEntry component 
    = new CombinedTemplateCreationEntry(
                  
    "Start"
                  
    "Create a StartActivity"
                  StartActivity.
    class,
                  
    new SimpleFactory(StartActivity.class), 
                  ImageDescriptor.createFromFile(Activator.
    class"icons/start16.gif"), 
                  ImageDescriptor.createFromFile(Activator.
    class"icons/start24.gif"));
           componentsDrawer.add(component);
     
           component 
    = new CombinedTemplateCreationEntry(
                  
    "Activity",
                  
    "Create a Activity"
                  Activity.
    class,
                  
    new SimpleFactory(Activity.class), 
                  ImageDescriptor.createFromFile(Activator.
    class"icons/activity16.gif"), 
                  ImageDescriptor.createFromFile(Activator.
    class"icons/activity24.gif"));
           componentsDrawer.add(component);
           
           component 
    = new CombinedTemplateCreationEntry(
                  
    "End",
                  
    "Create a EndActivity"
                  Activity.
    class,
                  
    new SimpleFactory(EndActivity.class), 
                  ImageDescriptor.createFromFile(Activator.
    class"icons/end16.gif"), 
                  ImageDescriptor.createFromFile(Activator.
    class"icons/end24.gif"));
           componentsDrawer.add(component);
     
           
    return componentsDrawer;
        }

        
        
    /**Createthe"Tools"group.*/
        privatestatic PaletteContainer createToolsGroup(PaletteRoot palette) 
    {
           PaletteGroup toolGroup 
    = new PaletteGroup("Tools");
     
           
    // Add a selection tool to the group
           ToolEntry tool = new PanningSelectionToolEntry();
           toolGroup.add(tool);
           palette.setDefaultEntry(tool);
           
           
    // Add a marquee tool to the group
           toolGroup.add(new MarqueeToolEntry());
     
           
    // Add a (unnamed) separator to the group
           toolGroup.add(new PaletteSeparator());
     
            
           tool 
    = new ConnectionCreationToolEntry(
                  
    "Transition",
                   
    "Create a Transiton",
                  
    new CreationFactory() {
                      
    public Object getNewObject() { returnnull; }               
                      
    public Object getObjectType() { returnnew Integer(1); }
                  }
    ,
                  ImageDescriptor.createFromFile(Activator.
    class"icons/transition16.gif"), 
                  ImageDescriptor.createFromFile(Activator.
    class"icons/transition24.gif"));
           toolGroup.add(tool);
           
    return toolGroup;
        }

    }

    這樣,我們的gef項(xiàng)目就可以運(yùn)行起來(lái)了,效果如下圖:



    對(duì)照面板的外觀,讀者應(yīng)該很容易明白面板類的含義,下一節(jié)我們將介紹如何在編輯器中創(chuàng)建活動(dòng)。

    代碼下載

    Feedback

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

    2008-03-22 20:39 by 新手
    那么怎樣固定編輯區(qū)域GraphicalViewer,而不是整個(gè)Viewer

    # re: 流程設(shè)計(jì)器開(kāi)發(fā)三(編輯器部分)  回復(fù)  更多評(píng)論   

    2008-08-20 09:59 by jinshi101
    你好!謝謝你寫(xiě)的文章,看了之后對(duì)于一些細(xì)節(jié)還是不怎么明白,我想問(wèn)您一下,在viewPart中如何顯示一個(gè)樹(shù)形菜單,是用TreeView嗎?謝謝!

    # re: 流程設(shè)計(jì)器開(kāi)發(fā)三(編輯器部分)  回復(fù)  更多評(píng)論   

    2010-06-28 01:45 by gef
    弱弱的問(wèn),怎樣運(yùn)行才能得到如圖所示的效果???run as eclipse application?還是怎樣?
    主站蜘蛛池模板: 人妻无码中文字幕免费视频蜜桃| 四只虎免费永久观看| 暖暖免费高清日本一区二区三区 | 毛片免费观看网站| 亚洲高清视频一视频二视频三| 亚洲av午夜成人片精品网站| 国产人成亚洲第一网站在线播放| 在线观看亚洲AV日韩A∨| jzzjzz免费观看大片免费| 91九色精品国产免费| 亚洲一级片内射网站在线观看| 亚洲成年人电影网站| 一区二区三区免费电影| 中文字幕永久免费| 日韩欧美一区二区三区免费观看| 亚洲中文字幕日产乱码高清app| 亚洲av午夜精品无码专区| 中文日本免费高清| 成人免费一区二区三区在线观看| 欧洲亚洲国产清在高| 亚洲成色在线影院| 边摸边吃奶边做爽免费视频99| 24小时免费看片| 日本v片免费一区二区三区| 无码专区—VA亚洲V天堂| 老司机午夜在线视频免费观| 国产精品久久久久免费a∨| 亚洲精品无码高潮喷水在线| 亚洲国产美女在线观看| 久久精品无码专区免费| 免费爱爱的视频太爽了| 亚洲精品国产免费| 最近免费中文字幕中文高清| 国产女高清在线看免费观看| 国产亚洲精品高清在线| 亚洲AV日韩AV无码污污网站| 亚洲免费在线视频观看| 国产精一品亚洲二区在线播放 | 免费无码一区二区三区蜜桃| 国产一区二区三区在线免费| 国产成人亚洲综合网站不卡|