org.jboss.tools.forge.ui.internal.part.ForgeConsolePage.java Source code

Java tutorial

Introduction

Here is the source code for org.jboss.tools.forge.ui.internal.part.ForgeConsolePage.java

Source

/**
 * Copyright (c) Red Hat, Inc., contributors and others 2013 - 2014. All rights reserved
 *
 * Licensed under the Eclipse Public License version 1.0, available at
 * http://www.eclipse.org/legal/epl-v10.html
 */
package org.jboss.tools.forge.ui.internal.part;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;

import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IViewSite;
import org.eclipse.ui.SubActionBars;
import org.eclipse.ui.part.IPage;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.PageSite;
import org.jboss.tools.forge.core.runtime.ForgeRuntime;
import org.jboss.tools.forge.ui.internal.actions.ShowForgeMenuAction;
import org.jboss.tools.forge.ui.internal.console.ForgeConsole;

public class ForgeConsolePage implements IPage, PropertyChangeListener {

    private ForgeConsolePageBook forgeConsolePageBook = null;
    private ForgeConsole forgeConsole = null;
    private Control control = null;
    private IPageSite pageSite = null;
    private SubActionBars actionBars = null;

    public ForgeConsolePage(ForgeConsolePageBook forgeConsolePageBook, ForgeConsole forgeConsole) {
        this.forgeConsolePageBook = forgeConsolePageBook;
        this.forgeConsole = forgeConsole;
        forgeConsole.getRuntime().addPropertyChangeListener(this);
    }

    public void createControl() {
        createControl(forgeConsolePageBook);
    }

    @Override
    public void createControl(Composite parent) {
        control = forgeConsole.createControl(parent);
    }

    @Override
    public Control getControl() {
        return control;
    }

    @Override
    public void setFocus() {
        if (control != null) {
            control.setFocus();
        }
    }

    @Override
    public void dispose() {
        Control control = getControl();
        if (control != null && !control.isDisposed()) {
            control.dispose();
        }
        actionBars.dispose();
    }

    @Override
    public void setActionBars(IActionBars actionBars) {
    }

    @Override
    public void propertyChange(PropertyChangeEvent evt) {
        if ((forgeConsolePageBook.getCurrentPage() == this)
                && ForgeRuntime.PROPERTY_STATE.equals(evt.getPropertyName())) {
            updateActionBars();
        }
    }

    void initialize(IViewSite viewSite) {
        pageSite = new PageSite(viewSite);
        actionBars = (SubActionBars) pageSite.getActionBars();
        IAction[] actions = forgeConsole.createActions();
        IToolBarManager toolBarManager = actionBars.getToolBarManager();
        for (IAction action : actions) {
            toolBarManager.appendToGroup(ForgeConsoleView.FORGE_CONSOLE_ACTION_GROUP, action);
        }
        actionBars.getMenuManager().add(new ShowForgeMenuAction(pageSite.getWorkbenchWindow()));
    }

    void activateActionBars() {
        actionBars.activate();
    }

    void deactivateActionBars() {
        actionBars.deactivate();
    }

    void show() {
        forgeConsolePageBook.showPage(getControl());
        forgeConsolePageBook.updateStatusMessage(getStatusMessage());
    }

    String getStatusMessage() {
        return forgeConsole.getLabel();
    }

    private void updateActionBars() {
        // run in UI thread
        Display.getDefault().asyncExec(new Runnable() {
            @Override
            public void run() {
                // without calls to deactivate and activate the actionBars
                // do not update properly
                actionBars.deactivate();
                actionBars.updateActionBars();
                actionBars.activate();
                actionBars.updateActionBars();
            }
        });
    }

}