/******************************************************************************
* Copyright (c) 2007, 2008 Edgar Espina.
* All rights reserved. This program and the accompanying materials
* are 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
*
*******************************************************************************/
package org.deved.antlride.ui;
import org.deved.antlride.core.util.AntlrTextHelper;
import org.deved.antlride.ui.text.AntlrTextSelection;
import org.eclipse.dltk.ui.preferences.SectionManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyledText;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.TableWrapLayout;
public class AntlrUIHelper {
public static void select(StyledText styledText,
AntlrTextSelection selection) {
int line = selection.getStartLine();
String text = styledText.getText();
int offset = AntlrTextHelper.getOffsetAtLine(text, line);
offset += selection.getOffset();
int start = offset;
int end = start + selection.getLength();
if (start == end) {
select(styledText, start);
} else if (end == text.length() && (end - start) == 1) {
select(styledText, end);
} else {
select(styledText, start, end);
}
}
public static void select(StyledText styledText, int start, int end) {
try {
styledText.setSelection(start, end);
} catch (IllegalArgumentException iaex) {
if ((end - start) == 1) {
select(styledText, start);
}
}
styledText.setFocus();
}
public static void select(StyledText styledText, int start) {
while (start > 0) {
try {
styledText.setSelection(start);
start = -1;
} catch (IllegalArgumentException iaex) {
start--;
}
}
styledText.setFocus();
}
public static ScrolledForm createScrolledForm(Composite parent) {
FormToolkit toolkit = AntlrUI.getDefault().getDialogsFormToolkit();
final ScrolledForm form = toolkit.createScrolledForm(parent);
form.setLayoutData(new GridData(GridData.FILL_BOTH));
form.getBody().setLayout(new TableWrapLayout());
return form;
}
public static Composite createSubsection(Composite parent,
SectionManager manager, String label) {
if (manager != null) {
return manager.createSection(label);
} else {
Group group = new Group(parent, SWT.SHADOW_NONE);
group.setText(label);
GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false);
group.setLayoutData(data);
return group;
}
}
public static Composite createExpandableSection(final ScrolledForm form,
String label, boolean expanded) {
return createExpandableSection(form, label, expanded, new GridLayout(2,
false));
}
public static Composite createExpandableSection(final ScrolledForm form,
String label, boolean expanded, Layout layout) {
FormToolkit toolkit = AntlrUI.getDefault().getDialogsFormToolkit();
ExpandableComposite excomposite = toolkit
.createSection(form.getBody(), ExpandableComposite.TWISTIE
| ExpandableComposite.CLIENT_INDENT);
excomposite.setText(label);
Composite composite = toolkit.createComposite(excomposite);
excomposite.setClient(composite);
excomposite.setExpanded(expanded);
excomposite.addExpansionListener(new ExpansionAdapter() {
public void expansionStateChanged(ExpansionEvent e) {
form.reflow(true);
}
});
composite.setLayout(layout);
return composite;
}
}