
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 extends WorkspaceFactory.Event> 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