blob: 8c084be0a8f5088dce35da4800363bd273085093 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.uima.taeconfigurator.editors.ui;
import org.apache.uima.analysis_engine.metadata.AnalysisEngineMetaData;
import org.apache.uima.taeconfigurator.TAEConfiguratorPlugin;
import org.apache.uima.taeconfigurator.editors.Form2Panel;
import org.apache.uima.taeconfigurator.editors.MultiPageEditor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.forms.AbstractFormPart;
import org.eclipse.ui.forms.IFormPart;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.ManagedForm;
import org.eclipse.ui.forms.editor.FormPage;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
/**
* Common part of most pages
*/
public abstract class HeaderPage extends FormPage {
final public static boolean EQUAL_WIDTH = true;
protected SashForm sashForm;
protected MultiPageEditor editor;
protected FormToolkit toolkit;
protected Composite leftPanel;
protected Composite rightPanel;
protected int sashFormWidth;
protected float leftPanelPercent;
protected float rightPanelPercent;
protected int leftPanelWidth;
protected int rightPanelWidth;
public HeaderPage(MultiPageEditor formEditor, String id, String keyPageTitle) {
super(formEditor, id, keyPageTitle);
editor = formEditor;
toolkit = editor.getToolkit();
}
public HeaderPage(MultiPageEditor formEditor, String pageTitle) {
this(formEditor, "UID_" + pageTitle, pageTitle);
}
protected void maybeInitialize(IManagedForm managedForm) {
if (TAEConfiguratorPlugin.is30version)
((ManagedForm) managedForm).initialize();
}
/*
* General methods to create sub areas on pages
*/
public Composite newComposite(Composite parent) {
return newnColumnSection(parent, 1);
}
// this composite spans col 1 & 2, out of a 4 column (0, 1, 2, 3) grid layout
public Composite newCentered2SpanComposite(Composite parent) {
spacer(parent); // skip over col 0
Composite composite = newComposite(parent);
((GridData) composite.getLayoutData()).horizontalSpan = 2;
return composite;
}
public Composite newnColumnSection(Composite parent, int cols) {
Composite section = toolkit.createComposite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = cols;
layout.marginHeight = 0;
layout.marginWidth = 0;
section.setLayout(layout);
section.setLayoutData(new GridData(GridData.FILL_BOTH));
return section;
}
public Composite setup1ColumnLayout(IManagedForm managedForm) {
final ScrolledForm sform = managedForm.getForm();
final Composite form = sform.getBody();
form.setLayout(new GridLayout(1, false)); // this is required !
Composite xtra = toolkit.createComposite(form);
xtra.setLayout(new GridLayout(1, false));
xtra.setLayoutData(new GridData(GridData.FILL_BOTH));
Control c = form.getParent();
while (!(c instanceof ScrolledComposite))
c = c.getParent();
((GridData) xtra.getLayoutData()).widthHint = c.getSize().x;
return xtra;
}
// this method creates no new composites.
public Composite setup2ColumnGrid(IManagedForm managedForm, boolean equalWidth) {
final ScrolledForm sform = managedForm.getForm();
final Composite form = sform.getBody();
GridLayout layout = new GridLayout(2, equalWidth);
form.setLayout(layout);
form.setLayoutData(new GridData(GridData.FILL_BOTH));
return form;
}
public Form2Panel setup2ColumnLayout(IManagedForm managedForm, int w1, int w2) {
final ScrolledForm sform = managedForm.getForm();
final Composite form = sform.getBody();
form.setLayout(new GridLayout(1, false)); // this is required !
Composite xtra = toolkit.createComposite(form);
xtra.setLayout(new GridLayout(1, false));
xtra.setLayoutData(new GridData(GridData.FILL_BOTH));
Control c = xtra.getParent();
while (!(c instanceof ScrolledComposite))
c = c.getParent();
((GridData) xtra.getLayoutData()).widthHint = c.getSize().x;
((GridData) xtra.getLayoutData()).heightHint = c.getSize().y;
sashForm = new SashForm(xtra, SWT.HORIZONTAL);
sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); // needed
leftPanel = newComposite(sashForm);
((GridLayout) leftPanel.getLayout()).marginHeight = 5;
((GridLayout) leftPanel.getLayout()).marginWidth = 5;
rightPanel = newComposite(sashForm);
((GridLayout) rightPanel.getLayout()).marginHeight = 5;
((GridLayout) rightPanel.getLayout()).marginWidth = 5;
sashForm.setWeights(new int[] { w1, w2 });
leftPanelPercent = (float) w1 / (float) (w1 + w2);
rightPanelPercent = (float) w2 / (float) (w1 + w2);
rightPanel.addControlListener(new ControlAdapter() {
public void controlResized(ControlEvent e) {
setSashFormWidths();
}
});
return new Form2Panel(form, leftPanel, rightPanel);
}
void setSashFormWidths() {
sashFormWidth = sashForm.getSize().x;
int[] ws = sashForm.getWeights();
leftPanelWidth = (int) (((float) ws[0] / (float) (ws[0] + ws[1])) * sashFormWidth);
rightPanelWidth = (int) (((float) ws[1] / (float) (ws[0] + ws[1])) * sashFormWidth);
}
/**
* Sash impl
*
* @param managedForm
* @param equalWidth
* @return
*/
public Form2Panel setup2ColumnLayout(IManagedForm managedForm, boolean equalWidth) {
if (equalWidth)
return setup2ColumnLayout(managedForm, 50, 50);
else
// a hack - based on first column more likely being wider
return setup2ColumnLayout(managedForm, 60, 40);
}
public Form2Panel setup2ColumnLayoutNotSash(IManagedForm managedForm, boolean equalWidth) {
final ScrolledForm sform = managedForm.getForm();
final Composite form = sform.getBody();
GridLayout layout = new GridLayout(2, equalWidth);
form.setLayout(layout);
form.setLayoutData(new GridData(GridData.FILL_BOTH));
leftPanel = newComposite(form);
rightPanel = newComposite(form);
// strategy for setting size hints of right and left panels
// Why set hints? Because they make the inner containing things
// scroll horiz. if they're too wide (useful for aggregates having
// long names).
// What hint to set? The hint should be the smallest size you want
// with child scrolling, before the tabbed page container itself
// gets a scroll bar.
// When in the life cycle to do this? Only need to do it once, but
// after the Grid Layout has happened. This can be the first resizing
// event (learned this by debugging)
sform.addListener(SWT.Resize, new Listener() {
public void handleEvent(Event event) {
float col1CurrentWidth = leftPanel.getSize().x;
float col2CurrentWidth = rightPanel.getSize().x;
final int minLeftPanelWidth = 250; // in pels
final int minRightPanelWidth = (int) (col2CurrentWidth * minLeftPanelWidth / col1CurrentWidth);
((GridData) leftPanel.getLayoutData()).widthHint = minLeftPanelWidth;
((GridData) rightPanel.getLayoutData()).widthHint = minRightPanelWidth;
sform.removeListener(SWT.Resize, this); // only do this one time
}
});
return new Form2Panel(form, leftPanel, rightPanel);
}
public Form2Panel setup2ColumnLayoutOn4Grid(IManagedForm managedForm, boolean equalWidth) {
Form2Panel f = setup2ColumnLayoutNotSash(managedForm, equalWidth);
((GridLayout) f.form.getLayout()).numColumns = 4;
((GridData) f.left.getLayoutData()).horizontalSpan = 2;
((GridData) f.right.getLayoutData()).horizontalSpan = 2;
return f;
}
protected void spacer(Composite container) {
toolkit.createLabel(container, " ");
}
public void markStale() {
if (getManagedForm() != null) {
IFormPart[] parts = getManagedForm().getParts();
for (int i = 0; i < parts.length; i++) {
((AbstractFormPart) parts[i]).markStale();
}
}
}
// **************************************************
// * Model Access
// **************************************************
protected boolean isPrimitive() {
return editor.getAeDescription().isPrimitive();
}
protected boolean isAeDescriptor() {
return editor.isAeDescriptor();
}
public boolean isTypeSystemDescriptor() {
return editor.isTypeSystemDescriptor();
}
public boolean isIndexDescriptor() {
return editor.isFsIndexCollection();
}
public boolean isTypePriorityDescriptor() {
return editor.isTypePriorityDescriptor();
}
public boolean isExtResAndBindingsDescriptor() {
return editor.isExtResAndBindingsDescriptor();
}
public boolean isCollectionReaderDescriptor() {
return editor.isCollectionReaderDescriptor();
}
public boolean isCasInitializerDescriptor() {
return editor.isCasInitializerDescriptor();
}
public boolean isCasConsumerDescriptor() {
return editor.isCasConsumerDescriptor();
}
public boolean isLocalProcessingDescriptor() {
return editor.isLocalProcessingDescriptor();
}
protected AnalysisEngineMetaData getAnalysisEngineMetaData() {
return editor.getAeDescription().getAnalysisEngineMetaData();
}
// **************************************************
// * Common Actions in Handlers
// **************************************************
}