com.nokia.tools.variant.media.ui.preview.AbstractAudioController.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.tools.variant.media.ui.preview.AbstractAudioController.java

Source

/*
 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
 * All rights reserved.
 * This component and the accompanying materials are made available
 * under the terms of "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: This file is part of com.nokia.tools.variant.media.ui component.
 */

package com.nokia.tools.variant.media.ui.preview;

import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionBars;

import com.nokia.tools.variant.preview.PluginImages;
import com.nokia.tools.variant.preview.PreviewController;

public abstract class AbstractAudioController extends PreviewController {

    protected IAudioPreviewDescriptor descriptor;

    protected Job playTask;
    protected final PlayAction playAction = new PlayAction();
    protected final Separator playSeparator = new Separator("GROUP.PLAY");

    public AbstractAudioController() {
        super();
    }

    @Override
    public void setActionBars(IActionBars actionBars) {
        unregisterActions(getActionBars());
        super.setActionBars(actionBars);
        registerActions(getActionBars());
    }

    protected void registerActions(IActionBars actionBars) {
        if (actionBars != null) {
            IMenuManager menu = actionBars.getMenuManager();
            menu.add(playSeparator);
            menu.add(playAction);
            IToolBarManager toolBar = actionBars.getToolBarManager();
            toolBar.add(playSeparator);
            toolBar.add(playAction);
            actionBars.updateActionBars();
        }
    }

    protected void unregisterActions(IActionBars actionBars) {
        if (actionBars != null) {
            IMenuManager menu = actionBars.getMenuManager();
            menu.remove(PlayAction.ID);
            menu.remove(playSeparator.getId());
            IToolBarManager toolBar = actionBars.getToolBarManager();
            toolBar.remove(PlayAction.ID);
            toolBar.remove(playSeparator.getId());
            actionBars.updateActionBars();
        }
    }

    @Override
    public void dispose() {
        stopPlayback();
        setActionBars(null);
        descriptor = null;
    }

    protected void updateActions() {
        playAction.update();
        Display.getDefault().syncExec(new Runnable() {
            public void run() {
                if (getActionBars() != null) {
                    getActionBars().updateActionBars();
                    //            getActionBars().getMenuManager().update();
                    //            getActionBars().getToolBarManager().update(true);
                }
            }
        });
    }

    protected synchronized void stopPlayback() {
        if (playTask != null) {
            Job current = playTask;
            playTask = null;
            current.cancel();
            updateActions();
        }
    }

    protected synchronized void startStopAction() {
        if (playTask != null) {
            stopPlayback();
        } else {
            playTask = createNewPlayTask();
            playTask.setPriority(Job.INTERACTIVE);
            playTask.schedule();
            updateActions();
        }
    }

    protected synchronized void playTaskCompleted(Job playTask) {
        if (this.playTask == playTask) {
            this.playTask = null;
            updateActions();
        }
    }

    protected boolean isPlaying() {
        return playTask != null;
    }

    protected abstract Job createNewPlayTask();

    class PlayAction extends Action {
        static final String ID = "AudioPreview.Play";

        public PlayAction() {
            super("Start Playing", PluginImages.PLAY);
            setId(ID);
        }

        @Override
        public void run() {
            startStopAction();
        }

        void update() {
            if (isPlaying()) {
                setText("Stop Playing");
                setImageDescriptor(PluginImages.STOP);
            } else {
                setText("Start Playing");
                setImageDescriptor(PluginImages.PLAY);
            }
        }
    }
}