/*******************************************************************************
 * Copyright (c) 2008, 2010 SAP AG.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    SAP AG - initial API and implementation
 *******************************************************************************/
package org.eclipse.mat.ui.internal;

import org.eclipse.core.runtime.Platform;
import org.eclipse.mat.ui.MemoryAnalyserPlugin;
import org.eclipse.ui.IFolderLayout;
import org.eclipse.ui.IPageLayout;
import org.eclipse.ui.IPerspectiveFactory;
import org.eclipse.ui.IPlaceholderFolderLayout;
import org.osgi.framework.Bundle;

public class Perspective implements IPerspectiveFactory
{
    public enum Views
    {
        HISTORY_VIEW(MemoryAnalyserPlugin.PLUGIN_ID + ".views.SnapshotHistoryView"), //$NON-NLS-1$
        DETAILS_VIEW(MemoryAnalyserPlugin.PLUGIN_ID + ".views.SnapshotDetailsView"), //$NON-NLS-1$
        NOTES_VIEW(MemoryAnalyserPlugin.PLUGIN_ID + ".views.TextEditorView"), //$NON-NLS-1$
        INSPECTOR_VIEW(MemoryAnalyserPlugin.PLUGIN_ID + ".views.InspectorView"), //$NON-NLS-1$
        NAVIGATOR_VIEW(MemoryAnalyserPlugin.PLUGIN_ID + ".views.NavigatorView"), //$NON-NLS-1$
        COMPARE_BASKET_VIEW(MemoryAnalyserPlugin.PLUGIN_ID + ".views.CompareBasketView"), //$NON-NLS-1$
        ERROR_VIEW("org.eclipse.pde.runtime.LogView");//$NON-NLS-1$

        private final String id;

        private Views(String id)
        {
            this.id = id;
        }

        public String getId()
        {
            return this.id;
        }
    }

    public void createInitialLayout(IPageLayout layout)
    {
        String editorArea = layout.getEditorArea();
        layout.setEditorAreaVisible(true);

        IFolderLayout topLeft = layout.createFolder("topLeft", IPageLayout.LEFT, (float) 0.26, editorArea);//$NON-NLS-1$
        topLeft.addView(Views.INSPECTOR_VIEW.getId());
        topLeft.addPlaceholder(Views.DETAILS_VIEW.getId());

        IPlaceholderFolderLayout bottomLeft = layout.createPlaceholderFolder("bottomLeft", IPageLayout.BOTTOM,//$NON-NLS-1$
                        (float) 0.60, Views.DETAILS_VIEW.getId());
        bottomLeft.addPlaceholder(Views.HISTORY_VIEW.getId());

        IFolderLayout bottomMiddle = layout.createFolder("bottomMiddle", IPageLayout.BOTTOM, (float) 0.80, editorArea);//$NON-NLS-1$
        bottomMiddle.addView(Views.NOTES_VIEW.getId());
        bottomMiddle.addPlaceholder(IPageLayout.ID_PROGRESS_VIEW);
        bottomMiddle.addView(Views.NAVIGATOR_VIEW.getId());

        layout.addShowViewShortcut(Views.HISTORY_VIEW.getId());
        layout.addShowViewShortcut(Views.DETAILS_VIEW.getId());
        layout.addShowViewShortcut(Views.INSPECTOR_VIEW.getId());
        layout.addShowViewShortcut(Views.NOTES_VIEW.getId());
        layout.addShowViewShortcut(Views.ERROR_VIEW.getId());
        layout.addShowViewShortcut(Views.NAVIGATOR_VIEW.getId());

        Bundle bundle = Platform.getBundle("org.eclipse.jdt.ui");//$NON-NLS-1$
        if (bundle != null)
            layout.addActionSet("org.eclipse.jdt.ui.JavaActionSet");//$NON-NLS-1$
    }
}
