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

jdplus.toolkit.desktop.plugin.workspace.ui.WorkspaceTsTopComponent 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.TsDynamicProvider;
import jdplus.toolkit.desktop.plugin.TsManager;
import jdplus.toolkit.desktop.plugin.components.parts.HasTs;
import jdplus.toolkit.desktop.plugin.ui.Menus;
import jdplus.toolkit.desktop.plugin.ui.processing.DefaultProcessingViewer;
import jdplus.toolkit.desktop.plugin.ui.processing.TsProcessingViewer;
import jdplus.toolkit.desktop.plugin.ui.properties.l2fprod.UserInterfaceContext;
import jdplus.toolkit.desktop.plugin.workspace.WorkspaceFactory;
import jdplus.toolkit.desktop.plugin.workspace.WorkspaceItem;
import jdplus.toolkit.base.api.timeseries.Ts;
import jdplus.toolkit.base.api.timeseries.TsDocument;
import jdplus.toolkit.base.api.timeseries.TsInformationType;

import java.beans.PropertyChangeEvent;
import javax.swing.Action;
import javax.swing.JMenu;

/**
 *
 * @author Jean Palate
 * @param 
 */
public abstract class WorkspaceTsTopComponent> extends WorkspaceTopComponent implements HasTs {

    private TsProcessingViewer panel;

    protected WorkspaceTsTopComponent(WorkspaceItem doc) {
        super(doc);
    }

    protected abstract TsProcessingViewer initViewer();

    public void updateUserInterfaceContext() {
        if (getDocument() == null) {
            return;
        }
        T element = getElement();
        if (element == null) {
            UserInterfaceContext.INSTANCE.setDomain(null);
        } else {
            Ts s = element.getInput();
            if (s == null) {
                UserInterfaceContext.INSTANCE.setDomain(null);
            } else {
                UserInterfaceContext.INSTANCE.setDomain(s.getData().getDomain());
            }
        }
    }

    @Override
    public void componentActivated() {
        super.componentActivated();
        updateUserInterfaceContext();
    }

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

    @Override
    public void refresh() {
        panel.onDocumentChanged();
    }

    @Override
    public void componentOpened() {
        super.componentOpened();
        WorkspaceItem d = getDocument();
        TsDynamicProvider.onDocumentOpened(d.getElement());
        panel = initViewer();
        add(panel);
        panel.refreshHeader();
        panel.addPropertyChangeListener((PropertyChangeEvent arg0) -> {
            switch (arg0.getPropertyName()) {
                case DefaultProcessingViewer.INPUT_CHANGED -> {
                    Object nval = arg0.getNewValue();
                    if (nval instanceof Ts ts) {
                        setTs(ts);
                    }
                }
                case DefaultProcessingViewer.SPEC_CHANGED -> {
                    WorkspaceFactory.Event ev = new WorkspaceFactory.Event(d.getOwner(), d.getId(), WorkspaceFactory.Event.ITEMCHANGED, WorkspaceTsTopComponent.this);
                    WorkspaceFactory.getInstance().notifyEvent(ev);
                    d.setDirty();
                }

            }
        });

        // TODO add custom code on component opening
    }

    @Override
    public void componentClosed() {
        if (panel != null) {
            panel.removeListeners();
            panel.dispose();
        }
        TsDynamicProvider.onDocumentClosing(panel.getDocument());
        super.componentClosed();
    }

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

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

    @Override
    public Ts getTs() {
        return panel.getDocument().getInput();
    }

    @Override
    public void setTs(Ts ts) {
        Ts cts;
        if (TsManager.isDynamic(ts)) {
            cts = ts.freeze();
        } else {
            cts = ts.load(TsInformationType.All, TsManager.get()).freeze();
        }
        panel.getDocument().set(cts);
        panel.updateButtons(null);
        getDocument().setDirty();
        WorkspaceItem d = getDocument();
        WorkspaceFactory.Event ev = new WorkspaceFactory.Event(d.getOwner(), d.getId(), WorkspaceFactory.Event.ITEMCHANGED, this);
        WorkspaceFactory.getInstance().notifyEvent(ev);

    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy