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

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

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

    隨筆-1  評論-9  文章-7  trackbacks-0

    1、 首先要實現EditPartFactory接口——EditPartFactoryOutlineImp,該接口為Outline視圖提供控制器EditPart對象,注意該EditPartFactoryImp要與編輯視圖——即真正的編輯區的EditPartFactory接口實現類PartFactoryEditAreaImp保持一致,否則無法同步編輯區與Outline的同步。當然,并不是編輯區的所有元素都應反應到Outline視圖中,這要根據自己的需要在EditPartFactoryOutlineImp創建EditPart對象。
    2、 Outline視圖中的樹控制器的構建:需要實現EditPartFactory接口——TreePartFactory,實現public EditPart createEditPart(EditPart context, Object model)方法,在該方法里為每個結點——model創建其子模型的樹模型。Outline的樹結構的根結點應該在編輯區的——GraphicalEditorWithFlyoutPalette繼承類的內部類ContentOutlinePage繼承類的public void createControl(Composite parent)方法中進行創建,通過getViewer().setContents(model)方法將根模型注入Outline視圖中。
    另外,為了維護Outline的樹,需要繼承AbstractTreeEditPart,及實現PropertyChangeListener接口,主要需要重載或實現的一些方法為:

    //此方法負責處理由于鼠標選中或更改對樹造成的變化,對樹結構進行刷新   
    public void propertyChange(PropertyChangeEvent evt)   
    //樹結點的圖標   
    protected Image getImage()   
    //樹結點的文本   
    protected String getText()   
    //該方法負責處理由于鼠標選中或其他事件激活某樹結點該做的事情,如果為該樹結點添加PropertyChangeListener。   
    public void activate()   
    //與上面的方法相反   
    public void deactivate()   
    //得到當前樹結點的模型   
    protected List getModelChildren()  


          補充資料:
          在Eclipse 里,當編輯器(Editor)被激活時,大綱視圖自動通過這個編輯器的getAdapter()方法尋找它提供的大綱(大綱實現IcontentOutlinePage 接口)。GEF 提供了ContentOutlinePage 類用來實現大綱視圖,我們要做的就是實現一個它的子類,并重點實現createControl()方法。ContentOutlinePage 是org.eclipse.ui.part.Page 的一個子類,大綱視圖則是PageBookView 的子類,在大綱視圖中有一個PageBook,包含了很多Page 并可以在它們之間切換,切換的依據就是當前活動的Editor。因此,我們在createControl()方法里要做的就是構造這個Page,簡化后的代碼如下所示:

    private Control outline;   
    public OutlinePage() {   
       
    super(new TreeViewer());   
    }
       
    public void createControl(Composite parent) {   
        outline 
    = getViewer().createControl(parent);   
        getSelectionSynchronizer().addViewer(getViewer());   
        getViewer().setEditDomain(getEditDomain());   
        getViewer().setEditPartFactory(
    new TreePartFactory());   
        getViewer().setContents(getDiagram());   
    }
      

         由于我們在構造方法里指定了使用樹結構顯示大綱,所以createControl()里的第一句就會使outline 變量得到一個Tree(見org.eclipse.gef.ui.parts.TreeViewer 的代碼),第二句把TreeViewer 加到選擇同步器中,從而讓用戶不論在大綱或編輯區域里選擇EditPart 時,另一方都能自動做出同樣的選擇;最后三行的作用在以前的帖子里都有介紹,總體目的是把大綱視圖的模型與編輯區域的模型聯系在一起,這樣,對于同一個模型我們就有了兩個視圖,體會到MVC 的好處了吧。
    實現大綱視圖最重要的工作基本就是這些,但還沒有完,我們要在init()方法里綁定UNDO/REDO/DELETE 等命令到Eclipse 主窗口,否則當大綱視圖處于活動狀態時,主工具條上的這些命令就會變為不可用狀態;在 getControl()方法里要返回我們的outline 成員變量,也就是指定讓這個控件出現在大綱視圖中;在dispose()方法里應該把這個TreeViewer 從選擇同步器中移除;最后,必須在PracticeEditor 里覆蓋getAdapter()方法,前面說過,這個方法是在Editor 激活時被大綱視圖調用的,所以在這里必須把我們實現好的OutlinePage 返回給大綱視圖使用,代碼如下:

    public Object getAdapter(Class type) {   
      
    if (type == IContentOutlinePage.class)   
      
    return new OutlinePage();   
      
    return super.getAdapter(type);   
    }
      
    posted on 2010-03-28 16:39 Dreava 閱讀(1694) 評論(0)  編輯  收藏 所屬分類: Eclipse插件開發

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 四虎成人免费网站在线| 2021在线永久免费视频| 国产国产人免费视频成69大陆| 亚洲最大中文字幕| 亚洲AV永久无码区成人网站 | 77777午夜亚洲| 最新欧洲大片免费在线| 久久亚洲色一区二区三区| 午夜免费国产体验区免费的| 亚洲高清最新av网站| 亚洲国产精品国自产拍电影| 鲁死你资源站亚洲av| 日本成人在线免费观看| 亚洲人成在线中文字幕| 99久久国产精品免费一区二区| 国产精品免费播放| 无码日韩人妻AV一区免费l| 亚洲欧洲国产成人综合在线观看 | 国产成人aaa在线视频免费观看 | 免费观看四虎精品国产永久| 黄色三级三级三级免费看| 成年人视频在线观看免费| 亚洲好看的理论片电影| 久久99国产乱子伦精品免费| 亚洲人成伊人成综合网久久久 | 无码的免费不卡毛片视频| 九月婷婷亚洲综合在线| 亚洲精品福利你懂| 国产免费一区二区三区VR| 久久一区二区三区免费| 久久亚洲熟女cc98cm| 午夜视频在线免费观看| 亚洲国产模特在线播放| 四虎成人精品在永久免费| 国产免费一区二区三区在线观看| 亚洲精品电影在线| 最近中文字幕免费2019| 国产AV无码专区亚洲AV蜜芽| 亚洲av伊人久久综合密臀性色 | 国产精品成人免费观看| 日产亚洲一区二区三区|