| /******************************************************************************* |
| * Copyright (c) 2004, 2016 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.impl.model; |
| |
| import java.util.ArrayList; |
| import java.util.List; |
| |
| import org.eclipse.core.runtime.IConfigurationElement; |
| import org.eclipse.jface.resource.ImageDescriptor; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.ui.IWorkbenchPreferenceConstants; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.internal.intro.impl.util.ImageUtil; |
| import org.eclipse.ui.intro.config.IntroConfigurer; |
| import org.eclipse.ui.intro.config.IntroElement; |
| |
| /** |
| * An Intro Config component captures launch bar information. It can have |
| * shortcuts and one handle. <br> |
| * ps: Handles are not modeled in a dedicated class, but are handled here. |
| * |
| * @since 3.1 |
| */ |
| public class IntroLaunchBarElement extends AbstractIntroElement { |
| |
| private List<IntroLaunchBarShortcut> shortcuts; |
| |
| IntroLaunchBarElement(IConfigurationElement element) { |
| super(element); |
| } |
| |
| |
| /** |
| * Returns LAUNCH_BAR. |
| */ |
| @Override |
| public int getType() { |
| return AbstractIntroElement.LAUNCH_BAR; |
| } |
| |
| /** |
| * Returns the desired launch bar orientation that results from the desired |
| * location. Valid values are <code>SWT.VERTICAL</code> and |
| * <code>SWT.HORIZONTAL</code>. |
| * |
| * @return |
| */ |
| public int getOrientation() { |
| int location = getLocation(); |
| return (location == SWT.RIGHT || location == SWT.LEFT) ? SWT.VERTICAL |
| : SWT.HORIZONTAL; |
| } |
| |
| /** |
| * Returns the location of the launch bar in the workbench window. Valid |
| * values are <code>SWT.RIGHT</code>,<code>SWT.LEFT</code> and |
| * <code>SWT.BOTTOM</code>. |
| * |
| * @return |
| */ |
| public int getLocation() { |
| String location = getCfgElement().getAttribute("location"); //$NON-NLS-1$ |
| |
| if (location != null) { |
| if (location.equals("left")) //$NON-NLS-1$ |
| return SWT.LEFT; |
| if (location.equals("bottom")) //$NON-NLS-1$ |
| return SWT.BOTTOM; |
| if (location.equals("right")) //$NON-NLS-1$ |
| return SWT.RIGHT; |
| } |
| // default to the initial fast view location |
| String fastviewLocation = PlatformUI.getPreferenceStore().getString( |
| IWorkbenchPreferenceConstants.INITIAL_FAST_VIEW_BAR_LOCATION); |
| if (fastviewLocation.equals(IWorkbenchPreferenceConstants.LEFT)) |
| return SWT.LEFT; |
| if (fastviewLocation.equals(IWorkbenchPreferenceConstants.RIGHT)) |
| return SWT.RIGHT; |
| if (fastviewLocation.equals(IWorkbenchPreferenceConstants.BOTTOM)) |
| return SWT.BOTTOM; |
| // just in case |
| return SWT.RIGHT; |
| } |
| |
| public String getBackground() { |
| return getCfgElement().getAttribute("bg"); //$NON-NLS-1$ |
| } |
| |
| public String getForeground() { |
| return getCfgElement().getAttribute("fg"); //$NON-NLS-1$ |
| } |
| |
| public boolean getCreateHandle() { |
| return getHandleElement() != null; |
| } |
| |
| public boolean getClose() { |
| IConfigurationElement handle = getHandleElement(); |
| if (handle != null) { |
| String value = handle.getAttribute("close"); //$NON-NLS-1$ |
| return value == null || value.equals("true"); //$NON-NLS-1$ |
| } |
| return true; |
| } |
| |
| /** |
| * Returns the relative icon path of the handle image. |
| * |
| * @return |
| */ |
| private String getHandleImage() { |
| IConfigurationElement handle = getHandleElement(); |
| if (handle == null) |
| return null; |
| return handle.getAttribute("image"); //$NON-NLS-1$ |
| } |
| |
| /** |
| * Returns the icon image of the handle, or <code>null</code> if not |
| * defined or found. |
| * |
| * @return |
| */ |
| public ImageDescriptor getHandleImageDescriptor() { |
| String path = getHandleImage(); |
| if (path == null) |
| return null; |
| return ImageUtil.createImageDescriptor(getBundle(), path); |
| } |
| |
| private IConfigurationElement getHandleElement() { |
| IConfigurationElement[] children = getCfgElement().getChildren( |
| "handle"); //$NON-NLS-1$ |
| if (children.length > 0) |
| return children[0]; |
| return null; |
| } |
| |
| /** |
| * Returns an array of shorcut elements. |
| * |
| * @return |
| */ |
| public IntroLaunchBarShortcut[] getShortcuts() { |
| if (shortcuts == null) { |
| createShortcuts(); |
| } |
| return (IntroLaunchBarShortcut[]) shortcuts |
| .toArray(new IntroLaunchBarShortcut[shortcuts.size()]); |
| } |
| |
| /** |
| * Creates an array of shortcut elements |
| * |
| */ |
| private void createShortcuts() { |
| shortcuts = new ArrayList<>(); |
| IntroModelRoot model = getModelRoot(); |
| IntroConfigurer configurer = model!=null?model.getConfigurer():null; |
| |
| String cvalue = getCfgElement().getAttribute("computed"); //$NON-NLS-1$ |
| boolean computed = cvalue!=null && cvalue.equalsIgnoreCase("true"); //$NON-NLS-1$ |
| |
| if (computed && configurer!=null) { |
| IntroElement [] children = configurer.getLaunchBarShortcuts(); |
| for (int i=0; i<children.length; i++) { |
| IntroLaunchBarShortcut shortcut = new IntroLaunchBarShortcut(getCfgElement(), children[i]); |
| shortcuts.add(shortcut); |
| } |
| } |
| else { |
| IConfigurationElement[] children = getCfgElement().getChildren( |
| IntroLaunchBarShortcut.TAG_SHORTCUT); |
| for (int i = 0; i < children.length; i++) { |
| IConfigurationElement child = children[i]; |
| IntroLaunchBarShortcut shortcut = new IntroLaunchBarShortcut(child); |
| shortcuts.add(shortcut); |
| } |
| } |
| } |
| } |