core/com.nokia.carbide.discovery.ui/src/com/nokia/carbide/internal/discovery/ui/editor/PortalEditor.java
author dadubrow
Thu, 16 Sep 2010 17:29:37 -0500
changeset 2035 42a3ddebe583
parent 2000 9078a58d3988
child 2062 4d032dc346bf
permissions -rw-r--r--
Some portal tweaks
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     1
/*
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     2
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     3
* All rights reserved.
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     4
* This component and the accompanying materials are made available
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     6
* which accompanies this distribution, and is available
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     8
*
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
     9
* Initial Contributors:
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    11
*
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    12
* Contributors:
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    13
*
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    14
* Description: 
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    15
*
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    16
*/
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    17
package com.nokia.carbide.internal.discovery.ui.editor;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    18
1616
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
    19
import java.text.MessageFormat;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    20
import java.util.ArrayList;
1616
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
    21
import java.util.Collections;
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
    22
import java.util.Comparator;
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
    23
import java.util.HashMap;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    24
import java.util.List;
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
    25
import java.util.Map;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    26
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    27
import org.eclipse.core.runtime.CoreException;
2000
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    28
import org.eclipse.core.runtime.IAdaptable;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    29
import org.eclipse.core.runtime.IConfigurationElement;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    30
import org.eclipse.core.runtime.IProgressMonitor;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    31
import org.eclipse.core.runtime.Platform;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    32
import org.eclipse.jface.layout.GridDataFactory;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    33
import org.eclipse.jface.layout.GridLayoutFactory;
1618
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
    34
import org.eclipse.jface.resource.FontDescriptor;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    35
import org.eclipse.jface.resource.ImageDescriptor;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    36
import org.eclipse.swt.SWT;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    37
import org.eclipse.swt.graphics.Font;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    38
import org.eclipse.swt.graphics.GC;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    39
import org.eclipse.swt.graphics.Image;
1618
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
    40
import org.eclipse.swt.graphics.ImageData;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    41
import org.eclipse.swt.graphics.Rectangle;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    42
import org.eclipse.swt.graphics.Resource;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    43
import org.eclipse.swt.widgets.Composite;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    44
import org.eclipse.swt.widgets.Display;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    45
import org.eclipse.swt.widgets.Event;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    46
import org.eclipse.swt.widgets.Listener;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    47
import org.eclipse.ui.IEditorInput;
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
    48
import org.eclipse.ui.IEditorPart;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    49
import org.eclipse.ui.IEditorSite;
2000
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    50
import org.eclipse.ui.IElementFactory;
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    51
import org.eclipse.ui.IMemento;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    52
import org.eclipse.ui.IPersistableElement;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    53
import org.eclipse.ui.PartInitException;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    54
import org.eclipse.ui.PlatformUI;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    55
import org.eclipse.ui.part.EditorPart;
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
    56
import org.eclipse.ui.plugin.AbstractUIPlugin;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    57
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    58
import com.nokia.carbide.discovery.ui.Activator;
1615
d5f384bf1e88 more portal
dadubrow
parents: 1609
diff changeset
    59
import com.nokia.carbide.discovery.ui.Messages;
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
    60
import com.nokia.carbide.internal.discovery.ui.extension.ICommandBarFactory;
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
    61
import com.nokia.carbide.internal.discovery.ui.extension.IPortalEditor;
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
    62
import com.nokia.carbide.internal.discovery.ui.extension.IPortalPageLayer;
1616
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
    63
import com.nokia.cpp.internal.api.utils.core.Pair;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    64
import com.nokia.cpp.internal.api.utils.ui.WorkbenchUtils;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
    65
2000
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    66
public class PortalEditor extends EditorPart implements IPortalEditor, IElementFactory {
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
    67
	
2000
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    68
	private static final class PortalEditorInput implements IEditorInput {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    69
		@SuppressWarnings("rawtypes")
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    70
		@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    71
		public Object getAdapter(Class adapter) {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    72
			return null;
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    73
		}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    74
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    75
		@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    76
		public String getToolTipText() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    77
			return getName();
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    78
		}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    79
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    80
		@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    81
		public IPersistableElement getPersistable() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    82
			return new IPersistableElement() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    83
				@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    84
				public void saveState(IMemento memento) {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    85
				}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    86
				
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    87
				@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    88
				public String getFactoryId() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    89
					return "com.nokia.carbide.discovery.ui.portalEditorFactory"; //$NON-NLS-1$
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    90
				}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    91
			};
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    92
		}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    93
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    94
		@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    95
		public String getName() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    96
			return Messages.PortalEditor_Name;
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    97
		}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    98
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
    99
		@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   100
		public ImageDescriptor getImageDescriptor() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   101
			return null;
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   102
		}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   103
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   104
		@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   105
		public boolean exists() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   106
			return true;
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   107
		}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   108
	}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   109
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   110
	class LayerExtension {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   111
		public LayerExtension(IPortalPageLayer layer, String title, int order) {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   112
			this.layer = layer;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   113
			this.title = title;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   114
			this.order = order;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   115
		}
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   116
		public IPortalPageLayer layer;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   117
		public String title;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   118
		public int order;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   119
	}
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   120
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   121
	private static final String ID = "com.nokia.carbide.discovery.ui.portalEditor"; //$NON-NLS-1$
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   122
	private static final String CONTEXT_ID = ID + ".context"; //$NON-NLS-1$
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   123
	private static IEditorInput input;
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   124
	private List<PortalPage> pages;
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   125
	private Composite backgroundParent;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   126
	private Image oldBGImg;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   127
	private List<Resource> resources;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   128
	private StackComposite stackComposite;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   129
	private NavigationBar navigationBar;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   130
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   131
	public PortalEditor() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   132
		resources = new ArrayList<Resource>();
1616
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
   133
		loadPortalPages();
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   134
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   135
	
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   136
	private Map<String, List<LayerExtension>> loadPortalLayers() {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   137
		Map<String, List<LayerExtension>> pageIdToExtensionsMap = 
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   138
			new HashMap<String, List<LayerExtension>>();
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   139
		IConfigurationElement[] elements = 
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   140
			Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".portalPageLayer"); //$NON-NLS-1$
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   141
		for (IConfigurationElement element : elements) {
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   142
			String pageId = element.getAttribute("pageId"); //$NON-NLS-1$
1721
18638adda547 more portal changes:
dadubrow
parents: 1705
diff changeset
   143
			String title = element.getAttribute("title"); //$NON-NLS-1$
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   144
			int order = getOrderStringFromElement(element, title);
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   145
			try {
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   146
				IPortalPageLayer extension = (IPortalPageLayer) element.createExecutableExtension("class"); //$NON-NLS-1$
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   147
				if (!pageIdToExtensionsMap.containsKey(pageId))
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   148
					pageIdToExtensionsMap.put(pageId, new ArrayList<LayerExtension>());
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   149
				pageIdToExtensionsMap.get(pageId).add(new LayerExtension(extension, title, order));
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   150
			} catch (CoreException e) {
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   151
				Activator.logError(MessageFormat.format(Messages.PortalEditor_PageLoadError, pageId), e);
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   152
			}
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   153
		}
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   154
		return pageIdToExtensionsMap;
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   155
	}
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   156
1616
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
   157
	private void loadPortalPages() {
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   158
		Map<String, List<LayerExtension>> portalLayersMap = loadPortalLayers();
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   159
		List<Pair<PortalPage, Integer>> pageList = new ArrayList<Pair<PortalPage, Integer>>();
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   160
		IConfigurationElement[] elements = 
1615
d5f384bf1e88 more portal
dadubrow
parents: 1609
diff changeset
   161
			Platform.getExtensionRegistry().getConfigurationElementsFor(Activator.PLUGIN_ID + ".portalPage"); //$NON-NLS-1$
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   162
		for (IConfigurationElement element : elements) {
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   163
			String id = element.getAttribute("id"); //$NON-NLS-1$
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   164
			int order = getOrderStringFromElement(element, id);
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   165
			String title = element.getAttribute("title"); //$NON-NLS-1$
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   166
			String imageFilePath = element.getAttribute("image"); //$NON-NLS-1$
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   167
			String pluginId = element.getContributor().getName();
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   168
			ImageDescriptor imageDesc = AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, imageFilePath);
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   169
			List<LayerExtension> portalLayers = portalLayersMap.get(id);
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   170
			if (portalLayers == null || portalLayers.isEmpty()) {
1721
18638adda547 more portal changes:
dadubrow
parents: 1705
diff changeset
   171
				Activator.logError(MessageFormat.format(Messages.PortalEditor_NoLayersError, id), null);
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   172
			}
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   173
			ICommandBarFactory commandBarFactory = null;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   174
			if (element.getAttribute("class") != null) { //$NON-NLS-1$
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   175
				try {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   176
					commandBarFactory = (ICommandBarFactory) element.createExecutableExtension("class"); //$NON-NLS-1$
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   177
				} catch (CoreException e) {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   178
					Activator.logError(MessageFormat.format(Messages.PortalEditor_BadCommandBarFactoryError, id), e);
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   179
				}
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   180
			}
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   181
			PortalPage portalPage = new PortalPage(title, imageDesc, id, portalLayers, commandBarFactory);
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   182
			pageList.add(new Pair<PortalPage, Integer>(portalPage, order));
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   183
		}
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   184
		Collections.sort(pageList, new Comparator<Pair<PortalPage, Integer>>() {
1616
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
   185
			@Override
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   186
			public int compare(Pair<PortalPage, Integer> o1, Pair<PortalPage, Integer> o2) {
1616
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
   187
				return o1.second.compareTo(o2.second);
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
   188
			}
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
   189
		});
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   190
		pages = new ArrayList<PortalPage>();
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   191
		for (Pair<PortalPage, Integer> pair : pageList) {
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   192
			pages.add(pair.first);
1616
1828ccdd6878 add ranking to portal page extension
dadubrow
parents: 1615
diff changeset
   193
		}
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   194
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   195
1734
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   196
	private int getOrderStringFromElement(IConfigurationElement element, String id) {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   197
		int order = Integer.MAX_VALUE;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   198
		String orderString = element.getAttribute("order"); //$NON-NLS-1$
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   199
		if (orderString != null) {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   200
			try {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   201
				order = Integer.parseInt(orderString);
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   202
			}
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   203
			catch (NumberFormatException e) {
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   204
				Activator.logError(MessageFormat.format(Messages.PortalEditor_PageRankError, id), e);
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   205
			}
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   206
		}
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   207
		return order;
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   208
	}
bf670d38123a More portal framework changes:
dadubrow
parents: 1721
diff changeset
   209
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   210
	@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   211
	public void doSave(IProgressMonitor monitor) {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   212
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   213
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   214
	@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   215
	public void doSaveAs() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   216
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   217
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   218
	@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   219
	public boolean isDirty() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   220
		return false;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   221
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   222
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   223
	@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   224
	public boolean isSaveAsAllowed() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   225
		return false;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   226
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   227
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   228
	@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   229
	public void init(IEditorSite site, IEditorInput input) throws PartInitException {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   230
		setSite(site);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   231
		setInput(input);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   232
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   233
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   234
	@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   235
	public void createPartControl(final Composite parent) {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   236
		Composite body = createBody(parent);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   237
		navigationBar.initUI();
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   238
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   239
		PlatformUI.getWorkbench().getHelpSystem().setHelp(body, CONTEXT_ID);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   240
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   241
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   242
	private Composite createBody(final Composite parent) {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   243
		// create background
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   244
		backgroundParent = new Composite(parent, SWT.NONE);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   245
		applyBG(backgroundParent);
2035
42a3ddebe583 Some portal tweaks
dadubrow
parents: 2000
diff changeset
   246
		GridLayoutFactory.fillDefaults().margins(10, 0).applyTo(backgroundParent);
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   247
		// create top navigation bar
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   248
		navigationBar = createNavigationBar(backgroundParent);
2035
42a3ddebe583 Some portal tweaks
dadubrow
parents: 2000
diff changeset
   249
		GridDataFactory.swtDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).indent(0, 10).applyTo(navigationBar);
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   250
		// create stack composite
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   251
		createStackComposite(backgroundParent, navigationBar);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   252
		return backgroundParent;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   253
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   254
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   255
	private void createStackComposite(Composite parent, NavigationBar bar) {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   256
		stackComposite = new StackComposite(parent, backgroundParent);
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   257
		for (PortalPage page : pages) {
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   258
			page.createPageComposite(stackComposite, this);
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   259
		}
1615
d5f384bf1e88 more portal
dadubrow
parents: 1609
diff changeset
   260
		GridDataFactory.fillDefaults().grab(true, true).applyTo(stackComposite);
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   261
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   262
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   263
	private NavigationBar createNavigationBar(Composite parent) {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   264
		NavigationBar bar = new NavigationBar(this, parent);
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   265
		for (PortalPage page : pages) {
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   266
			bar.addNavButton(bar, page);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   267
		}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   268
		
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   269
		return bar;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   270
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   271
	
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   272
	void showPage(PortalPage page) {
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   273
		if (!page.isInitialized()) {
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   274
			page.initialize();
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   275
		}
1705
71a151b1b515 add support for multiple layers per page
dadubrow
parents: 1684
diff changeset
   276
		stackComposite.showControl(page.getPageControl());
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   277
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   278
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   279
	private void applyBG(final Composite composite) {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   280
		composite.addListener(SWT.Resize, new Listener() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   281
			@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   282
			public void handleEvent(Event event) {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   283
				Rectangle rect = composite.getClientArea();
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   284
				Image newImage = new Image(composite.getDisplay(), rect.width, rect.height);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   285
				GC gc = new GC(newImage);
1765
634744453c29 remove unneeded interface method
dadubrow
parents: 1734
diff changeset
   286
				gc.setForeground(composite.getDisplay().getSystemColor(SWT.COLOR_WIDGET_FOREGROUND));
1618
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   287
				gc.setBackground(composite.getDisplay().getSystemColor(SWT.COLOR_WIDGET_BACKGROUND));
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   288
				gc.fillGradientRectangle(0, 0, rect.width, rect.height, true);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   289
				gc.dispose();
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   290
				composite.setBackgroundImage(newImage);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   291
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   292
				if (oldBGImg != null)
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   293
					oldBGImg.dispose();
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   294
				oldBGImg = newImage;
1653
af990ce6899d tweak portal ui
dadubrow
parents: 1634
diff changeset
   295
				backgroundParent.layout();
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   296
			}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   297
		});
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   298
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   299
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   300
	@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   301
	public void setFocus() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   302
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   303
	
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   304
	public static void openPortal() {
2000
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   305
		Display.getDefault().asyncExec(new Runnable() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   306
			@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   307
			public void run() {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   308
				try {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   309
					if (PlatformUI.isWorkbenchRunning())
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   310
						WorkbenchUtils.openEditor(getInput(), ID);
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   311
				} catch (PartInitException e) {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   312
					Activator.logError(Messages.PortalEditor_PageOpenError, e);
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   313
				}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   314
			}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   315
		});
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   316
	}
2000
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   317
	
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   318
	private static IEditorInput getInput() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   319
		if (input == null) {
2000
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   320
			input = new PortalEditorInput();
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   321
		}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   322
			
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   323
		return input;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   324
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   325
	
1618
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   326
	Image createImage(ImageDescriptor desc, int width, int height) {
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   327
		Image image;
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   328
		ImageData data = desc.getImageData();
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   329
		if (data.width != width || data.height != height) {
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   330
			image = new Image(Display.getCurrent(), desc.getImageData().scaledTo(width, height));
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   331
		}
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   332
		else {
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   333
			image = desc.createImage();
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   334
		}
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   335
		resources.add(image);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   336
		return image;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   337
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   338
	
1618
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   339
	Font createFont(FontDescriptor desc) {
712d047abd8b Portal tweaks - use standard fonts, etc.
dadubrow
parents: 1616
diff changeset
   340
		Font font = desc.createFont(Display.getCurrent());
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   341
		resources.add(font);
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   342
		return font;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   343
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   344
	
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   345
	@Override
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   346
	public void dispose() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   347
		super.dispose();
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   348
		for (Resource resource : resources) {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   349
			resource.dispose();
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   350
		}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   351
		if (oldBGImg != null)
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   352
			oldBGImg.dispose();
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   353
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   354
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   355
	public Composite getBackgroundParent() {
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   356
		return backgroundParent;
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   357
	}
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   358
1684
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   359
	@Override
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   360
	public IEditorPart getEditorPart() {
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   361
		return this;
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   362
	}
c2eba6dabd38 refactor to allow better support for multiple layers
dadubrow
parents: 1661
diff changeset
   363
2000
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   364
	@Override
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   365
	public IAdaptable createElement(IMemento memento) {
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   366
		return new PortalEditorInput();
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   367
	}
9078a58d3988 Open portal in new and reset carbide perspective and if left open
dadubrow
parents: 1765
diff changeset
   368
1609
085da1889c59 Portal initial commit
dadubrow
parents:
diff changeset
   369
}