實作多工元件

為了要在「多工器」中使用,網站介面需要登錄替代方案預設實作,範圍是 org.eclipse.ui.part.SiteMultiplexerInitializer。由於這會延伸網站的範圍,因此在「多工器」中使用時,多工器的版本越特定,順序就會比預設版本還優先。

多工元件幾乎一直使用下列型樣:
  1. 實作 INestedComponent 生命週期介面;
  2. 在它們的建構子中採用 IMultiplexer,並用它來存取其共用版本介面;
  3. 存放組件的狀態;
  4. 接聽子項中的狀態變更,以及適當更新存放的狀態;
  5. 每次啟動元件時,應該都會將存放的狀態轉遞到多工器中的共用介面;
  6. 當元件在作用中時,應該會直接將狀態變更轉遞到共用的介面。
下列範例示範工作台用來多工處理 ISelectionHandler 介面和 ChildSelectionHandler 的程式碼。
/**
 * ISelectionHandler 介面的多工版本
 *
 * @自 3.1
 */
public class ChildSelectionHandler implements ISelectionHandler, INestedComponent {

    private ISelectionHandler parent;
    private ISelection selection;
    private boolean isActive = false;
    private IMultiplexer multiplexer;

    public ChildSelectionHandler(IMultiplexer mplex) throws DependencyException {
        this.multiplexer = mplex;        
        // 存取要多工的共用 ISelectionHandler(
        // 只有當我們是作用中的子項時,才能修改它)
        this.parent = (ISelectionHandler)
            mplex.getSharedComponents().getComponent(ISelectionHandler.class);        
                
        // 設定初始狀態(這個部分的初始選項會是空值,
        // 直到明確設定為止)。
    }        

    public IMultiplexer getMultiplexer() {        
        // 傳回以 return multiplexer
        所建立的多工器;
    }

    public void activate() {        
        // 將儲存的選項轉遞到共用介面
        parent.setSelection(selection);        
        isActive = true;        
    }        
            
    public void deactivate() {        
        isActive = false;        
    }        

    public void setSelection(ISelection newSelection) {        
        // 記得子項的新選項
        selection = newSelection;        
        if (isActive) {        
             // 如果我們在作用中,將選項直接轉遞到
             // 共用介面
             parent.setSelection(newSelection);        
        }        
    }        
}        
以下是 ChildSelectionHandler 的相關延伸點標記。
<extension point="org.eclipse.core.component.types">        
    <component        
            implementation="org.eclipse.ui.internal.part.services.ChildSelectionHandler"        
            interface="org.eclipse.ui.part.services.ISelectionHandler"        
            singleton="false"        
            initializer="org.eclipse.ui.part.SiteMultiplexerInitializer"/>        
</extension>
TestCompositeView 的擷取畫面