blob: 7dc173b856001486f32395472ea795d4c15f1d32 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2010 IBM Corporation and others.
* 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
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.internal.ua.ui.editor.cheatsheet.simple.details;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Path;
import org.eclipse.jface.window.Window;
import org.eclipse.pde.internal.core.util.PDETextHelper;
import org.eclipse.pde.internal.ua.core.cheatsheet.simple.ISimpleCSHelpObject;
import org.eclipse.pde.internal.ua.ui.editor.cheatsheet.CSAbstractSubDetails;
import org.eclipse.pde.internal.ua.ui.editor.cheatsheet.ICSMaster;
import org.eclipse.pde.internal.ua.ui.editor.cheatsheet.simple.SimpleCSInputContext;
import org.eclipse.pde.internal.ui.editor.FormLayoutFactory;
import org.eclipse.pde.internal.ui.parts.ComboPart;
import org.eclipse.pde.internal.ui.util.FileExtensionsFilter;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
import org.eclipse.ui.forms.IFormColors;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.Section;
import org.eclipse.ui.model.WorkbenchContentProvider;
import org.eclipse.ui.model.WorkbenchLabelProvider;
/**
* SimpleCSHelpDetailsSection
*
*/
public class SimpleCSHelpDetails extends CSAbstractSubDetails {
private Text fHelpText;
private ComboPart fHelpCombo;
private Label fHelpLabel;
private Button fHelpBrowse;
private ISimpleCSHelpObject fHelpObject;
private Section fHelpSection;
private boolean fBlockListeners;
private static final String F_NO_HELP = SimpleDetailsMessages.SimpleCSHelpDetails_none;
private static final String F_HELP_CONTEXT_ID = SimpleDetailsMessages.SimpleCSHelpDetails_helpContextID;
private static final String F_HELP_DOCUMENT_LINK = SimpleDetailsMessages.SimpleCSHelpDetails_helpDocumentLink;
/**
* @param section
*/
public SimpleCSHelpDetails(ICSMaster section) {
super(section, SimpleCSInputContext.CONTEXT_ID);
fHelpObject = null;
fBlockListeners = false;
fHelpText = null;
fHelpCombo = null;
fHelpLabel = null;
fHelpBrowse = null;
fHelpSection = null;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.pde.internal.ui.editor.cheatsheet.CSAbstractDetails#setData
* (java.lang.Object)
*/
public void setData(ISimpleCSHelpObject object) {
// Set data
fHelpObject = object;
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.pde.internal.ui.editor.cheatsheet.simple.details.ISimpleCSDetails
* #createDetails(org.eclipse.swt.widgets.Composite)
*/
public void createDetails(Composite parent) {
int columnSpan = 3;
FormToolkit toolkit = getToolkit();
GridData data = null;
Label label = null;
Color foreground = toolkit.getColors().getColor(IFormColors.TITLE);
// Create help section
fHelpSection = toolkit.createSection(parent, Section.DESCRIPTION
| ExpandableComposite.TITLE_BAR | ExpandableComposite.TWISTIE);
fHelpSection.clientVerticalSpacing = FormLayoutFactory.SECTION_HEADER_VERTICAL_SPACING;
fHelpSection
.setText(SimpleDetailsMessages.SimpleCSHelpDetails_helpSectionText);
fHelpSection
.setDescription(SimpleDetailsMessages.SimpleCSHelpDetails_helpSectionDesc);
fHelpSection.setLayout(FormLayoutFactory
.createClearGridLayout(false, 1));
data = new GridData(GridData.FILL_HORIZONTAL);
fHelpSection.setLayoutData(data);
// Create container for help section
Composite helpSectionClient = toolkit.createComposite(fHelpSection);
helpSectionClient.setLayout(FormLayoutFactory
.createSectionClientGridLayout(false, columnSpan));
// Attribute: href
// Attribute: contextId
label = toolkit.createLabel(helpSectionClient,
SimpleDetailsMessages.SimpleCSHelpDetails_attrType, SWT.WRAP);
label.setForeground(foreground);
// Attribute: href
// Attribute: contextId
fHelpCombo = new ComboPart();
fHelpCombo.createControl(helpSectionClient, toolkit, SWT.READ_ONLY);
GridData comboData = new GridData(GridData.FILL_HORIZONTAL);
comboData.horizontalSpan = columnSpan - 1;
fHelpCombo.getControl().setLayoutData(comboData);
fHelpCombo.add(F_NO_HELP);
fHelpCombo.add(F_HELP_CONTEXT_ID);
fHelpCombo.add(F_HELP_DOCUMENT_LINK);
fHelpCombo.setText(F_NO_HELP);
// Attribute: href
// Attribute: contextId
fHelpLabel = toolkit.createLabel(helpSectionClient,
SimpleDetailsMessages.SimpleCSHelpDetails_attrValue, SWT.WRAP);
fHelpLabel.setForeground(foreground);
// Attribute: href
// Attribute: contextId
fHelpText = toolkit.createText(helpSectionClient, null);
data = new GridData(GridData.FILL_HORIZONTAL);
fHelpText.setLayoutData(data);
// Browse Button
fHelpBrowse = toolkit.createButton(helpSectionClient,
SimpleDetailsMessages.SimpleCSHelpDetails_browse, SWT.PUSH);
// Bind widgets
toolkit.paintBordersFor(helpSectionClient);
fHelpSection.setClient(helpSectionClient);
// Mark as a details part to enable cut, copy, paste, etc.
markDetailsPart(fHelpSection);
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.pde.internal.ui.editor.cheatsheet.simple.details.ISimpleCSDetails
* #hookListeners()
*/
public void hookListeners() {
// Attribute: href
// Attribute: contextId
fHelpCombo.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// Ensure data object is defined
if (fHelpObject == null) {
return;
}
String selection = fHelpCombo.getSelection();
if (selection.equals(F_NO_HELP) == false) {
// Help was selected
if (selection.equals(F_HELP_CONTEXT_ID)) {
// Help context ID was selected, clear the help
// document link value
fHelpObject.setHref(null);
fHelpBrowse.setEnabled(false);
} else {
// Help document link was selected, clear the help
// context ID value
fHelpObject.setContextId(null);
fHelpBrowse.setEnabled(true);
}
// Make the label and text field visible
fHelpLabel.setVisible(true);
fHelpText.setVisible(true);
fHelpBrowse.setVisible(true);
// Set the focus on the text field
fHelpText.setFocus();
// Clear the previous contents of the text field
// (Will cause field to become dirty)
fHelpText.setText(""); //$NON-NLS-1$
fHelpText.setToolTipText(""); //$NON-NLS-1$
} else {
// No help was selected
// Make the label and text field invisible
fHelpLabel.setVisible(false);
fHelpText.setVisible(false);
fHelpBrowse.setVisible(false);
// Clear values for help in model
fHelpObject.setContextId(null);
fHelpObject.setHref(null);
}
}
});
// Attribute: href
// Attribute: contextId
fHelpText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
// Block UI updates
if (fBlockListeners) {
return;
}
// Ensure data object is defined
if (fHelpObject == null) {
return;
}
String selection = fHelpCombo.getSelection();
if (selection.equals(F_HELP_CONTEXT_ID)) {
// Help context ID was selected, save the field contents
// as such
fHelpObject.setContextId(fHelpText.getText());
} else {
// Help document link was selected, save the field contents
// as such
fHelpObject.setHref(fHelpText.getText());
}
// Update tooltip
fHelpText.setToolTipText(fHelpText.getText());
}
});
fHelpBrowse.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
handleButtonSelectedEventBrowse(e);
}
});
}
/**
* @param event
*/
private void handleButtonSelectedEventBrowse(SelectionEvent event) {
// Create the dialog
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(
getManagedForm().getForm().getShell(),
new WorkbenchLabelProvider(), new WorkbenchContentProvider());
// Disable multiple selection
dialog.setAllowMultiple(false);
// Title
dialog.setTitle(SimpleDetailsMessages.SimpleCSHelpDetails_dialogTitle);
// Message
dialog.setMessage(SimpleDetailsMessages.SimpleCSHelpDetails_dialogMessage);
// Add valid file extensions to filter by
FileExtensionsFilter filter = new FileExtensionsFilter();
filter.addFileExtension("htm"); //$NON-NLS-1$
filter.addFileExtension("html"); //$NON-NLS-1$
filter.addFileExtension("shtml"); //$NON-NLS-1$
filter.addFileExtension("xhtml"); //$NON-NLS-1$
dialog.addFilter(filter);
// Set the input as all workspace projects
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
dialog.setInput(root);
// Set the initial selection using the existing path (if any)
Path path = new Path(fHelpText.getText());
// Path must be non-empty, absolute and have at least two segments
if ((path.isEmpty() == false) && path.isAbsolute()
&& (path.segmentCount() > 1)) {
IFile helpDocumentFile = root.getFile(path);
dialog.setInitialSelection(helpDocumentFile);
}
// Open the dialog
if (dialog.open() == Window.OK) {
// Get the selection
Object result = dialog.getFirstResult();
// Ensure a file was selected
if (!(result instanceof IFile)) {
return;
}
IFile file = (IFile) result;
// Get the absolute path
String absolutePath = file.getFullPath().toPortableString();
// Update the field
fHelpText.setText(absolutePath);
}
}
/*
* (non-Javadoc)
*
* @see
* org.eclipse.pde.internal.ui.editor.cheatsheet.simple.details.ISimpleCSDetails
* #updateFields()
*/
public void updateFields() {
// Ensure data object is defined
if (fHelpObject == null) {
return;
}
boolean editable = isEditableElement();
boolean expanded = false;
// Block model updates
fBlockListeners = true;
// Attribute: contextId
// Attribute: href
if (PDETextHelper.isDefined(fHelpObject.getContextId())) {
fHelpText.setText(fHelpObject.getContextId());
fHelpText.setToolTipText(fHelpObject.getContextId());
fHelpCombo.setText(F_HELP_CONTEXT_ID);
expanded = true;
} else if (PDETextHelper.isDefined(fHelpObject.getHref())) {
fHelpText.setText(fHelpObject.getHref());
fHelpText.setToolTipText(fHelpObject.getHref());
fHelpCombo.setText(F_HELP_DOCUMENT_LINK);
expanded = true;
} else {
fHelpCombo.setText(F_NO_HELP);
}
// Unblock model updates
fBlockListeners = false;
fHelpSection.setExpanded(expanded);
fHelpText.setEnabled(editable);
fHelpText.setVisible(expanded);
fHelpLabel.setVisible(expanded);
fHelpBrowse.setVisible(expanded);
fHelpCombo.setEnabled(editable);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.forms.AbstractFormPart#commit(boolean)
*/
public void commit(boolean onSave) {
super.commit(onSave);
// NO-OP
// No form entries
}
}