package eu.jucy.gui;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import logger.LoggerFactory;
import org.apache.log4j.Logger;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import org.eclipse.ui.part.EditorPart;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import uihelpers.SUIJob;
public abstract class UCEditor extends EditorPart implements IUCEditor {
private static final Logger logger = LoggerFactory.make();
private CopyOnWriteArrayList<ITopicChangedListener> topicListeners =
new CopyOnWriteArrayList<ITopicChangedListener>();
private UCWorkbenchPart part = new UCWorkbenchPart();
protected UCEditor() {
}
@Override
public void doSave(IProgressMonitor monitor) {}
@Override
public void doSaveAs() {}
@Override
public boolean isDirty() {
return false;
}
@Override
public boolean isSaveAsAllowed() {
return false;
}
public boolean isActiveEditor() {
return getSite().getPage().getActiveEditor() == this;
}
protected void setControlsForFontAndColour(Control... receivingChange) {
part.setControlsForFontAndColour(receivingChange);
}
public String getTopic() {
return getPartName();
}
public void registerTopicChangedListener(ITopicChangedListener tcl) {
topicListeners.addIfAbsent(tcl);
}
public void unregisterTopicChangedListener(ITopicChangedListener tcl) {
topicListeners.remove(tcl);
}
public void fireTopicChangedListeners() {
new SUIJob() {
@Override
public void run() {
for (ITopicChangedListener tcl:topicListeners) {
tcl.topicChanged(UCEditor.this);
}
}
}.schedule();
}
public void tabMenuBeforeShow() {
logger.debug("tab menu to be shown");
}
public void getContributionItems(List<IContributionItem> items) {
CommandContributionItemParameter ccip =
new CommandContributionItemParameter(getSite(), null, CloseEditorHandler.COMMAND_ID,SWT.PUSH);
ccip.icon = AbstractUIPlugin.imageDescriptorFromPlugin(Application.PLUGIN_ID, IImageKeys.STOPICON);
CommandContributionItem cci = new CommandContributionItem(ccip);
items.add(cci);
}
public void dispose() {
super.dispose();
topicListeners.clear();
part.dispose();
}
/**
* normal initialisation setting part by editor input.
*/
@Override
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
setSite(site);
setInput(input);
setPartName( input.getName());
}
/**
* creates a context popup menu on the viewer and registers it for this site
* with the default ID
* @param viewer
*/
protected void createContextPopup(Viewer viewer) {
createContextPopup(getSite().getId(), viewer);
}
/**
* creates a context popup menu on the viewer and registers it for this site
* with the provided ID
* @param id
* @param viewer
*/
protected void createContextPopup(String id,Viewer viewer) {
UCWorkbenchPart.createContextPopups(getSite(),id,viewer);
}
/**
* does nothing..
*/
public void partActivated() {}
/**
* little helper executes given command, logs failures
*
* @param commandID
*/
public void executeCommand(String commandID) {
IHandlerService hs = (IHandlerService)getSite().getService(IHandlerService.class);
try {
hs.executeCommand(commandID, null);
} catch (Exception e) {
logger.warn(e,e);
}
}
}