All Downloads are FREE. Search and download functionalities are using the official Maven repository.

jdplus.toolkit.desktop.plugin.workspace.ui.WorkspaceTopComponent Maven / Gradle / Ivy

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package jdplus.toolkit.desktop.plugin.workspace.ui;

import jdplus.toolkit.desktop.plugin.ui.ActiveView;
import jdplus.toolkit.desktop.plugin.ui.ActiveViewManager;
import jdplus.toolkit.desktop.plugin.ui.Menus;
import jdplus.toolkit.desktop.plugin.workspace.WorkspaceFactory;
import jdplus.toolkit.desktop.plugin.workspace.WorkspaceItem;
import java.util.Collection;
import javax.swing.Action;
import javax.swing.JMenu;
import javax.swing.SwingUtilities;

import org.openide.explorer.ExplorerManager;
import org.openide.util.Lookup;
import org.openide.util.LookupEvent;
import org.openide.util.LookupListener;
import org.openide.windows.TopComponent;

/**
 *
 * @author Jean Palate
 * @param 
 */
public abstract class WorkspaceTopComponent extends TopComponent implements ActiveView, ExplorerManager.Provider, LookupListener {

    private WorkspaceItem doc;
    private final Lookup.Result wsevent;

    protected WorkspaceTopComponent(WorkspaceItem doc) {
        this.doc = doc;
        this.wsevent = WorkspaceFactory.getInstance().getLookup().lookupResult(WorkspaceFactory.Event.class);
    }

    /**
     * Called when the document is opened if the current document is null The
     * result become the new document
     *
     * @return
     */
    public abstract WorkspaceItem newDocument();

    public WorkspaceItem getDocument() {
        return doc;
    }

    public T getElement() {
        return doc == null ? null : doc.getElement();
    }

    @Override
    public boolean hasContextMenu() {
        return true;
    }

    protected String getContextPath() {
        return null;
    }

    @Override
    public boolean fill(JMenu menu) {
        Menus.fillMenu(menu, getContextPath());
        return true;
    }

    @Override
    public void componentActivated() {
        super.componentActivated();
        ActiveViewManager.getInstance().set(this);
    }

    @Override
    public void componentDeactivated() {
        ActiveViewManager.getInstance().set(null);
        super.componentDeactivated();
    }

    @Override
    public Action[] getActions() {
        return Menus.createActions(super.getActions(), getContextPath());
    }

    @Override
    public void componentOpened() {
        super.componentOpened();
        if (doc == null) {
            doc = newDocument();
        }
        setDisplayName(doc.getDisplayName());
        setName(doc.getDisplayName());
        doc.setView(this);
        wsevent.addLookupListener(this);
        // TODO add custom code on component opening
     }

    @Override
    public void componentClosed() {
        wsevent.removeLookupListener(this);
        doc.setView(null);
        super.componentClosed();
    }

    public void refresh() {
    }

    @Override
    public void resultChanged(LookupEvent le) {
        Collection all = wsevent.allInstances();
        for (WorkspaceFactory.Event ev : all) {
            if (ev.id.equals(doc.getId())) {
                switch (ev.info) {
                    case WorkspaceFactory.Event.ITEMCHANGED -> //if (ev.source != this) {
                        SwingUtilities.invokeLater(this::refresh);
                    //}
                }
            }
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy