blob: e2f9c3b2b23ad4c6de81ab4bdcb876a5688e1859 [file] [log] [blame]
/*******************************************************************************
* 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);
}
}
}
}