<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插件開發

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


    網站導航:
     
    主站蜘蛛池模板: 1000部拍拍拍18勿入免费视频下载| 无码的免费不卡毛片视频| 久久99精品免费视频| 伊人久久亚洲综合| 中文日本免费高清| 亚洲熟妇丰满多毛XXXX| 黄 色一级 成 人网站免费| 亚洲午夜国产精品无码| 久99久精品免费视频热77| 亚洲黄色三级视频| 97碰公开在线观看免费视频| 亚洲va在线va天堂成人| 免费理论片51人人看电影| 深夜福利在线免费观看| 免费大黄网站在线观| 免费无码又爽又刺激高潮软件 | 免费人成网站在线观看不卡 | 国产精品亚洲片在线va| 永久免费观看的毛片的网站| 又大又硬又粗又黄的视频免费看 | 9i9精品国产免费久久| 亚洲国产精品热久久| 最近最好的中文字幕2019免费| 激情婷婷成人亚洲综合| 亚洲人精品午夜射精日韩| 最近2019中文字幕免费直播| 亚洲熟妇无码一区二区三区| 国产日产亚洲系列最新| 日本免费人成在线网站| 久久亚洲AV成人无码国产电影| 久久精品夜色噜噜亚洲A∨| 99热这里只有精品6免费| 亚洲人成色77777在线观看| 亚洲伊人久久综合影院| 亚洲免费一级视频| 美女隐私免费视频看| 亚洲午夜久久久精品影院| 国产精品嫩草影院免费| 久久国产精品成人免费| 国产亚洲一卡2卡3卡4卡新区 | 内射少妇36P亚洲区|