/*******************************************************************************
* Copyright (c) 2007 Exadel, Inc. and Red Hat, Inc.
* Distributed under license by Red Hat, Inc. All rights reserved.
* This program is made available under the terms of the
* Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Exadel, Inc. and Red Hat, Inc. - initial API and implementation
******************************************************************************/
package org.jboss.tools.common.editor;
import java.text.MessageFormat;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.swt.*;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.PartInitException;
import org.jboss.tools.common.model.*;
import org.jboss.tools.common.model.ui.ModelUIPlugin;
import org.jboss.tools.common.model.ui.editor.DefaultEditorPart;
public abstract class AbstractSectionEditor extends DefaultEditorPart {
protected SashForm wrapper;
protected Composite guiControl;
protected Control control;
protected ErrorMode errorMode = new ErrorMode();
public void dispose() {
if(errorMode == null) return;
errorMode.dispose();
errorMode = null;
disposeGui();
if(!wrapper.isDisposed()) {
try {
wrapper.dispose();
} catch (SWTException e) {
ModelUIPlugin.getPluginLog().logError(e);
}
}
wrapper = null;
control = null;
guiControl = null;
super.dispose();
}
public Control createControl(Composite parent) {
wrapper = new SashForm(parent, SWT.VERTICAL);
createErr();
errorMode.setEnabled(false);
guiControl = new Composite(wrapper, SWT.NONE);
GridLayout l = new GridLayout();
l.marginHeight = 0;
l.marginWidth = 0;
guiControl.setLayout(l);
wrapper.setWeights(new int[]{10, 30});
return wrapper;
}
public ISelectionProvider getSelectionProvider() {
return null;
}
protected void fireGuiModified() {
if(wrapper!=null)wrapper.update();
if(wrapper!=null)wrapper.layout();
}
protected abstract void updateGui();
protected void disposeGui() {
if(control != null && !control.isDisposed()) {
control.dispose();
}
control = null;
}
private void createErr() {
if(errorMode.getControl() != null && !errorMode.getControl().isDisposed()) return;
Control c = errorMode.createControl(wrapper);
c.setLayoutData(new GridData(GridData.FILL_BOTH));
}
protected XModelObject object = null;
public void setObject(XModelObject object, boolean erroneous) {
this.object = object;
erroneous = erroneous || isWrongEntity();
if(object != null) updateGui();
if(errorMode.isVisible() != erroneous) {
errorMode.setEnabled(erroneous);
fireGuiModified();
}
if(erroneous) setErroneousObject(object);
}
public final boolean isWrongEntity() {
return object != null && isWrongEntity(object.getModelEntity().getName());
}
protected boolean isWrongEntity(String entity) {
return false;
}
public XModelObject getObject() {
return object;
}
private void setErroneousObject(XModelObject object) {
if(object == null) return;
String err = object.get("errors"); //$NON-NLS-1$
if(err == null || err.length() == 0 && isWrongEntity(object.getModelEntity().getName())) {
err = "Warning: " +
"@ @0:0@" + //$NON-NLS-1$
MessageFormat.format(
"This editor is not intended for editing {0}. You can use source page, but its coloring may be inadequate.",
object.getAttributeValue("element type")); //$NON-NLS-1$
}
if(err == null) err = ""; //$NON-NLS-1$
errorMode.update(err);
}
public void addErrorSelectionListener(ErrorSelectionListener listener) {
errorMode.addErrorSelectionListener(listener);
}
public void fireEditorSelected() {}
public void gotoMarker(IMarker marker) {}
public void init(IEditorSite site, IEditorInput input) throws PartInitException {
super.init(site, input);
createActions();
// TODO Create Print Action Here
}
public void addPropertyListener(IPropertyListener listener) {
}
public String getTitle() {
String s = super.getTitle();
return s == null ? "" : s; //$NON-NLS-1$
}
public Image getTitleImage() {
return null;
}
public String getTitleToolTip() {
return null;
}
public void removePropertyListener(IPropertyListener listener) {
}
public void setFocus() {
if(control == null) return;
if(!wrapper.isDisposed()) wrapper.setFocus();
}
public Object getAdapter(Class adapter) {
return null;
}
public void doSave(IProgressMonitor monitor) {}
public void doSaveAs() {}
public boolean isDirty() {
return false;
}
public boolean isSaveAsAllowed() {
return false;
}
public boolean isSaveOnCloseNeeded() {
return false;
}
}