com.nokia.carbide.internal.discovery.ui.editor.TaskBar.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.carbide.internal.discovery.ui.editor.TaskBar.java

Source

/*
* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description: 
*
*/
package com.nokia.carbide.internal.discovery.ui.editor;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.layout.RowDataFactory;
import org.eclipse.jface.layout.RowLayoutFactory;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.Hyperlink;

import com.nokia.carbide.internal.discovery.ui.extension.IActionBar;

class TaskBar extends RoundedCornerComposite {

    private final class ActionListener implements IHyperlinkListener {
        @Override
        public void linkActivated(HyperlinkEvent e) {
            Hyperlink link = (Hyperlink) e.getSource();
            runAction(link);
        }

        @Override
        public void linkEntered(HyperlinkEvent e) {
            Hyperlink link = (Hyperlink) e.getSource();
            link.setUnderlined(true);
        }

        @Override
        public void linkExited(HyperlinkEvent e) {
            Hyperlink link = (Hyperlink) e.getSource();
            link.setUnderlined(false);
        }
    }

    private Map<Hyperlink, IAction> linkToActionMap;
    private ActionListener listener;

    public TaskBar(Composite parent, Composite backgroundParent, IActionBar actionBar) {
        super(parent, backgroundParent, parent.getDisplay().getSystemColor(SWT.COLOR_BLACK),
                parent.getDisplay().getSystemColor(SWT.COLOR_WHITE));
        createTitle(actionBar);
        createActions(actionBar);
        RowLayoutFactory.swtDefaults().type(SWT.VERTICAL).margins(5, 5).extendedMargins(7, 7, 7, 7).fill(true)
                .wrap(false).applyTo(this);
    }

    private void createTitle(IActionBar actionBar) {
        Label l = new Label(this, SWT.LEFT);
        l.setFont(JFaceResources.getBannerFont());
        l.setBackground(l.getDisplay().getSystemColor(SWT.COLOR_WHITE));
        l.setText(actionBar.getTitle());
        RowDataFactory.swtDefaults().applyTo(l);
        l = new Label(this, SWT.HORIZONTAL | SWT.SEPARATOR);
        RowDataFactory.swtDefaults().applyTo(l);
    }

    private void createActions(IActionBar actionBar) {
        listener = new ActionListener();
        linkToActionMap = new HashMap<Hyperlink, IAction>();
        for (IAction action : actionBar.getActions()) {
            Hyperlink link = new Hyperlink(this, SWT.NONE);
            link.setText(action.getText());
            String toolTipText = action.getToolTipText();
            if (toolTipText != null)
                link.setToolTipText(toolTipText);
            link.setForeground(link.getDisplay().getSystemColor(SWT.COLOR_DARK_BLUE));
            link.setBackground(link.getDisplay().getSystemColor(SWT.COLOR_WHITE));
            String actionId = action.getId();
            String[] highlightedActionIds = actionBar.getHighlightedActionIds();
            if (actionId != null && highlightedActionIds != null) {
                for (String highlightedId : highlightedActionIds) {
                    if (highlightedId.equals(actionId)) {
                        link.setFont(JFaceResources.getFontRegistry().getBold(JFaceResources.DIALOG_FONT));
                        break;
                    }
                }
            }
            linkToActionMap.put(link, action);
            link.addHyperlinkListener(listener);
        }
    }

    public void runAction(Hyperlink link) {
        IAction action = linkToActionMap.get(link);
        action.run();
    }

    public void updateActionUI(String actionId) {
        for (Entry<Hyperlink, IAction> entry : linkToActionMap.entrySet()) {
            IAction action = entry.getValue();
            if (actionId.equals(action.getId())) {
                Hyperlink link = entry.getKey();
                if (link != null && !link.isDisposed())
                    link.setEnabled(entry.getValue().isEnabled());
            }
        }
    }

    public void updateAllActionsUI() {
        for (Entry<Hyperlink, IAction> entry : linkToActionMap.entrySet()) {
            Hyperlink link = entry.getKey();
            if (link != null && !link.isDisposed())
                link.setEnabled(entry.getValue().isEnabled());
        }
    }

}