Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Goldthorpe2008-02-07 16:36:56 +0000
committerChris Goldthorpe2008-02-07 16:36:56 +0000
commitbac8fc048fd65a58b234887d5ce7fbf59380e98a (patch)
tree330a5ec07e4a1cf3f7785793b5ffec20fcd943d2 /org.eclipse.ui.intro.universal
parent299f3b336ff0e25c77aa317a7815d137c02c3925 (diff)
downloadeclipse.platform.ua-bac8fc048fd65a58b234887d5ce7fbf59380e98a.tar.gz
eclipse.platform.ua-bac8fc048fd65a58b234887d5ce7fbf59380e98a.tar.xz
eclipse.platform.ua-bac8fc048fd65a58b234887d5ce7fbf59380e98a.zip
Bug 218203 – [Intro] Customize button missing from Welcome home pagev20080207
Diffstat (limited to 'org.eclipse.ui.intro.universal')
-rw-r--r--org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizationContentsArea.java1170
-rw-r--r--org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizationDialog.java67
-rw-r--r--org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizeAction.java5
-rw-r--r--org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.java1
-rw-r--r--org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.properties1
-rw-r--r--org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/WelcomeCustomizationPreferencePage.java1134
6 files changed, 1256 insertions, 1122 deletions
diff --git a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizationContentsArea.java b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizationContentsArea.java
new file mode 100644
index 000000000..9eca2ff3e
--- /dev/null
+++ b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizationContentsArea.java
@@ -0,0 +1,1170 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.ui.internal.intro.universal;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IProduct;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.CellEditor;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.ComboBoxCellEditor;
+import org.eclipse.jface.viewers.ICellModifier;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.BusyIndicator;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.DragSourceEvent;
+import org.eclipse.swt.dnd.DragSourceListener;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
+import org.eclipse.swt.events.PaintEvent;
+import org.eclipse.swt.events.PaintListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Canvas;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.intro.impl.IntroPlugin;
+import org.eclipse.ui.internal.intro.impl.model.IntroModelRoot;
+import org.eclipse.ui.internal.intro.universal.util.BundleUtil;
+import org.eclipse.ui.internal.intro.universal.util.ImageUtil;
+import org.eclipse.ui.internal.intro.universal.util.Log;
+import org.eclipse.ui.intro.IIntroManager;
+import org.eclipse.ui.intro.IIntroPart;
+import org.eclipse.ui.intro.config.CustomizableIntroPart;
+import org.eclipse.ui.intro.config.IIntroURL;
+import org.eclipse.ui.intro.config.IntroURLFactory;
+import org.osgi.framework.Bundle;
+
+
+public class CustomizationContentsArea {
+
+ private static final String INTRO_ROOT_PAGES = "INTRO_ROOT_PAGES"; //$NON-NLS-1$
+ private static final String INTRO_DATA = "INTRO_DATA"; //$NON-NLS-1$
+ private static final String INTRO_THEME = "INTRO_THEME"; //$NON-NLS-1$
+ private static final String NO_ROOT_PAGES = "no_root_pages"; //$NON-NLS-1$
+ private TabFolder tabFolder;
+ private String firstPageId;
+ private Composite pageContainer;
+ private TableViewer themes;
+ private TableViewer available;
+ private TableViewer topLeft;
+ private TableViewer topRight;
+ private TableViewer bottomLeft;
+ private TableViewer bottomRight;
+ private CheckboxTableViewer rootPages;
+ private ArrayList introRootPages = new ArrayList();
+ private ArrayList themeList = new ArrayList();
+ private IntroTheme introTheme;
+ private String introThemeId;
+ private IntroData introData;
+ private Canvas themePreview;
+ private TableContentProvider contentProvider;
+ private TableLabelProvider labelProvider;
+ private Button applyToAll;
+ private Image extensionImage;
+ private Image themeImage;
+ private Image ihighImage;
+ private Image ilowImage;
+ private Image inewImage;
+ private Image icalloutImage;
+ private Shell shell;
+ private static final Transfer[] TRANSFER_TYPES = new Transfer[] { ExtensionDataTransfer.getInstance() };
+
+
+ private static final RootPage ROOT_PAGE_TABLE[] = new RootPage[] {
+ new RootPage(IUniversalIntroConstants.ID_OVERVIEW,
+ Messages.WelcomeCustomizationPreferencePage_overview,
+ Messages.WelcomeCustomizationPreferencePage_NoMnemonic_overview),
+ new RootPage(IUniversalIntroConstants.ID_FIRSTSTEPS,
+ Messages.WelcomeCustomizationPreferencePage_firststeps,
+ Messages.WelcomeCustomizationPreferencePage_NoMnemonic_firststeps),
+ new RootPage(IUniversalIntroConstants.ID_TUTORIALS,
+ Messages.WelcomeCustomizationPreferencePage_tutorials,
+ Messages.WelcomeCustomizationPreferencePage_NoMnemonic_tutorials),
+ new RootPage(IUniversalIntroConstants.ID_SAMPLES,
+ Messages.WelcomeCustomizationPreferencePage_samples,
+ Messages.WelcomeCustomizationPreferencePage_NoMnemonic_samples),
+ new RootPage(IUniversalIntroConstants.ID_WHATSNEW,
+ Messages.WelcomeCustomizationPreferencePage_whatsnew,
+ Messages.WelcomeCustomizationPreferencePage_NoMnemonic_whatsnew),
+ new RootPage(IUniversalIntroConstants.ID_WEBRESOURCES,
+ Messages.WelcomeCustomizationPreferencePage_webresources,
+ Messages.WelcomeCustomizationPreferencePage_NoMnemonic_webresources),
+ new RootPage(IUniversalIntroConstants.ID_MIGRATE,
+ Messages.WelcomeCustomizationPreferencePage_migrate,
+ Messages.WelcomeCustomizationPreferencePage_NoMnemonic_migrate) };
+
+ static class RootPage {
+
+ public String id;
+ public String name;
+ public String nameNoMnemonic;
+
+ public RootPage(String id, String name, String nameNoMnemonic) {
+ this.id = id;
+ this.name = name;
+ this.nameNoMnemonic = nameNoMnemonic;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getNameNoMnemonic() {
+ return nameNoMnemonic;
+ }
+
+ public boolean equals(Object obj) {
+ if (obj == this)
+ return true;
+ if (obj == null)
+ return false;
+ if (obj instanceof RootPage) {
+ RootPage page = (RootPage) obj;
+ return page.id.equals(id) && page.name.equals(name);
+ }
+ return false;
+ }
+
+ public String toString() {
+ return name;
+ }
+ }
+
+ class TableContentProvider implements IStructuredContentProvider {
+
+ public Object[] getElements(Object inputElement) {
+ if (inputElement == ROOT_PAGE_TABLE)
+ return ROOT_PAGE_TABLE;
+ if (inputElement instanceof GroupData) {
+ return ((GroupData) inputElement).getChildren();
+ }
+ if (inputElement == themes) {
+ return themeList.toArray();
+ }
+ return new Object[0];
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ }
+
+ class TableDragSourceListener implements DragSourceListener {
+
+ TableViewer viewer;
+ BaseData[] sel;
+
+ public TableDragSourceListener(TableViewer viewer) {
+ this.viewer = viewer;
+ }
+
+ public void dragStart(DragSourceEvent event) {
+ IStructuredSelection ssel = (IStructuredSelection) viewer.getSelection();
+ if (ssel.size() > 0) {
+ event.doit = true;
+ } else {
+ event.doit = false;
+ }
+ };
+
+ public void dragSetData(DragSourceEvent event) {
+ IStructuredSelection ssel = (IStructuredSelection) viewer.getSelection();
+ BaseData[] array = new BaseData[ssel.size()];
+ int i = 0;
+ for (Iterator iter = ssel.iterator(); iter.hasNext();) {
+ array[i++] = (BaseData) iter.next();
+ }
+ event.data = array;
+ sel = array;
+ }
+
+ public void dragFinished(DragSourceEvent event) {
+ if (event.detail == DND.DROP_MOVE) {
+ GroupData gd = (GroupData) viewer.getInput();
+ for (int i = 0; i < sel.length; i++) {
+ BaseData ed = sel[i];
+ gd.remove(ed);
+ }
+ viewer.refresh();
+ updateColumnSizes(viewer);
+ }
+ sel = null;
+ }
+ }
+
+ CustomizationContentsArea() {
+ }
+
+ class TableDropTargetListener extends ViewerDropAdapter {
+
+ public TableDropTargetListener(TableViewer viewer) {
+ super(viewer);
+ }
+
+ public boolean performDrop(Object data) {
+ BaseData target = (BaseData) getCurrentTarget();
+ int loc = getCurrentLocation();
+ GroupData gd = (GroupData) getViewer().getInput();
+ if (gd == null)
+ gd = createTargetGd(getViewer());
+ BaseData[] sel = (BaseData[]) data;
+
+ int index = target != null ? gd.getIndexOf(target) : -1;
+ int startingIndex = getStartIndex(gd, sel);
+ if (target != null) {
+ if (loc == LOCATION_AFTER
+ || (loc == LOCATION_ON && startingIndex != -1 && startingIndex < index))
+ index++;
+ else if (index > 0 && loc == LOCATION_BEFORE)
+ index--;
+ }
+
+ for (int i = 0; i < sel.length; i++) {
+ BaseData ed = sel[i];
+ if (index == -1)
+ gd.add(ed);
+ else
+ gd.add(index++, ed);
+ }
+ if (getViewer().getInput() != null)
+ getViewer().refresh();
+ else
+ getViewer().setInput(gd);
+ updateColumnSizes((TableViewer) getViewer());
+ return true;
+ }
+
+ private int getStartIndex(GroupData gd, BaseData[] sel) {
+ for (int i = 0; i < sel.length; i++) {
+ BaseData ed = sel[i];
+ int index = gd.getIndexOf(ed.getId());
+ if (index != -1)
+ return index;
+ }
+ return -1;
+ }
+
+ public boolean validateDrop(Object target, int operation, TransferData transferType) {
+ return ExtensionDataTransfer.getInstance().isSupportedType(transferType);
+ }
+ }
+
+ class TableLabelProvider extends LabelProvider implements ITableLabelProvider {
+
+ public String getText(Object obj) {
+ if (obj instanceof RootPage) {
+ return ((RootPage) obj).getNameNoMnemonic();
+ }
+ if (obj instanceof ExtensionData) {
+ ExtensionData ed = (ExtensionData) obj;
+ String name = ed.getName();
+ if (name != null && name.length() > 0)
+ return name;
+ return ed.getId();
+ }
+ if (obj instanceof SeparatorData) {
+ return Messages.WelcomeCustomizationPreferencePage_horizontalSeparator;
+ }
+ if (obj instanceof IntroTheme) {
+ IntroTheme bg = (IntroTheme) obj;
+ return bg.getName();
+ }
+ return super.getText(obj);
+ }
+
+ public Image getImage(Object obj) {
+ if (obj instanceof ExtensionData) {
+ ExtensionData ed = (ExtensionData) obj;
+ switch (ed.getImportance()) {
+ case ExtensionData.HIGH:
+ return ihighImage;
+ case ExtensionData.LOW:
+ return ilowImage;
+ case ExtensionData.NEW:
+ return inewImage;
+ case ExtensionData.CALLOUT:
+ return icalloutImage;
+ }
+ return extensionImage;
+ }
+ if (obj instanceof IntroTheme)
+ return themeImage;
+ return null;
+ }
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ if (columnIndex == 0)
+ return getImage(element);
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ if (columnIndex == 1 || element instanceof IntroTheme || element instanceof RootPage)
+ return getText(element);
+ return null;
+ }
+ }
+
+ class IntroTheme {
+ IConfigurationElement element;
+ Image previewImage;
+
+ public String getName() {
+ return element.getAttribute("name"); //$NON-NLS-1$
+ }
+
+ public String getId() {
+ return element.getAttribute("id"); //$NON-NLS-1$
+ }
+
+ public IntroTheme(IConfigurationElement element) {
+ this.element = element;
+ }
+
+ public Image getPreviewImage() {
+ if (previewImage==null) {
+ String path = element.getAttribute("previewImage"); //$NON-NLS-1$
+ if (path!=null) {
+ String bid = element.getDeclaringExtension().getNamespaceIdentifier();
+ Bundle bundle = Platform.getBundle(bid);
+ if (bundle!=null) {
+ ImageDescriptor desc = ImageUtil.createImageDescriptor(bundle, path);
+ previewImage = desc.createImage();
+ }
+ }
+ }
+ return previewImage;
+ }
+
+ public void dispose() {
+ if (previewImage!=null) {
+ previewImage.dispose();
+ previewImage=null;
+ }
+ }
+ }
+
+ protected Control createContents(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ GridData data = new GridData();
+ data.verticalAlignment = GridData.FILL;
+ data.horizontalAlignment = GridData.FILL;
+ container.setLayoutData(data);
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ container.setLayout(layout);
+ tabFolder = new TabFolder(container, SWT.TOP);
+ tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
+ tabFolder.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ TabItem[] selection = tabFolder.getSelection();
+ onTabChange(selection[0]);
+ }
+ });
+ applyToAll = new Button(container, SWT.CHECK);
+ applyToAll.setText(Messages.WelcomeCustomizationPreferencePage_applyToAll);
+ contentProvider = new TableContentProvider();
+ labelProvider = new TableLabelProvider();
+ if (isCustomizationMode()) {
+ Button serialize = new Button(container, SWT.PUSH);
+ serialize.setText(Messages.WelcomeCustomizationPreferencePage_serialize);
+ serialize.addSelectionListener(new SelectionAdapter() {
+
+ public void widgetSelected(SelectionEvent e) {
+ doSerializeState();
+ }
+ });
+ }
+ extensionImage = ImageUtil.createImage("full/obj16/extension_obj.gif"); //$NON-NLS-1$
+ ihighImage = ImageUtil.createImage("full/obj16/ihigh_obj.gif"); //$NON-NLS-1$
+ ilowImage = ImageUtil.createImage("full/obj16/ilow_obj.gif"); //$NON-NLS-1$
+ inewImage = ImageUtil.createImage("full/obj16/inew_obj.gif"); //$NON-NLS-1$
+ icalloutImage = ImageUtil.createImage("full/obj16/icallout_obj.gif"); //$NON-NLS-1$
+ themeImage = ImageUtil.createImage("full/obj16/image_obj.gif"); //$NON-NLS-1$
+ addPages();
+ org.eclipse.jface.dialogs.Dialog.applyDialogFont(container);
+ PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, "org.eclipse.ui.intro.universal.universalWelcomePreference"); //$NON-NLS-1$
+ return container;
+ }
+
+ private void doSerializeState() {
+ FileDialog fd = new FileDialog(shell, SWT.SAVE);
+ fd.setText(Messages.WelcomeCustomizationPreferencePage_serializeTitle);
+ String fileName = fd.open();
+ if (fileName != null) {
+ try {
+ FileWriter writer = new FileWriter(fileName);
+ PrintWriter pwriter = new PrintWriter(writer);
+ introData.write(pwriter);
+ pwriter.close();
+ } catch (IOException e) {
+ // show an error dialog in addition
+ Log.error("Error while saving the intro data file", e); //$NON-NLS-1$
+ }
+ }
+ }
+
+ private boolean isCustomizationMode() {
+ /*
+ * String[] args = Platform.getApplicationArgs(); for (int i = 0; i < args.length; i++) { if
+ * (args[i].equalsIgnoreCase("-welcomeCustomization")) //$NON-NLS-1$ return true; } return
+ * false;
+ */
+ return true;
+ }
+
+ public void init(IWorkbench workbench) {
+ }
+
+ private void addPages() {
+ loadData(false);
+ addHomePage();
+ createPageContainer();
+ addRootPages();
+ updateWidgetsFromData();
+ selectFirstPage();
+ }
+
+ private void addRootPages() {
+ addPage(IUniversalIntroConstants.ID_OVERVIEW);
+ addPage(IUniversalIntroConstants.ID_FIRSTSTEPS);
+ addPage(IUniversalIntroConstants.ID_TUTORIALS);
+ addPage(IUniversalIntroConstants.ID_SAMPLES);
+ addPage(IUniversalIntroConstants.ID_WHATSNEW);
+ addPage(IUniversalIntroConstants.ID_WEBRESOURCES);
+ addPage(IUniversalIntroConstants.ID_MIGRATE);
+ }
+
+ private void createPageContainer() {
+ pageContainer = new Composite(tabFolder, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ //layout.horizontalSpacing = 10;
+ pageContainer.setLayout(layout);
+ layout.numColumns = 4;
+ //layout.makeColumnsEqualWidth = true;
+ Label label;
+ label = new Label(pageContainer, SWT.WRAP);
+ label.setText(Messages.WelcomeCustomizationPreferencePage_pageDesc);
+ GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+ gd.horizontalSpan = 4;
+ label.setLayoutData(gd);
+ label = new Label(pageContainer, SWT.SEPARATOR | SWT.HORIZONTAL);
+ gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
+ gd.horizontalSpan = 4;
+ label.setLayoutData(gd);
+ label = new Label(pageContainer, SWT.NULL);
+ label.setText(Messages.WelcomeCustomizationPreferencePage_available);
+ gd = new GridData();
+ label.setLayoutData(gd);
+ label = new Label(pageContainer, SWT.SEPARATOR | SWT.VERTICAL);
+ gd = new GridData(GridData.VERTICAL_ALIGN_FILL);
+ gd.verticalSpan = 3;
+ gd.widthHint = 10;
+ label.setLayoutData(gd);
+
+ label = new Label(pageContainer, SWT.NULL);
+ label.setText(Messages.WelcomeCustomizationPreferencePage_left);
+ label = new Label(pageContainer, SWT.NULL);
+ label.setText(Messages.WelcomeCustomizationPreferencePage_right);
+ available = createTableViewer(pageContainer, "hidden"); //$NON-NLS-1$
+ available.setComparator(new ViewerComparator());
+ gd = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
+ gd.verticalSpan = 2;
+ gd.widthHint = 100;
+ //gd.horizontalSpan = 2;
+ available.getControl().setLayoutData(gd);
+
+ topLeft = createTableViewer(pageContainer, "top-left"); //$NON-NLS-1$
+ gd = new GridData(GridData.FILL_BOTH);
+ gd.widthHint = 100;
+ topLeft.getControl().setLayoutData(gd);
+
+ topRight = createTableViewer(pageContainer, "top-right"); //$NON-NLS-1$
+ gd = new GridData(GridData.FILL_BOTH);
+ gd.widthHint = 100;
+ topRight.getControl().setLayoutData(gd);
+
+ //label = new Label(pageContainer, SWT.NULL);
+ //label.setText(Messages.WelcomeCustomizationPreferencePage_bottom);
+ bottomLeft = createTableViewer(pageContainer, "bottom-left"); //$NON-NLS-1$
+ gd = new GridData(GridData.FILL_BOTH);
+ gd.widthHint = 100;
+ bottomLeft.getControl().setLayoutData(gd);
+
+ bottomRight = createTableViewer(pageContainer, "bottom-right"); //$NON-NLS-1$
+ gd = new GridData(GridData.FILL_BOTH);
+ gd.widthHint = 100;
+ bottomRight.getControl().setLayoutData(gd);
+ }
+
+ private void updatePageContainer(String pageId, PageData pd) {
+ if (pageId == null)
+ return;
+ refreshQuadrant(topLeft, pd, IUniversalIntroConstants.DIV_LAYOUT_TOP_LEFT);
+ refreshQuadrant(topRight, pd, IUniversalIntroConstants.DIV_LAYOUT_TOP_RIGHT);
+ refreshQuadrant(bottomLeft, pd, IUniversalIntroConstants.DIV_LAYOUT_BOTTOM_LEFT);
+ refreshQuadrant(bottomRight, pd, IUniversalIntroConstants.DIV_LAYOUT_BOTTOM_RIGHT);
+ refreshQuadrant(available, pd, IUniversalIntroConstants.HIDDEN);
+ }
+
+ private void refreshQuadrant(TableViewer viewer, PageData pd, String quadrant) {
+ GroupData gd = pd!=null?pd.findGroup(quadrant):null;
+ viewer.setInput(gd);
+ if (gd!=null)
+ updateColumnSizes(viewer);
+ }
+
+ private void onTabChange(TabItem item) {
+ String id = (String) item.getData();
+ if (item.getControl() == pageContainer)
+ updatePageContainer(id, (PageData) item.getData("pageData")); //$NON-NLS-1$
+ }
+
+ private void loadData(boolean fromDefault) {
+ IProduct product = Platform.getProduct();
+ if (product == null)
+ return;
+ String pid = product.getId();
+ introRootPages.clear();
+ Preferences prefs = UniversalIntroPlugin.getDefault().getPluginPreferences();
+ Preferences iprefs = IntroPlugin.getDefault().getPluginPreferences();
+ // 1. Root pages
+ // try product-qualified value first
+ String key = pid + "_" + INTRO_ROOT_PAGES; //$NON-NLS-1$
+ String rootPages = fromDefault ? prefs.getDefaultString(key) : prefs.getString(key);
+ if (rootPages.length() == 0) {
+ rootPages = fromDefault ? prefs.getDefaultString(INTRO_ROOT_PAGES) : prefs
+ .getString(INTRO_ROOT_PAGES);
+ }
+ if (rootPages.length() > 0) {
+ StringTokenizer stok = new StringTokenizer(rootPages, ","); //$NON-NLS-1$
+ while (stok.hasMoreTokens()) {
+ String tok = stok.nextToken().trim();
+ if (!NO_ROOT_PAGES.equals(tok)) {
+ introRootPages.add(tok);
+ }
+ }
+ }
+ // 3. Active theme
+ key = pid + "_" + INTRO_THEME; //$NON-NLS-1$
+ String value = fromDefault ? iprefs.getDefaultString(key) : iprefs.getString(key);
+ if (value.length() == 0) {
+ key = INTRO_THEME;
+ value = fromDefault ? iprefs.getDefaultString(key) : iprefs.getString(key);
+ }
+ if (value.length() > 0)
+ introThemeId = value;
+ // 4. Intro data
+ key = pid + "_" + INTRO_DATA; //$NON-NLS-1$
+ value = fromDefault ? prefs.getDefaultString(key) : prefs.getString(key);
+ if (value.length() == 0) {
+ key = INTRO_DATA;
+ value = fromDefault ? prefs.getDefaultString(key) : prefs.getString(key);
+ }
+ if (value.length() == 0)
+ value = null;
+ if (value != null && value.startsWith("product:")) //$NON-NLS-1$
+ value = value.substring(8);
+ value = BundleUtil.getResolvedResourceLocation(value, product.getDefiningBundle());
+ introData = new IntroData(pid, value, true);
+ introData.addImplicitContent();
+ }
+
+ public void dispose() {
+ Iterator iter = themeList.iterator();
+ while (iter.hasNext()) {
+ ((IntroTheme)iter.next()).dispose();
+ }
+ extensionImage.dispose();
+ ihighImage.dispose();
+ ilowImage.dispose();
+ inewImage.dispose();
+ icalloutImage.dispose();
+ themeImage.dispose();
+ }
+
+ private void updateIntroThemeFromData() {
+ if (introThemeId != null) {
+ for (int i = 0; i < themeList.size(); i++) {
+ IntroTheme theme = (IntroTheme) themeList.get(i);
+ if (theme.getId().equals(introThemeId)) {
+ introTheme = theme;
+ break;
+ }
+ }
+ }
+ updateThemePreview();
+ }
+
+ private void updateWidgetsFromData() {
+ // sync up intro background part
+ updateIntroThemeFromData();
+ // sync up the root page checklist
+ rootPages.setInput(ROOT_PAGE_TABLE);
+ ArrayList selected = new ArrayList();
+ for (int i = 0; i < ROOT_PAGE_TABLE.length; i++) {
+ String id = ROOT_PAGE_TABLE[i].id;
+ if (introRootPages.contains(id))
+ selected.add(ROOT_PAGE_TABLE[i]);
+ }
+ rootPages.setCheckedElements(selected.toArray());
+ }
+
+ private void updateThemePreview() {
+ themes.setInput(themes);
+ if (introTheme != null)
+ themes.setSelection(new StructuredSelection(introTheme), true);
+ themePreview.redraw();
+ }
+
+ public boolean performOk() {
+ saveData();
+ BusyIndicator.showWhile(shell.getDisplay(), new Runnable() {
+ public void run() {
+ restartIntro();
+ }
+ });
+ return true;
+ }
+
+ /**
+ * Remember the current page, close intro, reopen it and show the saved page.
+ *
+ */
+ private void restartIntro() {
+ IIntroManager manager = PlatformUI.getWorkbench().getIntroManager();
+ IIntroPart part = manager.getIntro();
+ if (part != null && part instanceof CustomizableIntroPart) {
+ IntroModelRoot modelRoot = IntroPlugin.getDefault().getIntroModelRoot();
+ String currentPageId = modelRoot.getCurrentPageId();
+ IWorkbenchWindow window = part.getIntroSite().getWorkbenchWindow();
+ boolean standby = manager.isIntroStandby(part);
+ PlatformUI.getWorkbench().getIntroManager().closeIntro(part);
+ IntroPlugin.getDefault().resetVolatileImageRegistry();
+ UniversalIntroPlugin.getDefault().resetVolatileImageRegistry();
+ part = PlatformUI.getWorkbench().getIntroManager().showIntro(window, standby);
+ if (part != null && !standby) {
+ StringBuffer url = new StringBuffer();
+ url.append("http://org.eclipse.ui.intro/showPage?id="); //$NON-NLS-1$
+ url.append(currentPageId);
+ IIntroURL introURL = IntroURLFactory.createIntroURL(url.toString());
+ if (introURL != null)
+ introURL.execute();
+ }
+ }
+ }
+
+ protected void performDefaults() {
+ loadData(true);
+ // Dispose all the root page tabs
+ TabItem[] items = tabFolder.getItems();
+ for (int i = 0; i < items.length; i++) {
+ if (items[i].getData("pageData") != null) //$NON-NLS-1$
+ items[i].dispose();
+ }
+ // Add them back in based on the checked state
+ addRootPages();
+ updateWidgetsFromData();
+ // Get the items again
+ items = tabFolder.getItems();
+ // Select root
+ onTabChange(items[0]);
+ }
+
+ private void saveData() {
+ Preferences prefs = UniversalIntroPlugin.getDefault().getPluginPreferences();
+ Preferences iprefs = IntroPlugin.getDefault().getPluginPreferences();
+ boolean toAll = applyToAll.getSelection();
+ IProduct product = Platform.getProduct();
+ if (product == null)
+ return;
+ String pid = product.getId();
+ StringBuffer sbuf = new StringBuffer();
+ if (introRootPages.size() == 0) {
+ // An empty string means no preference so special value needed
+ // to indicate no root pages.
+ sbuf.append(NO_ROOT_PAGES);
+ }
+ for (int i = 0; i < introRootPages.size(); i++) {
+ if (i > 0)
+ sbuf.append(","); //$NON-NLS-1$
+ sbuf.append((String) introRootPages.get(i));
+ }
+ String key = pid + "_" + INTRO_ROOT_PAGES; //$NON-NLS-1$
+ prefs.setValue(key, sbuf.toString());
+ if (toAll) {
+ key = INTRO_ROOT_PAGES;
+ prefs.setValue(key, sbuf.toString());
+ }
+ // store page layouts
+ StringWriter writer = new StringWriter();
+ PrintWriter pwriter = new PrintWriter(writer);
+ introData.write(pwriter);
+ pwriter.close();
+ String value = writer.toString();
+ key = pid + "_" + INTRO_DATA; //$NON-NLS-1$
+ prefs.setValue(key, value);
+ if (toAll) {
+ key = INTRO_DATA;
+ prefs.setValue(key, value);
+ }
+ if (introTheme != null) {
+ key = pid + "_" + INTRO_THEME; //$NON-NLS-1$
+ value = introTheme.getId();
+ iprefs.setValue(key, value);
+ }
+ if (toAll) {
+ key = INTRO_THEME;
+ iprefs.setValue(key, value);
+ }
+ UniversalIntroPlugin.getDefault().savePluginPreferences();
+ IntroPlugin.getDefault().savePluginPreferences();
+ }
+
+ private void addHomePage() {
+ TabItem item = new TabItem(tabFolder, SWT.NULL);
+ item.setText(Messages.WelcomeCustomizationPreferencePage_home);
+ Composite container = new Composite(tabFolder, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ container.setLayout(layout);
+ Composite leftColumn = new Composite(container, SWT.NULL);
+ layout = new GridLayout();
+ layout.marginWidth = layout.marginHeight = 0;
+ leftColumn.setLayout(layout);
+ leftColumn.setLayoutData(new GridData(GridData.FILL_BOTH));
+ Composite rightColumn = new Composite(container, SWT.NULL);
+ layout = new GridLayout();
+ layout.marginWidth = layout.marginHeight = 0;
+ rightColumn.setLayout(layout);
+ rightColumn.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ Label themeLabel = new Label(leftColumn, SWT.NULL);
+ themeLabel.setText(Messages.WelcomeCustomizationPreferencePage_background);
+ GridData gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
+ themeLabel.setLayoutData(gd);
+ themes = new TableViewer(leftColumn, SWT.BORDER);
+ themes.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
+ themes.setContentProvider(contentProvider);
+ themes.setLabelProvider(labelProvider);
+ themes.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent e) {
+ Object sel = ((StructuredSelection) e.getSelection()).getFirstElement();
+ introTheme = (IntroTheme) sel;
+ themePreview.redraw();
+ }
+ });
+ loadThemes();
+ Label previewLabel = new Label(rightColumn, SWT.NULL);
+ previewLabel.setText(Messages.WelcomeCustomizationPreferencePage_preview);
+ themePreview = new Canvas(rightColumn, SWT.NULL);
+ gd = new GridData();
+ gd.widthHint = 160+20;
+ gd.heightHint = 120+20;
+ themePreview.setLayoutData(gd);
+ themePreview.addPaintListener(new PaintListener() {
+
+ public void paintControl(PaintEvent e) {
+ if (introTheme == null)
+ return;
+ Image bgImage = introTheme.getPreviewImage();
+ if (bgImage == null)
+ return;
+ //Rectangle carea = themePreview.getClientArea();
+ Rectangle ibounds = bgImage.getBounds();
+ e.gc.drawImage(bgImage, 0, 0, ibounds.width, ibounds.height, 10, 10, 160, 120);
+ }
+ });
+ Label label = new Label(container, SWT.NULL);
+ label.setText(Messages.WelcomeCustomizationPreferencePage_rootpages);
+ gd = new GridData();
+ gd.horizontalSpan = 2;
+ label.setLayoutData(gd);
+ rootPages = CheckboxTableViewer.newCheckList(container, SWT.BORDER);
+ rootPages.setContentProvider(contentProvider);
+ rootPages.setLabelProvider(labelProvider);
+ gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
+ gd.horizontalSpan = 2;
+ rootPages.getControl().setLayoutData(gd);
+ rootPages.addCheckStateListener(new ICheckStateListener() {
+
+ public void checkStateChanged(CheckStateChangedEvent event) {
+ RootPage page = (RootPage) event.getElement();
+ boolean checked = event.getChecked();
+ onPageChecked(page.id, checked);
+ }
+ });
+ item.setControl(container);
+ }
+
+ private void loadThemes() {
+ IConfigurationElement [] elements = Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.ui.intro.configExtension"); //$NON-NLS-1$
+ for (int i=0; i<elements.length; i++) {
+ if (elements[i].getName().equals("theme")) { //$NON-NLS-1$
+ themeList.add(new IntroTheme(elements[i]));
+ }
+ }
+ }
+
+ private void addPage(String id) {
+ if (!getRootPageSelected(id))
+ return;
+ TabItem item = new TabItem(tabFolder, SWT.NULL);
+ item.setText(getRootPageName(id));
+ item.setControl(pageContainer);
+ item.setData(id);
+ PageData pd = introData.getPage(id);
+ item.setData("pageData", pd); //$NON-NLS-1$
+ }
+
+ private void onPageChecked(String id, boolean checked) {
+ TabItem[] items = tabFolder.getItems();
+ if (checked) {
+ for (int i = 0; i < items.length; i++) {
+ TabItem item = items[i];
+ if (item.getData() != null)
+ item.dispose();
+ }
+ introRootPages.add(id);
+ addRootPages();
+ } else {
+ for (int i = 0; i < items.length; i++) {
+ TabItem item = items[i];
+ String itemId = (String) item.getData();
+ if (itemId != null && itemId.equals(id)) {
+ item.dispose();
+ introRootPages.remove(id);
+ return;
+ }
+ }
+ }
+ }
+
+ private String getRootPageName(String id) {
+ for (int i = 0; i < ROOT_PAGE_TABLE.length; i++) {
+ if (ROOT_PAGE_TABLE[i].id.equals(id))
+ return ROOT_PAGE_TABLE[i].getName();
+ }
+ return "?"; //$NON-NLS-1$
+ }
+
+ private boolean getRootPageSelected(String id) {
+ for (int i = 0; i < introRootPages.size(); i++) {
+ String cid = (String) introRootPages.get(i);
+ if (cid.equals(id))
+ return true;
+ }
+ return false;
+ }
+
+ public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
+ throws CoreException {
+ }
+
+ private void createPopupMenu(final TableViewer viewer) {
+ MenuManager manager = new MenuManager();
+ manager.createContextMenu(viewer.getControl());
+ viewer.getControl().setMenu(manager.getMenu());
+ manager.setRemoveAllWhenShown(true);
+ manager.addMenuListener(new IMenuListener() {
+
+ public void menuAboutToShow(IMenuManager manager) {
+ fillPopupMenu(manager, viewer);
+ }
+ });
+ }
+
+ private void addDNDSupport(TableViewer viewer) {
+ viewer.addDragSupport(DND.DROP_MOVE, TRANSFER_TYPES, new TableDragSourceListener(viewer));
+ viewer.addDropSupport(DND.DROP_MOVE, TRANSFER_TYPES, new TableDropTargetListener(viewer));
+ }
+
+ private TableViewer createTableViewer(Composite parent, String id) {
+ final Table table = new Table(parent, SWT.BORDER | SWT.FULL_SELECTION);
+ final TableColumn column1 = new TableColumn(table, SWT.NULL);
+ column1.setMoveable(false);
+ column1.setWidth(20);
+ column1.setResizable(false);
+ final TableColumn column2 = new TableColumn(table, SWT.NULL);
+ column2.setResizable(true);
+ final TableViewer viewer = new TableViewer(table);
+ CellEditor[] editors = new CellEditor[2];
+ editors[0] = new ComboBoxCellEditor(table, ExtensionData.IMPORTANCE_NAME_TABLE, SWT.READ_ONLY);
+ viewer.setCellEditors(editors);
+ viewer.setColumnProperties(new String[] { IUniversalIntroConstants.P_IMPORTANCE,
+ IUniversalIntroConstants.P_NAME });
+ viewer.setCellModifier(new ICellModifier() {
+
+ public boolean canModify(Object element, String property) {
+ return property.equals(IUniversalIntroConstants.P_IMPORTANCE);
+ }
+
+ public Object getValue(Object element, String property) {
+ if (element instanceof ExtensionData) {
+ ExtensionData ed = (ExtensionData) element;
+ if (property.equals(IUniversalIntroConstants.P_IMPORTANCE))
+ return new Integer(ed.getImportance());
+ }
+ return null;
+ }
+
+ public void modify(Object element, String property, Object value) {
+ Integer ivalue = (Integer) value;
+ TableItem item = (TableItem) element;
+ ExtensionData ed = (ExtensionData) item.getData();
+ ed.setImportance(ivalue.intValue());
+ viewer.update(ed, new String [] {IUniversalIntroConstants.P_IMPORTANCE});
+ }
+ });
+ viewer.setContentProvider(contentProvider);
+ viewer.setLabelProvider(labelProvider);
+ viewer.setData("id", id); //$NON-NLS-1$
+ createPopupMenu(viewer);
+ addDNDSupport(viewer);
+ return viewer;
+ }
+
+ private void fillPopupMenu(IMenuManager manager, final TableViewer viewer) {
+ StructuredSelection ssel = (StructuredSelection) viewer.getSelection();
+
+ manager.add(new Separator());
+ Action addSeparator = new Action(Messages.WelcomeCustomizationPreferencePage_addSeparator) {
+ public void run() {
+ doAddSeparator(viewer);
+ }
+ };
+
+ manager.add(addSeparator);
+ manager.add(new Separator());
+
+ if (ssel.size() == 1 && viewer != available) {
+ Action upAction = new Action(Messages.WelcomeCustomizationPreferencePage_up) {
+
+ public void run() {
+ doMove(viewer, true);
+ }
+ };
+ Action downAction = new Action(Messages.WelcomeCustomizationPreferencePage_down) {
+
+ public void run() {
+ doMove(viewer, false);
+ }
+ };
+ BaseData ed = (BaseData) ssel.getFirstElement();
+ GroupData gd = (GroupData) viewer.getInput();
+ upAction.setEnabled(gd.canMoveUp(ed));
+ downAction.setEnabled(gd.canMoveDown(ed));
+ manager.add(upAction);
+ manager.add(downAction);
+ }
+ if (ssel.size() > 0) {
+ manager.add(new Separator());
+ MenuManager menu = new MenuManager(Messages.WelcomeCustomizationPreferencePage_moveTo);
+ addMoveToAction(menu, available, viewer,
+ Messages.WelcomeCustomizationPreferencePage_menu_available);
+ addMoveToAction(menu, topLeft, viewer, Messages.WelcomeCustomizationPreferencePage_menu_top_left);
+ addMoveToAction(menu, topRight, viewer, Messages.WelcomeCustomizationPreferencePage_menu_top_right);
+ addMoveToAction(menu, bottomLeft, viewer, Messages.WelcomeCustomizationPreferencePage_menu_bottom_left);
+ addMoveToAction(menu, bottomRight, viewer, Messages.WelcomeCustomizationPreferencePage_menu_bottom_right);
+ manager.add(menu);
+
+ boolean addDeleteSeparator=false;
+
+ for (Iterator iter=ssel.iterator(); iter.hasNext();) {
+ Object obj = iter.next();
+ if (obj instanceof SeparatorData)
+ addDeleteSeparator=true;
+ else {
+ addDeleteSeparator=false;
+ break;
+ }
+ }
+ if (addDeleteSeparator) {
+ Action deleteSeparator = new Action(Messages.WelcomeCustomizationPreferencePage_removeSeparator) {
+ public void run() {
+ doRemoveSeparators(viewer);
+ }
+ };
+ manager.add(deleteSeparator);
+ }
+ }
+ }
+
+ private void addMoveToAction(MenuManager menu, final TableViewer target, final TableViewer source,
+ String name) {
+ if (source == target)
+ return;
+ Action action = new Action(name) {
+
+ public void run() {
+ doMoveTo(source, target);
+ }
+ };
+ menu.add(action);
+ }
+
+ private void doMove(Viewer viewer, boolean up) {
+ Object obj = ((StructuredSelection) viewer.getSelection()).getFirstElement();
+ GroupData gd = (GroupData) viewer.getInput();
+ if (up)
+ gd.moveUp((BaseData) obj);
+ else
+ gd.moveDown((BaseData) obj);
+ viewer.refresh();
+ }
+
+ private void doAddSeparator(Viewer viewer) {
+ Object obj = ((StructuredSelection) viewer.getSelection()).getFirstElement();
+ GroupData gd = (GroupData) viewer.getInput();
+ if (gd == null) {
+ gd = createTargetGd(viewer);
+ viewer.setInput(gd);
+ }
+ gd.addSeparator((BaseData)obj);
+ viewer.refresh();
+ updateColumnSizes((TableViewer)viewer);
+ }
+
+ private void doRemoveSeparators(Viewer viewer) {
+ StructuredSelection ssel = ((StructuredSelection) viewer.getSelection());
+ GroupData gd = (GroupData) viewer.getInput();
+ for (Iterator iter=ssel.iterator(); iter.hasNext();) {
+ SeparatorData sdata = (SeparatorData)iter.next();
+ gd.remove(sdata);
+ }
+ viewer.refresh();
+ }
+
+ private void doMoveTo(TableViewer source, TableViewer target) {
+ Object[] selObjs = ((StructuredSelection) source.getSelection()).toArray();
+ GroupData sourceGd = (GroupData) source.getInput();
+ GroupData targetGd = (GroupData) target.getInput();
+ if (targetGd == null) {
+ targetGd = createTargetGd(target);
+ }
+ for (int i = 0; i < selObjs.length; i++) {
+ BaseData ed = (BaseData) selObjs[i];
+ sourceGd.remove(ed);
+ targetGd.add(ed);
+ }
+ source.refresh();
+ updateColumnSizes(source);
+ if (target.getInput() != null)
+ target.refresh();
+ else
+ target.setInput(targetGd);
+ updateColumnSizes(target);
+ }
+
+ private void updateColumnSizes(TableViewer viewer) {
+ TableColumn sc = viewer.getTable().getColumn(1);
+ sc.pack();
+ }
+
+ private GroupData createTargetGd(Viewer target) {
+ GroupData targetGd = null;
+ if (target == topLeft)
+ targetGd = new GroupData(PageData.P_TOP_LEFT, false);
+ else if (target == topRight)
+ targetGd = new GroupData(PageData.P_TOP_RIGHT, false);
+ else if (target == bottomLeft)
+ targetGd = new GroupData(PageData.P_BOTTOM_LEFT, false);
+ else if (target == bottomRight)
+ targetGd = new GroupData(PageData.P_BOTTOM_RIGHT, false);
+ else if (target == available)
+ targetGd = new GroupData(IUniversalIntroConstants.HIDDEN, false);
+ else
+ return null;
+ TabItem[] items = tabFolder.getSelection();
+ PageData pd = (PageData) items[0].getData("pageData"); //$NON-NLS-1$
+ if (pd == null) {
+ String pageId = (String)items[0].getData();
+ pd = new PageData(pageId);
+ items[0].setData("pageData", pd); //$NON-NLS-1$
+ introRootPages.add(pageId);
+ }
+ pd.add(targetGd);
+ return targetGd;
+ }
+
+ private void selectFirstPage() {
+ if (firstPageId == null)
+ return;
+ TabItem[] items = tabFolder.getItems();
+ for (int i = 0; i < items.length; i++) {
+ TabItem item = items[i];
+ PageData pd = (PageData) item.getData("pageData"); //$NON-NLS-1$
+ if (pd != null && pd.getId().equals(firstPageId)) {
+ tabFolder.setSelection(i);
+ onTabChange(item);
+ return;
+ }
+ }
+ }
+
+ public void setCurrentPage(String pageId) {
+ firstPageId = pageId;
+ }
+
+ public void setShell(Shell shell) {
+ this.shell = shell;
+ }
+}
diff --git a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizationDialog.java b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizationDialog.java
new file mode 100644
index 000000000..cf865ad7c
--- /dev/null
+++ b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizationDialog.java
@@ -0,0 +1,67 @@
+/*******************************************************************************
+ * Copyright (c) 2008 IBM Corporation and others.
+ * 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:
+ * IBM Corporation - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.ui.internal.intro.universal;
+
+import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.intro.universal.util.ImageUtil;
+
+public class CustomizationDialog extends TrayDialog {
+
+ private CustomizationContentsArea contentsArea;
+ private String pageId;
+
+ private CustomizationContentsArea getContentsArea() {
+ if (contentsArea == null) {
+ contentsArea = new CustomizationContentsArea();
+ }
+ return contentsArea;
+ }
+ protected CustomizationDialog(Shell shell, String pageId) {
+ super(shell);
+ setShellStyle(getShellStyle() | SWT.RESIZE);
+ this.pageId = pageId;
+ }
+
+ protected Control createDialogArea(Composite parent) {
+ CustomizationContentsArea contents = getContentsArea();
+ contents.setShell(getShell());
+ contents.setCurrentPage(pageId);
+ Composite outerContainer = (Composite) super.createDialogArea(parent);
+ Control inner = contents.createContents(outerContainer);
+ inner.setLayoutData(new GridData(GridData.FILL_BOTH));
+ return outerContainer;
+ }
+
+ protected void okPressed() {
+ if (getContentsArea().performOk()) {
+ getContentsArea().dispose();
+ }
+ super.okPressed();
+ }
+
+ protected void cancelPressed() {
+ getContentsArea().dispose();
+ super.cancelPressed();
+ }
+
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ newShell.setText(Messages.WelcomeCustomizationPreferencePage_Customize);
+ newShell.setImage(ImageUtil.createImage("full/elcl16/configure.gif")); //$NON-NLS-1$);
+ }
+
+}
diff --git a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizeAction.java b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizeAction.java
index f24069c07..f48430ee7 100644
--- a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizeAction.java
+++ b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/CustomizeAction.java
@@ -14,7 +14,6 @@ import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.Platform;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.preference.IPreferenceNode;
-import org.eclipse.jface.preference.PreferenceDialog;
import org.eclipse.jface.preference.PreferenceManager;
import org.eclipse.jface.preference.PreferenceNode;
import org.eclipse.ui.IWorkbenchWindow;
@@ -59,8 +58,8 @@ public class CustomizeAction extends Action {
IPreferenceNode node = createPreferenceNode(pageId);
pm.addToRoot(node);
IWorkbenchWindow window = site.getWorkbenchWindow();
- PreferenceDialog dialog = new PreferenceDialog(window.getShell(), pm);
- dialog.open();
+ CustomizationDialog dlg = new CustomizationDialog(window.getShell(), pageId);
+ dlg.open();
}
private IPreferenceNode createPreferenceNode(final String pageId) {
diff --git a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.java b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.java
index 85e39094b..371b36050 100644
--- a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.java
+++ b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.java
@@ -97,4 +97,5 @@ public class Messages extends NLS {
public static String WelcomeCustomizationPreferencePage_horizontalSeparator;
public static String WelcomeCustomizationPreferencePage_addSeparator;
public static String WelcomeCustomizationPreferencePage_removeSeparator;
+ public static String WelcomeCustomizationPreferencePage_Customize;
}
diff --git a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.properties b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.properties
index 9aa60245c..ab661db58 100644
--- a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.properties
+++ b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/Messages.properties
@@ -87,6 +87,7 @@ WelcomeCustomizationPreferencePage_NoMnemonic_samples= Samples
WelcomeCustomizationPreferencePage_NoMnemonic_whatsnew= What's New
WelcomeCustomizationPreferencePage_NoMnemonic_webresources= Web Resources
WelcomeCustomizationPreferencePage_NoMnemonic_migrate= Migrate
+WelcomeCustomizationPreferencePage_Customize= Customize
#Importance levels
ExtensionData_callout=Callout
diff --git a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/WelcomeCustomizationPreferencePage.java b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/WelcomeCustomizationPreferencePage.java
index 5469cce11..b5e45a8ba 100644
--- a/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/WelcomeCustomizationPreferencePage.java
+++ b/org.eclipse.ui.intro.universal/src/org/eclipse/ui/internal/intro/universal/WelcomeCustomizationPreferencePage.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2006, 2007 IBM Corporation and others.
+ * Copyright (c) 2006, 2008 IBM Corporation and others.
* 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
@@ -10,394 +10,20 @@
*******************************************************************************/
package org.eclipse.ui.internal.intro.universal;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.StringTokenizer;
-
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExecutableExtension;
-import org.eclipse.core.runtime.IProduct;
-import org.eclipse.core.runtime.Platform;
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.jface.action.Action;
-import org.eclipse.jface.action.IMenuListener;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.action.Separator;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.CellEditor;
-import org.eclipse.jface.viewers.CheckStateChangedEvent;
-import org.eclipse.jface.viewers.CheckboxTableViewer;
-import org.eclipse.jface.viewers.ComboBoxCellEditor;
-import org.eclipse.jface.viewers.ICellModifier;
-import org.eclipse.jface.viewers.ICheckStateListener;
-import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.ITableLabelProvider;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.SelectionChangedEvent;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.jface.viewers.ViewerComparator;
-import org.eclipse.jface.viewers.ViewerDropAdapter;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.custom.BusyIndicator;
-import org.eclipse.swt.dnd.DND;
-import org.eclipse.swt.dnd.DragSourceEvent;
-import org.eclipse.swt.dnd.DragSourceListener;
-import org.eclipse.swt.dnd.Transfer;
-import org.eclipse.swt.dnd.TransferData;
-import org.eclipse.swt.events.PaintEvent;
-import org.eclipse.swt.events.PaintListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.swt.graphics.Rectangle;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.FileDialog;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.TabFolder;
-import org.eclipse.swt.widgets.TabItem;
-import org.eclipse.swt.widgets.Table;
-import org.eclipse.swt.widgets.TableColumn;
-import org.eclipse.swt.widgets.TableItem;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.internal.intro.impl.IntroPlugin;
-import org.eclipse.ui.internal.intro.impl.model.IntroModelRoot;
-import org.eclipse.ui.internal.intro.universal.util.BundleUtil;
-import org.eclipse.ui.internal.intro.universal.util.ImageUtil;
-import org.eclipse.ui.internal.intro.universal.util.Log;
-import org.eclipse.ui.intro.IIntroManager;
-import org.eclipse.ui.intro.IIntroPart;
-import org.eclipse.ui.intro.config.CustomizableIntroPart;
-import org.eclipse.ui.intro.config.IIntroURL;
-import org.eclipse.ui.intro.config.IntroURLFactory;
-import org.osgi.framework.Bundle;
-
public class WelcomeCustomizationPreferencePage extends PreferencePage implements IWorkbenchPreferencePage,
IExecutableExtension {
- private static final String INTRO_ROOT_PAGES = "INTRO_ROOT_PAGES"; //$NON-NLS-1$
- private static final String INTRO_DATA = "INTRO_DATA"; //$NON-NLS-1$
- private static final String INTRO_THEME = "INTRO_THEME"; //$NON-NLS-1$
- private static final String NO_ROOT_PAGES = "no_root_pages"; //$NON-NLS-1$
- private TabFolder tabFolder;
- private String firstPageId;
- private Composite pageContainer;
- private TableViewer themes;
- private TableViewer available;
- private TableViewer topLeft;
- private TableViewer topRight;
- private TableViewer bottomLeft;
- private TableViewer bottomRight;
- private CheckboxTableViewer rootPages;
- private ArrayList introRootPages = new ArrayList();
- private ArrayList themeList = new ArrayList();
- private IntroTheme introTheme;
- private String introThemeId;
- private IntroData introData;
- private Canvas themePreview;
- private TableContentProvider contentProvider;
- private TableLabelProvider labelProvider;
- private Button applyToAll;
- private Image extensionImage;
- private Image themeImage;
- private Image ihighImage;
- private Image ilowImage;
- private Image inewImage;
- private Image icalloutImage;
- private static final Transfer[] TRANSFER_TYPES = new Transfer[] { ExtensionDataTransfer.getInstance() };
-
-
- private static final RootPage ROOT_PAGE_TABLE[] = new RootPage[] {
- new RootPage(IUniversalIntroConstants.ID_OVERVIEW,
- Messages.WelcomeCustomizationPreferencePage_overview,
- Messages.WelcomeCustomizationPreferencePage_NoMnemonic_overview),
- new RootPage(IUniversalIntroConstants.ID_FIRSTSTEPS,
- Messages.WelcomeCustomizationPreferencePage_firststeps,
- Messages.WelcomeCustomizationPreferencePage_NoMnemonic_firststeps),
- new RootPage(IUniversalIntroConstants.ID_TUTORIALS,
- Messages.WelcomeCustomizationPreferencePage_tutorials,
- Messages.WelcomeCustomizationPreferencePage_NoMnemonic_tutorials),
- new RootPage(IUniversalIntroConstants.ID_SAMPLES,
- Messages.WelcomeCustomizationPreferencePage_samples,
- Messages.WelcomeCustomizationPreferencePage_NoMnemonic_samples),
- new RootPage(IUniversalIntroConstants.ID_WHATSNEW,
- Messages.WelcomeCustomizationPreferencePage_whatsnew,
- Messages.WelcomeCustomizationPreferencePage_NoMnemonic_whatsnew),
- new RootPage(IUniversalIntroConstants.ID_WEBRESOURCES,
- Messages.WelcomeCustomizationPreferencePage_webresources,
- Messages.WelcomeCustomizationPreferencePage_NoMnemonic_webresources),
- new RootPage(IUniversalIntroConstants.ID_MIGRATE,
- Messages.WelcomeCustomizationPreferencePage_migrate,
- Messages.WelcomeCustomizationPreferencePage_NoMnemonic_migrate) };
-
- static class RootPage {
-
- public String id;
- public String name;
- public String nameNoMnemonic;
-
- public RootPage(String id, String name, String nameNoMnemonic) {
- this.id = id;
- this.name = name;
- this.nameNoMnemonic = nameNoMnemonic;
- }
-
- public String getName() {
- return name;
- }
-
- public String getNameNoMnemonic() {
- return nameNoMnemonic;
- }
-
- public boolean equals(Object obj) {
- if (obj == this)
- return true;
- if (obj == null)
- return false;
- if (obj instanceof RootPage) {
- RootPage page = (RootPage) obj;
- return page.id.equals(id) && page.name.equals(name);
- }
- return false;
- }
-
- public String toString() {
- return name;
- }
- }
-
- class TableContentProvider implements IStructuredContentProvider {
-
- public Object[] getElements(Object inputElement) {
- if (inputElement == ROOT_PAGE_TABLE)
- return ROOT_PAGE_TABLE;
- if (inputElement instanceof GroupData) {
- return ((GroupData) inputElement).getChildren();
- }
- if (inputElement == themes) {
- return themeList.toArray();
- }
- return new Object[0];
- }
-
- public void dispose() {
- }
-
- public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
- }
- }
-
- class TableDragSourceListener implements DragSourceListener {
-
- TableViewer viewer;
- BaseData[] sel;
-
- public TableDragSourceListener(TableViewer viewer) {
- this.viewer = viewer;
- }
-
- public void dragStart(DragSourceEvent event) {
- IStructuredSelection ssel = (IStructuredSelection) viewer.getSelection();
- if (ssel.size() > 0) {
- event.doit = true;
- } else {
- event.doit = false;
- }
- };
-
- public void dragSetData(DragSourceEvent event) {
- IStructuredSelection ssel = (IStructuredSelection) viewer.getSelection();
- BaseData[] array = new BaseData[ssel.size()];
- int i = 0;
- for (Iterator iter = ssel.iterator(); iter.hasNext();) {
- array[i++] = (BaseData) iter.next();
- }
- event.data = array;
- sel = array;
- }
-
- public void dragFinished(DragSourceEvent event) {
- if (event.detail == DND.DROP_MOVE) {
- GroupData gd = (GroupData) viewer.getInput();
- for (int i = 0; i < sel.length; i++) {
- BaseData ed = sel[i];
- gd.remove(ed);
- }
- viewer.refresh();
- updateColumnSizes(viewer);
- }
- sel = null;
- }
- }
-
- class TableDropTargetListener extends ViewerDropAdapter {
-
- public TableDropTargetListener(TableViewer viewer) {
- super(viewer);
- }
-
- public boolean performDrop(Object data) {
- BaseData target = (BaseData) getCurrentTarget();
- int loc = getCurrentLocation();
- GroupData gd = (GroupData) getViewer().getInput();
- if (gd == null)
- gd = createTargetGd(getViewer());
- BaseData[] sel = (BaseData[]) data;
-
- int index = target != null ? gd.getIndexOf(target) : -1;
- int startingIndex = getStartIndex(gd, sel);
- if (target != null) {
- if (loc == LOCATION_AFTER
- || (loc == LOCATION_ON && startingIndex != -1 && startingIndex < index))
- index++;
- else if (index > 0 && loc == LOCATION_BEFORE)
- index--;
- }
-
- for (int i = 0; i < sel.length; i++) {
- BaseData ed = sel[i];
- if (index == -1)
- gd.add(ed);
- else
- gd.add(index++, ed);
- }
- if (getViewer().getInput() != null)
- getViewer().refresh();
- else
- getViewer().setInput(gd);
- updateColumnSizes((TableViewer) getViewer());
- return true;
- }
-
- private int getStartIndex(GroupData gd, BaseData[] sel) {
- for (int i = 0; i < sel.length; i++) {
- BaseData ed = sel[i];
- int index = gd.getIndexOf(ed.getId());
- if (index != -1)
- return index;
- }
- return -1;
- }
-
- public boolean validateDrop(Object target, int operation, TransferData transferType) {
- return ExtensionDataTransfer.getInstance().isSupportedType(transferType);
- }
- }
-
- class TableLabelProvider extends LabelProvider implements ITableLabelProvider {
-
- public String getText(Object obj) {
- if (obj instanceof RootPage) {
- return ((RootPage) obj).getNameNoMnemonic();
- }
- if (obj instanceof ExtensionData) {
- ExtensionData ed = (ExtensionData) obj;
- String name = ed.getName();
- if (name != null && name.length() > 0)
- return name;
- return ed.getId();
- }
- if (obj instanceof SeparatorData) {
- return Messages.WelcomeCustomizationPreferencePage_horizontalSeparator;
- }
- if (obj instanceof IntroTheme) {
- IntroTheme bg = (IntroTheme) obj;
- return bg.getName();
- }
- return super.getText(obj);
- }
-
- public Image getImage(Object obj) {
- if (obj instanceof ExtensionData) {
- ExtensionData ed = (ExtensionData) obj;
- switch (ed.getImportance()) {
- case ExtensionData.HIGH:
- return ihighImage;
- case ExtensionData.LOW:
- return ilowImage;
- case ExtensionData.NEW:
- return inewImage;
- case ExtensionData.CALLOUT:
- return icalloutImage;
- }
- return extensionImage;
- }
- if (obj instanceof IntroTheme)
- return themeImage;
- return null;
- }
-
- public Image getColumnImage(Object element, int columnIndex) {
- if (columnIndex == 0)
- return getImage(element);
- return null;
- }
-
- public String getColumnText(Object element, int columnIndex) {
- if (columnIndex == 1 || element instanceof IntroTheme || element instanceof RootPage)
- return getText(element);
- return null;
- }
- }
-
- class IntroTheme {
- IConfigurationElement element;
- Image previewImage;
-
- public String getName() {
- return element.getAttribute("name"); //$NON-NLS-1$
- }
-
- public String getId() {
- return element.getAttribute("id"); //$NON-NLS-1$
- }
-
- public IntroTheme(IConfigurationElement element) {
- this.element = element;
- }
-
- public Image getPreviewImage() {
- if (previewImage==null) {
- String path = element.getAttribute("previewImage"); //$NON-NLS-1$
- if (path!=null) {
- String bid = element.getDeclaringExtension().getNamespaceIdentifier();
- Bundle bundle = Platform.getBundle(bid);
- if (bundle!=null) {
- ImageDescriptor desc = ImageUtil.createImageDescriptor(bundle, path);
- previewImage = desc.createImage();
- }
- }
- }
- return previewImage;
- }
-
- public void dispose() {
- if (previewImage!=null) {
- previewImage.dispose();
- previewImage=null;
- }
- }
- }
+ private CustomizationContentsArea contentsArea;
public WelcomeCustomizationPreferencePage() {
}
@@ -409,771 +35,41 @@ public class WelcomeCustomizationPreferencePage extends PreferencePage implement
public WelcomeCustomizationPreferencePage(String title, ImageDescriptor image) {
super(title, image);
}
-
- protected Control createContents(Composite parent) {
- Composite container = new Composite(parent, SWT.NULL);
- GridData data = new GridData();
- data.verticalAlignment = GridData.FILL;
- data.horizontalAlignment = GridData.FILL;
- container.setLayoutData(data);
- GridLayout layout = new GridLayout();
- layout.marginHeight = 0;
- layout.marginWidth = 0;
- container.setLayout(layout);
- tabFolder = new TabFolder(container, SWT.TOP);
- tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
- tabFolder.addSelectionListener(new SelectionAdapter() {
-
- public void widgetSelected(SelectionEvent e) {
- TabItem[] selection = tabFolder.getSelection();
- onTabChange(selection[0]);
- }
- });
- applyToAll = new Button(container, SWT.CHECK);
- applyToAll.setText(Messages.WelcomeCustomizationPreferencePage_applyToAll);
- contentProvider = new TableContentProvider();
- labelProvider = new TableLabelProvider();
- if (isCustomizationMode()) {
- Button serialize = new Button(container, SWT.PUSH);
- serialize.setText(Messages.WelcomeCustomizationPreferencePage_serialize);
- serialize.addSelectionListener(new SelectionAdapter() {
-
- public void widgetSelected(SelectionEvent e) {
- doSerializeState();
- }
- });
- }
- extensionImage = ImageUtil.createImage("full/obj16/extension_obj.gif"); //$NON-NLS-1$
- ihighImage = ImageUtil.createImage("full/obj16/ihigh_obj.gif"); //$NON-NLS-1$
- ilowImage = ImageUtil.createImage("full/obj16/ilow_obj.gif"); //$NON-NLS-1$
- inewImage = ImageUtil.createImage("full/obj16/inew_obj.gif"); //$NON-NLS-1$
- icalloutImage = ImageUtil.createImage("full/obj16/icallout_obj.gif"); //$NON-NLS-1$
- themeImage = ImageUtil.createImage("full/obj16/image_obj.gif"); //$NON-NLS-1$
- addPages();
- org.eclipse.jface.dialogs.Dialog.applyDialogFont(container);
- PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, "org.eclipse.ui.intro.universal.universalWelcomePreference"); //$NON-NLS-1$
- return container;
- }
-
- private void doSerializeState() {
- FileDialog fd = new FileDialog(getShell(), SWT.SAVE);
- fd.setText(Messages.WelcomeCustomizationPreferencePage_serializeTitle);
- String fileName = fd.open();
- if (fileName != null) {
- try {
- FileWriter writer = new FileWriter(fileName);
- PrintWriter pwriter = new PrintWriter(writer);
- introData.write(pwriter);
- pwriter.close();
- } catch (IOException e) {
- // show an error dialog in addition
- Log.error("Error while saving the intro data file", e); //$NON-NLS-1$
- }
+
+ private CustomizationContentsArea getContentsArea() {
+ if (contentsArea == null) {
+ contentsArea = new CustomizationContentsArea();
}
+ return contentsArea;
}
- private boolean isCustomizationMode() {
- /*
- * String[] args = Platform.getApplicationArgs(); for (int i = 0; i < args.length; i++) { if
- * (args[i].equalsIgnoreCase("-welcomeCustomization")) //$NON-NLS-1$ return true; } return
- * false;
- */
- return true;
- }
-
- public void init(IWorkbench workbench) {
- }
-
- private void addPages() {
- loadData(false);
- addHomePage();
- createPageContainer();
- addRootPages();
- updateWidgetsFromData();
- selectFirstPage();
- }
-
- private void addRootPages() {
- addPage(IUniversalIntroConstants.ID_OVERVIEW);
- addPage(IUniversalIntroConstants.ID_FIRSTSTEPS);
- addPage(IUniversalIntroConstants.ID_TUTORIALS);
- addPage(IUniversalIntroConstants.ID_SAMPLES);
- addPage(IUniversalIntroConstants.ID_WHATSNEW);
- addPage(IUniversalIntroConstants.ID_WEBRESOURCES);
- addPage(IUniversalIntroConstants.ID_MIGRATE);
- }
-
- private void createPageContainer() {
- pageContainer = new Composite(tabFolder, SWT.NULL);
- GridLayout layout = new GridLayout();
- //layout.horizontalSpacing = 10;
- pageContainer.setLayout(layout);
- layout.numColumns = 4;
- //layout.makeColumnsEqualWidth = true;
- Label label;
- label = new Label(pageContainer, SWT.WRAP);
- label.setText(Messages.WelcomeCustomizationPreferencePage_pageDesc);
- GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
- gd.horizontalSpan = 4;
- label.setLayoutData(gd);
- label = new Label(pageContainer, SWT.SEPARATOR | SWT.HORIZONTAL);
- gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL);
- gd.horizontalSpan = 4;
- label.setLayoutData(gd);
- label = new Label(pageContainer, SWT.NULL);
- label.setText(Messages.WelcomeCustomizationPreferencePage_available);
- gd = new GridData();
- label.setLayoutData(gd);
- label = new Label(pageContainer, SWT.SEPARATOR | SWT.VERTICAL);
- gd = new GridData(GridData.VERTICAL_ALIGN_FILL);
- gd.verticalSpan = 3;
- gd.widthHint = 10;
- label.setLayoutData(gd);
-
- label = new Label(pageContainer, SWT.NULL);
- label.setText(Messages.WelcomeCustomizationPreferencePage_left);
- label = new Label(pageContainer, SWT.NULL);
- label.setText(Messages.WelcomeCustomizationPreferencePage_right);
- available = createTableViewer(pageContainer, "hidden"); //$NON-NLS-1$
- available.setComparator(new ViewerComparator());
- gd = new GridData(GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL);
- gd.verticalSpan = 2;
- gd.widthHint = 100;
- //gd.horizontalSpan = 2;
- available.getControl().setLayoutData(gd);
-
- topLeft = createTableViewer(pageContainer, "top-left"); //$NON-NLS-1$
- gd = new GridData(GridData.FILL_BOTH);
- gd.widthHint = 100;
- topLeft.getControl().setLayoutData(gd);
-
- topRight = createTableViewer(pageContainer, "top-right"); //$NON-NLS-1$
- gd = new GridData(GridData.FILL_BOTH);
- gd.widthHint = 100;
- topRight.getControl().setLayoutData(gd);
-
- //label = new Label(pageContainer, SWT.NULL);
- //label.setText(Messages.WelcomeCustomizationPreferencePage_bottom);
- bottomLeft = createTableViewer(pageContainer, "bottom-left"); //$NON-NLS-1$
- gd = new GridData(GridData.FILL_BOTH);
- gd.widthHint = 100;
- bottomLeft.getControl().setLayoutData(gd);
-
- bottomRight = createTableViewer(pageContainer, "bottom-right"); //$NON-NLS-1$
- gd = new GridData(GridData.FILL_BOTH);
- gd.widthHint = 100;
- bottomRight.getControl().setLayoutData(gd);
- }
-
- private void updatePageContainer(String pageId, PageData pd) {
- if (pageId == null)
- return;
- refreshQuadrant(topLeft, pd, IUniversalIntroConstants.DIV_LAYOUT_TOP_LEFT);
- refreshQuadrant(topRight, pd, IUniversalIntroConstants.DIV_LAYOUT_TOP_RIGHT);
- refreshQuadrant(bottomLeft, pd, IUniversalIntroConstants.DIV_LAYOUT_BOTTOM_LEFT);
- refreshQuadrant(bottomRight, pd, IUniversalIntroConstants.DIV_LAYOUT_BOTTOM_RIGHT);
- refreshQuadrant(available, pd, IUniversalIntroConstants.HIDDEN);
- }
-
- private void refreshQuadrant(TableViewer viewer, PageData pd, String quadrant) {
- GroupData gd = pd!=null?pd.findGroup(quadrant):null;
- viewer.setInput(gd);
- if (gd!=null)
- updateColumnSizes(viewer);
- }
-
- private void onTabChange(TabItem item) {
- String id = (String) item.getData();
- if (item.getControl() == pageContainer)
- updatePageContainer(id, (PageData) item.getData("pageData")); //$NON-NLS-1$
- }
-
- private void loadData(boolean fromDefault) {
- IProduct product = Platform.getProduct();
- if (product == null)
- return;
- String pid = product.getId();
- introRootPages.clear();
- Preferences prefs = UniversalIntroPlugin.getDefault().getPluginPreferences();
- Preferences iprefs = IntroPlugin.getDefault().getPluginPreferences();
- // 1. Root pages
- // try product-qualified value first
- String key = pid + "_" + INTRO_ROOT_PAGES; //$NON-NLS-1$
- String rootPages = fromDefault ? prefs.getDefaultString(key) : prefs.getString(key);
- if (rootPages.length() == 0) {
- rootPages = fromDefault ? prefs.getDefaultString(INTRO_ROOT_PAGES) : prefs
- .getString(INTRO_ROOT_PAGES);
- }
- if (rootPages.length() > 0) {
- StringTokenizer stok = new StringTokenizer(rootPages, ","); //$NON-NLS-1$
- while (stok.hasMoreTokens()) {
- String tok = stok.nextToken().trim();
- if (!NO_ROOT_PAGES.equals(tok)) {
- introRootPages.add(tok);
- }
- }
- }
- // 3. Active theme
- key = pid + "_" + INTRO_THEME; //$NON-NLS-1$
- String value = fromDefault ? iprefs.getDefaultString(key) : iprefs.getString(key);
- if (value.length() == 0) {
- key = INTRO_THEME;
- value = fromDefault ? iprefs.getDefaultString(key) : iprefs.getString(key);
- }
- if (value.length() > 0)
- introThemeId = value;
- // 4. Intro data
- key = pid + "_" + INTRO_DATA; //$NON-NLS-1$
- value = fromDefault ? prefs.getDefaultString(key) : prefs.getString(key);
- if (value.length() == 0) {
- key = INTRO_DATA;
- value = fromDefault ? prefs.getDefaultString(key) : prefs.getString(key);
- }
- if (value.length() == 0)
- value = null;
- if (value != null && value.startsWith("product:")) //$NON-NLS-1$
- value = value.substring(8);
- value = BundleUtil.getResolvedResourceLocation(value, product.getDefiningBundle());
- introData = new IntroData(pid, value, true);
- introData.addImplicitContent();
+ protected Control createContents(Composite parent) {
+ getContentsArea().setShell(getShell());
+ return getContentsArea().createContents(parent);
}
public void dispose() {
- Iterator iter = themeList.iterator();
- while (iter.hasNext()) {
- ((IntroTheme)iter.next()).dispose();
- }
- extensionImage.dispose();
- ihighImage.dispose();
- ilowImage.dispose();
- inewImage.dispose();
- icalloutImage.dispose();
- themeImage.dispose();
+ getContentsArea().dispose();
super.dispose();
}
- private void updateIntroThemeFromData() {
- if (introThemeId != null) {
- for (int i = 0; i < themeList.size(); i++) {
- IntroTheme theme = (IntroTheme) themeList.get(i);
- if (theme.getId().equals(introThemeId)) {
- introTheme = theme;
- break;
- }
- }
- }
- updateThemePreview();
- }
-
- private void updateWidgetsFromData() {
- // sync up intro background part
- updateIntroThemeFromData();
- // sync up the root page checklist
- rootPages.setInput(ROOT_PAGE_TABLE);
- ArrayList selected = new ArrayList();
- for (int i = 0; i < ROOT_PAGE_TABLE.length; i++) {
- String id = ROOT_PAGE_TABLE[i].id;
- if (introRootPages.contains(id))
- selected.add(ROOT_PAGE_TABLE[i]);
- }
- rootPages.setCheckedElements(selected.toArray());
- }
-
- private void updateThemePreview() {
- themes.setInput(themes);
- if (introTheme != null)
- themes.setSelection(new StructuredSelection(introTheme), true);
- themePreview.redraw();
- }
-
public boolean performOk() {
- saveData();
- BusyIndicator.showWhile(getShell().getDisplay(), new Runnable() {
-
- public void run() {
- restartIntro();
- }
- });
- return true;
- }
-
- /**
- * Remember the current page, close intro, reopen it and show the saved page.
- *
- */
- private void restartIntro() {
- IIntroManager manager = PlatformUI.getWorkbench().getIntroManager();
- IIntroPart part = manager.getIntro();
- if (part != null && part instanceof CustomizableIntroPart) {
- IntroModelRoot modelRoot = IntroPlugin.getDefault().getIntroModelRoot();
- String currentPageId = modelRoot.getCurrentPageId();
- IWorkbenchWindow window = part.getIntroSite().getWorkbenchWindow();
- boolean standby = manager.isIntroStandby(part);
- PlatformUI.getWorkbench().getIntroManager().closeIntro(part);
- IntroPlugin.getDefault().resetVolatileImageRegistry();
- UniversalIntroPlugin.getDefault().resetVolatileImageRegistry();
- part = PlatformUI.getWorkbench().getIntroManager().showIntro(window, standby);
- if (part != null && !standby) {
- StringBuffer url = new StringBuffer();
- url.append("http://org.eclipse.ui.intro/showPage?id="); //$NON-NLS-1$
- url.append(currentPageId);
- IIntroURL introURL = IntroURLFactory.createIntroURL(url.toString());
- if (introURL != null)
- introURL.execute();
- }
- }
+ return getContentsArea().performOk();
}
protected void performDefaults() {
- loadData(true);
- // Dispose all the root page tabs
- TabItem[] items = tabFolder.getItems();
- for (int i = 0; i < items.length; i++) {
- if (items[i].getData("pageData") != null) //$NON-NLS-1$
- items[i].dispose();
- }
- // Add them back in based on the checked state
- addRootPages();
- updateWidgetsFromData();
- // Get the items again
- items = tabFolder.getItems();
- // Select root
- onTabChange(items[0]);
- super.performDefaults();
- }
-
- private void saveData() {
- Preferences prefs = UniversalIntroPlugin.getDefault().getPluginPreferences();
- Preferences iprefs = IntroPlugin.getDefault().getPluginPreferences();
- boolean toAll = applyToAll.getSelection();
- IProduct product = Platform.getProduct();
- if (product == null)
- return;
- String pid = product.getId();
- StringBuffer sbuf = new StringBuffer();
- if (introRootPages.size() == 0) {
- // An empty string means no preference so special value needed
- // to indicate no root pages.
- sbuf.append(NO_ROOT_PAGES);
- }
- for (int i = 0; i < introRootPages.size(); i++) {
- if (i > 0)
- sbuf.append(","); //$NON-NLS-1$
- sbuf.append((String) introRootPages.get(i));
- }
- String key = pid + "_" + INTRO_ROOT_PAGES; //$NON-NLS-1$
- prefs.setValue(key, sbuf.toString());
- if (toAll) {
- key = INTRO_ROOT_PAGES;
- prefs.setValue(key, sbuf.toString());
- }
- // store page layouts
- StringWriter writer = new StringWriter();
- PrintWriter pwriter = new PrintWriter(writer);
- introData.write(pwriter);
- pwriter.close();
- String value = writer.toString();
- key = pid + "_" + INTRO_DATA; //$NON-NLS-1$
- prefs.setValue(key, value);
- if (toAll) {
- key = INTRO_DATA;
- prefs.setValue(key, value);
- }
- if (introTheme != null) {
- key = pid + "_" + INTRO_THEME; //$NON-NLS-1$
- value = introTheme.getId();
- iprefs.setValue(key, value);
- }
- if (toAll) {
- key = INTRO_THEME;
- iprefs.setValue(key, value);
- }
- UniversalIntroPlugin.getDefault().savePluginPreferences();
- IntroPlugin.getDefault().savePluginPreferences();
- }
-
- private void addHomePage() {
- TabItem item = new TabItem(tabFolder, SWT.NULL);
- item.setText(Messages.WelcomeCustomizationPreferencePage_home);
- Composite container = new Composite(tabFolder, SWT.NULL);
- GridLayout layout = new GridLayout();
- layout.numColumns = 2;
- container.setLayout(layout);
- Composite leftColumn = new Composite(container, SWT.NULL);
- layout = new GridLayout();
- layout.marginWidth = layout.marginHeight = 0;
- leftColumn.setLayout(layout);
- leftColumn.setLayoutData(new GridData(GridData.FILL_BOTH));
- Composite rightColumn = new Composite(container, SWT.NULL);
- layout = new GridLayout();
- layout.marginWidth = layout.marginHeight = 0;
- rightColumn.setLayout(layout);
- rightColumn.setLayoutData(new GridData(GridData.FILL_BOTH));
-
- Label themeLabel = new Label(leftColumn, SWT.NULL);
- themeLabel.setText(Messages.WelcomeCustomizationPreferencePage_background);
- GridData gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING);
- themeLabel.setLayoutData(gd);
- themes = new TableViewer(leftColumn, SWT.BORDER);
- themes.getControl().setLayoutData(new GridData(GridData.FILL_BOTH));
- themes.setContentProvider(contentProvider);
- themes.setLabelProvider(labelProvider);
- themes.addSelectionChangedListener(new ISelectionChangedListener() {
- public void selectionChanged(SelectionChangedEvent e) {
- Object sel = ((StructuredSelection) e.getSelection()).getFirstElement();
- introTheme = (IntroTheme) sel;
- themePreview.redraw();
- }
- });
- loadThemes();
- Label previewLabel = new Label(rightColumn, SWT.NULL);
- previewLabel.setText(Messages.WelcomeCustomizationPreferencePage_preview);
- themePreview = new Canvas(rightColumn, SWT.NULL);
- gd = new GridData();
- gd.widthHint = 160+20;
- gd.heightHint = 120+20;
- themePreview.setLayoutData(gd);
- themePreview.addPaintListener(new PaintListener() {
-
- public void paintControl(PaintEvent e) {
- if (introTheme == null)
- return;
- Image bgImage = introTheme.getPreviewImage();
- if (bgImage == null)
- return;
- //Rectangle carea = themePreview.getClientArea();
- Rectangle ibounds = bgImage.getBounds();
- e.gc.drawImage(bgImage, 0, 0, ibounds.width, ibounds.height, 10, 10, 160, 120);
- }
- });
- Label label = new Label(container, SWT.NULL);
- label.setText(Messages.WelcomeCustomizationPreferencePage_rootpages);
- gd = new GridData();
- gd.horizontalSpan = 2;
- label.setLayoutData(gd);
- rootPages = CheckboxTableViewer.newCheckList(container, SWT.BORDER);
- rootPages.setContentProvider(contentProvider);
- rootPages.setLabelProvider(labelProvider);
- gd = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
- gd.horizontalSpan = 2;
- rootPages.getControl().setLayoutData(gd);
- rootPages.addCheckStateListener(new ICheckStateListener() {
-
- public void checkStateChanged(CheckStateChangedEvent event) {
- RootPage page = (RootPage) event.getElement();
- boolean checked = event.getChecked();
- onPageChecked(page.id, checked);
- }
- });
- item.setControl(container);
- }
-
- private void loadThemes() {
- IConfigurationElement [] elements = Platform.getExtensionRegistry().getConfigurationElementsFor("org.eclipse.ui.intro.configExtension"); //$NON-NLS-1$
- for (int i=0; i<elements.length; i++) {
- if (elements[i].getName().equals("theme")) { //$NON-NLS-1$
- themeList.add(new IntroTheme(elements[i]));
- }
- }
- }
-
- private void addPage(String id) {
- if (!getRootPageSelected(id))
- return;
- TabItem item = new TabItem(tabFolder, SWT.NULL);
- item.setText(getRootPageName(id));
- item.setControl(pageContainer);
- item.setData(id);
- PageData pd = introData.getPage(id);
- item.setData("pageData", pd); //$NON-NLS-1$
- }
-
- private void onPageChecked(String id, boolean checked) {
- TabItem[] items = tabFolder.getItems();
- if (checked) {
- for (int i = 0; i < items.length; i++) {
- TabItem item = items[i];
- if (item.getData() != null)
- item.dispose();
- }
- introRootPages.add(id);
- addRootPages();
- } else {
- for (int i = 0; i < items.length; i++) {
- TabItem item = items[i];
- String itemId = (String) item.getData();
- if (itemId != null && itemId.equals(id)) {
- item.dispose();
- introRootPages.remove(id);
- return;
- }
- }
- }
+ getContentsArea().performDefaults();
}
- private String getRootPageName(String id) {
- for (int i = 0; i < ROOT_PAGE_TABLE.length; i++) {
- if (ROOT_PAGE_TABLE[i].id.equals(id))
- return ROOT_PAGE_TABLE[i].getName();
- }
- return "?"; //$NON-NLS-1$
- }
-
- private boolean getRootPageSelected(String id) {
- for (int i = 0; i < introRootPages.size(); i++) {
- String cid = (String) introRootPages.get(i);
- if (cid.equals(id))
- return true;
- }
- return false;
- }
public void setInitializationData(IConfigurationElement config, String propertyName, Object data)
throws CoreException {
}
- private void createPopupMenu(final TableViewer viewer) {
- MenuManager manager = new MenuManager();
- manager.createContextMenu(viewer.getControl());
- viewer.getControl().setMenu(manager.getMenu());
- manager.setRemoveAllWhenShown(true);
- manager.addMenuListener(new IMenuListener() {
-
- public void menuAboutToShow(IMenuManager manager) {
- fillPopupMenu(manager, viewer);
- }
- });
- }
-
- private void addDNDSupport(TableViewer viewer) {
- viewer.addDragSupport(DND.DROP_MOVE, TRANSFER_TYPES, new TableDragSourceListener(viewer));
- viewer.addDropSupport(DND.DROP_MOVE, TRANSFER_TYPES, new TableDropTargetListener(viewer));
- }
-
- private TableViewer createTableViewer(Composite parent, String id) {
- final Table table = new Table(parent, SWT.BORDER | SWT.FULL_SELECTION);
- final TableColumn column1 = new TableColumn(table, SWT.NULL);
- column1.setMoveable(false);
- column1.setWidth(20);
- column1.setResizable(false);
- final TableColumn column2 = new TableColumn(table, SWT.NULL);
- column2.setResizable(true);
- final TableViewer viewer = new TableViewer(table);
- CellEditor[] editors = new CellEditor[2];
- editors[0] = new ComboBoxCellEditor(table, ExtensionData.IMPORTANCE_NAME_TABLE, SWT.READ_ONLY);
- viewer.setCellEditors(editors);
- viewer.setColumnProperties(new String[] { IUniversalIntroConstants.P_IMPORTANCE,
- IUniversalIntroConstants.P_NAME });
- viewer.setCellModifier(new ICellModifier() {
-
- public boolean canModify(Object element, String property) {
- return property.equals(IUniversalIntroConstants.P_IMPORTANCE);
- }
-
- public Object getValue(Object element, String property) {
- if (element instanceof ExtensionData) {
- ExtensionData ed = (ExtensionData) element;
- if (property.equals(IUniversalIntroConstants.P_IMPORTANCE))
- return new Integer(ed.getImportance());
- }
- return null;
- }
-
- public void modify(Object element, String property, Object value) {
- Integer ivalue = (Integer) value;
- TableItem item = (TableItem) element;
- ExtensionData ed = (ExtensionData) item.getData();
- ed.setImportance(ivalue.intValue());
- viewer.update(ed, new String [] {IUniversalIntroConstants.P_IMPORTANCE});
- }
- });
- viewer.setContentProvider(contentProvider);
- viewer.setLabelProvider(labelProvider);
- viewer.setData("id", id); //$NON-NLS-1$
- createPopupMenu(viewer);
- addDNDSupport(viewer);
- return viewer;
- }
-
- private void fillPopupMenu(IMenuManager manager, final TableViewer viewer) {
- StructuredSelection ssel = (StructuredSelection) viewer.getSelection();
-
- manager.add(new Separator());
- Action addSeparator = new Action(Messages.WelcomeCustomizationPreferencePage_addSeparator) {
- public void run() {
- doAddSeparator(viewer);
- }
- };
-
- manager.add(addSeparator);
- manager.add(new Separator());
-
- if (ssel.size() == 1 && viewer != available) {
- Action upAction = new Action(Messages.WelcomeCustomizationPreferencePage_up) {
-
- public void run() {
- doMove(viewer, true);
- }
- };
- Action downAction = new Action(Messages.WelcomeCustomizationPreferencePage_down) {
-
- public void run() {
- doMove(viewer, false);
- }
- };
- BaseData ed = (BaseData) ssel.getFirstElement();
- GroupData gd = (GroupData) viewer.getInput();
- upAction.setEnabled(gd.canMoveUp(ed));
- downAction.setEnabled(gd.canMoveDown(ed));
- manager.add(upAction);
- manager.add(downAction);
- }
- if (ssel.size() > 0) {
- manager.add(new Separator());
- MenuManager menu = new MenuManager(Messages.WelcomeCustomizationPreferencePage_moveTo);
- addMoveToAction(menu, available, viewer,
- Messages.WelcomeCustomizationPreferencePage_menu_available);
- addMoveToAction(menu, topLeft, viewer, Messages.WelcomeCustomizationPreferencePage_menu_top_left);
- addMoveToAction(menu, topRight, viewer, Messages.WelcomeCustomizationPreferencePage_menu_top_right);
- addMoveToAction(menu, bottomLeft, viewer, Messages.WelcomeCustomizationPreferencePage_menu_bottom_left);
- addMoveToAction(menu, bottomRight, viewer, Messages.WelcomeCustomizationPreferencePage_menu_bottom_right);
- manager.add(menu);
-
- boolean addDeleteSeparator=false;
-
- for (Iterator iter=ssel.iterator(); iter.hasNext();) {
- Object obj = iter.next();
- if (obj instanceof SeparatorData)
- addDeleteSeparator=true;
- else {
- addDeleteSeparator=false;
- break;
- }
- }
- if (addDeleteSeparator) {
- Action deleteSeparator = new Action(Messages.WelcomeCustomizationPreferencePage_removeSeparator) {
- public void run() {
- doRemoveSeparators(viewer);
- }
- };
- manager.add(deleteSeparator);
- }
- }
- }
-
- private void addMoveToAction(MenuManager menu, final TableViewer target, final TableViewer source,
- String name) {
- if (source == target)
- return;
- Action action = new Action(name) {
-
- public void run() {
- doMoveTo(source, target);
- }
- };
- menu.add(action);
- }
-
- private void doMove(Viewer viewer, boolean up) {
- Object obj = ((StructuredSelection) viewer.getSelection()).getFirstElement();
- GroupData gd = (GroupData) viewer.getInput();
- if (up)
- gd.moveUp((BaseData) obj);
- else
- gd.moveDown((BaseData) obj);
- viewer.refresh();
+ public void init(IWorkbench workbench) {
}
- private void doAddSeparator(Viewer viewer) {
- Object obj = ((StructuredSelection) viewer.getSelection()).getFirstElement();
- GroupData gd = (GroupData) viewer.getInput();
- if (gd == null) {
- gd = createTargetGd(viewer);
- viewer.setInput(gd);
- }
- gd.addSeparator((BaseData)obj);
- viewer.refresh();
- updateColumnSizes((TableViewer)viewer);
- }
-
- private void doRemoveSeparators(Viewer viewer) {
- StructuredSelection ssel = ((StructuredSelection) viewer.getSelection());
- GroupData gd = (GroupData) viewer.getInput();
- for (Iterator iter=ssel.iterator(); iter.hasNext();) {
- SeparatorData sdata = (SeparatorData)iter.next();
- gd.remove(sdata);
- }
- viewer.refresh();
- }
-
- private void doMoveTo(TableViewer source, TableViewer target) {
- Object[] selObjs = ((StructuredSelection) source.getSelection()).toArray();
- GroupData sourceGd = (GroupData) source.getInput();
- GroupData targetGd = (GroupData) target.getInput();
- if (targetGd == null) {
- targetGd = createTargetGd(target);
- }
- for (int i = 0; i < selObjs.length; i++) {
- BaseData ed = (BaseData) selObjs[i];
- sourceGd.remove(ed);
- targetGd.add(ed);
- }
- source.refresh();
- updateColumnSizes(source);
- if (target.getInput() != null)
- target.refresh();
- else
- target.setInput(targetGd);
- updateColumnSizes(target);
- }
-
- private void updateColumnSizes(TableViewer viewer) {
- TableColumn sc = viewer.getTable().getColumn(1);
- sc.pack();
- }
-
- private GroupData createTargetGd(Viewer target) {
- GroupData targetGd = null;
- if (target == topLeft)
- targetGd = new GroupData(PageData.P_TOP_LEFT, false);
- else if (target == topRight)
- targetGd = new GroupData(PageData.P_TOP_RIGHT, false);
- else if (target == bottomLeft)
- targetGd = new GroupData(PageData.P_BOTTOM_LEFT, false);
- else if (target == bottomRight)
- targetGd = new GroupData(PageData.P_BOTTOM_RIGHT, false);
- else if (target == available)
- targetGd = new GroupData(IUniversalIntroConstants.HIDDEN, false);
- else
- return null;
- TabItem[] items = tabFolder.getSelection();
- PageData pd = (PageData) items[0].getData("pageData"); //$NON-NLS-1$
- if (pd == null) {
- String pageId = (String)items[0].getData();
- pd = new PageData(pageId);
- items[0].setData("pageData", pd); //$NON-NLS-1$
- introRootPages.add(pageId);
- }
- pd.add(targetGd);
- return targetGd;
- }
-
public void setCurrentPage(String pageId) {
- firstPageId = pageId;
- }
-
- private void selectFirstPage() {
- if (firstPageId == null)
- return;
- TabItem[] items = tabFolder.getItems();
- for (int i = 0; i < items.length; i++) {
- TabItem item = items[i];
- PageData pd = (PageData) item.getData("pageData"); //$NON-NLS-1$
- if (pd != null && pd.getId().equals(firstPageId)) {
- tabFolder.setSelection(i);
- onTabChange(item);
- return;
- }
- }
+ getContentsArea().setCurrentPage(pageId);
}
}

Back to the top