/*******************************************************************************
 * Copyright (c) 2005 IBM Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Common Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/cpl-v10.html
 * 
 * Contributors:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.ui.internal;

import org.eclipse.ui.IPartService;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchPartReference;
import org.eclipse.ui.internal.misc.UIListenerLogging;

public class WorkbenchPagePartList extends PartList {
    
    private PageSelectionService selectionService;
    
    private PartService partService = new PartService(UIListenerLogging.PAGE_PARTLISTENER_EVENTS, 
            UIListenerLogging.PAGE_PARTLISTENER2_EVENTS);
    
    public WorkbenchPagePartList(PageSelectionService selectionService) {
        this.selectionService = selectionService;
    }
    
    public IPartService getPartService() {
        return partService;
    }
    
    protected void firePartOpened(IWorkbenchPartReference part) {
        partService.firePartOpened(part);     
    }

    protected void firePartClosed(IWorkbenchPartReference part) {
        partService.firePartClosed(part);
    }

    protected void firePartAdded(IWorkbenchPartReference part) {
        // TODO: There is no listener for workbench page additions yet 
    }

    protected void firePartRemoved(IWorkbenchPartReference part) {
        // TODO: There is no listener for workbench page removals yet
    }

    protected void fireActiveEditorChanged(IWorkbenchPartReference ref) {
        if (ref != null) {
            firePartBroughtToTop(ref);
        }
    }

    protected void fireActivePartChanged(IWorkbenchPartReference oldRef, IWorkbenchPartReference newRef) {
        partService.setActivePart(newRef);
        
        IWorkbenchPart realPart = newRef == null? null : newRef.getPart(false);
        selectionService.setActivePart(realPart);
    }
    
    protected void firePartHidden(IWorkbenchPartReference ref) {
        partService.firePartHidden(ref);
    }

    protected void firePartVisible(IWorkbenchPartReference ref) {
        partService.firePartVisible(ref);
    }
    
    protected void firePartInputChanged(IWorkbenchPartReference ref) {
        partService.firePartInputChanged(ref);
    }

    public void firePartBroughtToTop(IWorkbenchPartReference ref) {
        partService.firePartBroughtToTop(ref);
    }
}
