/* *****************************************************************************
* JFire - it's hot - Free ERP System - http://jfire.org *
* Copyright (C) 2004-2005 NightLabs - http://NightLabs.org *
* *
* This library is free software; you can redistribute it and/or *
* modify it under the terms of the GNU Lesser General Public *
* License as published by the Free Software Foundation; either *
* version 2.1 of the License, or (at your option) any later version. *
* *
* This library is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this library; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin St, Fifth Floor, *
* Boston, MA 02110-1301 USA *
* *
* Or get it online : *
* http://www.gnu.org/copyleft/lesser.html *
* *
* *
******************************************************************************/
package org.nightlabs.jfire.reporting.admin.ui.layout.editor.textpart;
import org.eclipse.birt.report.designer.internal.ui.editors.FileReportProvider;
import org.eclipse.birt.report.designer.ui.editors.IReportEditorPage;
import org.eclipse.birt.report.designer.ui.editors.IReportProvider;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.gef.ui.actions.ActionRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.editor.FormEditor;
import org.nightlabs.base.ui.composite.XComposite;
import org.nightlabs.base.ui.composite.XComposite.LayoutMode;
import org.nightlabs.jfire.reporting.layout.ReportRegistryItem;
import org.nightlabs.jfire.reporting.textpart.ReportTextPartConfiguration;
import org.nightlabs.jfire.reporting.ui.textpart.IReportTextPartConfigurationChangedListener;
import org.nightlabs.jfire.reporting.ui.textpart.ReportTextPartConfigurationChangedEvent;
/**
* A page for the Report Designer that lets the edit the
* {@link ReportTextPartConfiguration} for the current
* {@link ReportRegistryItem}.
*
* @author Alexander Bieber <!-- alex [AT] nightlabs [DOT] de -->
*
*/
public class ReportTextPartConfigurationPage
extends ReportTextPartConfigurationEditor
implements IReportEditorPage
{
public static final String ID_PAGE = ReportTextPartConfigurationPage.class.getName();
private XComposite wrapper;
private int staleType;
private Control control;
private FormEditor editor;
private int index;
private IReportTextPartConfigurationChangedListener changedListener = new IReportTextPartConfigurationChangedListener() {
@Override
public void reportTextPartConfigurationChanged(ReportTextPartConfigurationChangedEvent evt) {
if (editor != null) {
editor.editorDirtyStateChanged();
}
}
};
/**
* The provider is needed for the page to be correctly
* integrated into the editor (otherwise the dirty notifications won't work).
*/
private IReportProvider provider;
@Override
public void createPartControl(Composite parent)
{
wrapper = new XComposite(parent, SWT.BORDER, LayoutMode.NONE);
wrapper.setLayout(new FillLayout());
super.createPartControl(wrapper);
control = wrapper;
getConfigurationEditComposite().addReportTextPartConfigurationChangedListener(changedListener);
getConfigurationEditComposite().addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent e) {
getConfigurationEditComposite().removeReportTextPartConfigurationChangedListener(changedListener);
}
});
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#getPartControl()
*/
public Control getPartControl() {
return control;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#initialize(org.eclipse.ui.forms.editor.FormEditor)
*/
public void initialize(FormEditor editor) {
this.editor = editor;
}
/*
* (non-Javadoc)
* @see org.eclipse.birt.report.designer.ui.editors.IReportEditorPage#onBroughtToTop(org.eclipse.birt.report.designer.ui.editors.IReportEditorPage)
*/
public boolean onBroughtToTop(IReportEditorPage prePage) {
return true;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#canLeaveThePage()
*/
public boolean canLeaveThePage() {
return true;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#getEditor()
*/
public FormEditor getEditor() {
return editor;
}
/*
* (non-Javadoc)
* @see org.eclipse.birt.report.designer.ui.editors.IReportEditorPage#getStaleType()
*/
public int getStaleType() {
return staleType;
}
/*
* (non-Javadoc)
* @see org.eclipse.birt.report.designer.ui.editors.IReportEditorPage#markPageStale(int)
*/
public void markPageStale(int type) {
staleType = type;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#getId()
*/
public String getId() {
return ID_PAGE;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#getIndex()
*/
public int getIndex() {
return index;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#getManagedForm()
*/
public IManagedForm getManagedForm() {
return null;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#isActive()
*/
public boolean isActive() {
return false;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#isEditor()
*/
public boolean isEditor() {
return false;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#selectReveal(java.lang.Object)
*/
public boolean selectReveal(Object object) {
return false;
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#setActive(boolean)
*/
public void setActive(boolean active) {
}
/*
* (non-Javadoc)
* @see org.eclipse.ui.forms.editor.IFormPage#setIndex(int)
*/
public void setIndex(int index) {
this.index = index;
}
@Override
public void doSave(IProgressMonitor monitor) {
super.doSave(monitor);
if (getEditor() != null)
getEditor().editorDirtyStateChanged();
}
@Override
public void setInput(IEditorInput input) {
super.setInput(input);
}
/**
* {@inheritDoc}
* <p>
* Returns the provider from the editor set in {@link #initialize(FormEditor)}
* in order to share the provider with the other editor pages.
*
* @see org.nightlabs.jfire.reporting.admin.ui.layout.editor.preview.ReportLayoutPreviewEditor#getProvider()
*/
protected IReportProvider getProvider() {
IReportProvider provider = null;
if (editor != null)
provider = (IReportProvider) editor.getAdapter(IReportProvider.class);
if (provider != null)
setProvider(provider);
if(provider == null)
{
provider = getDefaultProvider();
}
return provider;
}
protected IReportProvider getDefaultProvider()
{
if (provider == null) {
provider = new FileReportProvider();
}
return provider;
}
protected void setProvider(IReportProvider provider) {
this.provider = provider;
}
private ActionRegistry registry;
@Override
public Object getAdapter(Class required) {
if (required.equals( ActionRegistry.class ) )
{
if ( registry == null )
{
registry = new ActionRegistry( );
}
return registry;
}
return super.getAdapter(required);
}
}