/*****************************************************************************
* Copyright (c) 2010 CEA LIST.
*
* 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:
* Remi Schnekenburger (CEA LIST) remi.schnekenburger@cea.fr - Initial API and implementation
*****************************************************************************/
package org.eclipse.papyrus.customization.palette.dialog;
import java.util.List;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.papyrus.uml.diagram.common.Activator;
import org.eclipse.papyrus.uml.diagram.common.Messages;
import org.eclipse.papyrus.uml.diagram.paletteconfiguration.Configuration;
import org.eclipse.papyrus.uml.diagram.paletteconfiguration.IconDescriptor;
import org.eclipse.papyrus.uml.diagram.paletteconfiguration.PaletteconfigurationFactory;
import org.eclipse.papyrus.uml.diagram.paletteconfiguration.ToolConfiguration;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.MouseEvent;
import org.eclipse.swt.events.MouseListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
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.uml2.uml.Profile;
/**
* Class in charge of the composite in the {@link LocalPaletteContentPage}
*/
public class ConfigurationInformationComposite {
/** current selected entry proxy */
protected Configuration selectedConfiguration;
/** proxy name text */
protected Text nameText;
/** proxy description text */
protected Text descriptionText;
/** proxy icon text */
protected Text iconText;
/** referenced proxy text */
protected Text referencedText;
/** list of applied profiles */
protected List<Profile> appliedProfiles;
/** button for icon selection */
protected Button iconButton;
/** protocol for platform plugin URLs */
protected static final String PLUGIN_PROTOCOL = "platform:/plugin/"; //$NON-NLS-1$
/**
* Creates the content of the information composite
*
* @param parent
* the composite where to add created controls
* @param appliedProfiles
* the list of applied profiles
* @return the newly created composite
*/
public Composite createComposite(final Composite parent, List<Profile> appliedProfiles) {
this.appliedProfiles = appliedProfiles;
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout(3, false);
composite.setLayout(layout);
GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.widthHint = 260;
data.horizontalIndent = 10;
composite.setLayoutData(data);
Label entryInformationLabel = new Label(composite, SWT.NONE);
entryInformationLabel.setText(Messages.Local_Palette_Entry_Information);
data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.horizontalSpan = 3;
entryInformationLabel.setLayoutData(data);
Label nameLabel = new Label(composite, SWT.NONE);
nameLabel.setText(Messages.Local_Palette_Entry_Name);
data = new GridData(SWT.FILL, SWT.FILL, false, false);
nameLabel.setLayoutData(data);
nameText = new Text(composite, SWT.LEAD | SWT.BORDER);
data = new GridData(SWT.FILL, SWT.FILL, true, false);
nameText.setLayoutData(data);
nameText.addFocusListener(new NameFocusListener());
data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.horizontalSpan = 2;
nameText.setLayoutData(data);
Label referencedLabel = new Label(composite, SWT.NONE);
referencedLabel.setText(Messages.Local_Palette_Entry_Reference);
data = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
referencedLabel.setLayoutData(data);
referencedText = new Text(composite, SWT.LEAD | SWT.BORDER | SWT.READ_ONLY);
data = new GridData(SWT.FILL, SWT.FILL, true, false);
referencedText.setLayoutData(data);
data = new GridData(SWT.FILL, SWT.FILL, true, false);
data.horizontalSpan = 2;
referencedText.setLayoutData(data);
Label descriptionLabel = new Label(composite, SWT.NONE);
descriptionLabel.setText(Messages.Local_Palette_Entry_Description);
data = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
descriptionLabel.setLayoutData(data);
descriptionText = new Text(composite, SWT.WRAP | SWT.BORDER);
data = new GridData(SWT.FILL, SWT.FILL, true, true);
data.horizontalSpan = 2;
data.widthHint = 160;
descriptionText.setLayoutData(data);
descriptionText.addFocusListener(new DescriptionFocusListener());
Label iconLabel = new Label(composite, SWT.NONE);
iconLabel.setText(Messages.Local_Palette_Entry_Icon);
data = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
iconLabel.setLayoutData(data);
iconText = new Text(composite, SWT.LEAD | SWT.BORDER);
data = new GridData(SWT.FILL, SWT.FILL, true, false);
iconText.setLayoutData(data);
iconText.addFocusListener(new IconFocusListener());
iconButton = new Button(composite, SWT.NONE);
iconButton.setText("Select...");
iconButton.addMouseListener(new MouseListener() {
/**
* @{inheritDoc
*/
public void mouseUp(MouseEvent e) {
BundleIconExplorerDialog dialog = new BundleIconExplorerDialog(parent.getShell(), iconText.getText());
if(Dialog.OK == dialog.open()) {
Object[] values = dialog.getResult();
if(values.length != 1) {
Activator.log.error("Waiting one icon path, but found " + values.length, null);
} else {
iconText.setText(values[0].toString());
String bundleId = dialog.getCurrentBundleName();
String iconPath = dialog.getIconPath();
updateIconInConfiguration(bundleId, iconPath);
}
}
}
/**
* @{inheritDoc
*/
public void mouseDown(MouseEvent e) {
}
/**
* @{inheritDoc
*/
public void mouseDoubleClick(MouseEvent e) {
}
});
return composite;
}
private void updateIconInConfiguration(String bundleId, String iconPath) {
if(selectedConfiguration != null) {
IconDescriptor descriptor = PaletteconfigurationFactory.eINSTANCE.createIconDescriptor();
if(bundleId != null && iconPath != null) {
descriptor.setPluginID(bundleId);
descriptor.setIconPath(iconPath);
}
selectedConfiguration.setIcon(descriptor);
}
}
/**
* Updates the name field in the information area
*/
protected void updateNameEntryField() {
if(selectedConfiguration != null) {
nameText.setText((selectedConfiguration.getLabel() != null) ? selectedConfiguration.getLabel() : "");
nameText.setEnabled(true);
} else {
nameText.setText("");
nameText.setEnabled(false);
}
}
/**
* Updates the reference field in the information area
*/
protected void updateReferencedEntryField() {
if(selectedConfiguration instanceof ToolConfiguration) {
ToolConfiguration configuration = ((ToolConfiguration)selectedConfiguration);
} else {
referencedText.setText("");
referencedText.setEnabled(false);
}
}
/**
* Updates the description field in the information area
*/
protected void updateDescriptionEntryField() {
if(selectedConfiguration != null) {
descriptionText.setText((selectedConfiguration.getDescription() != null) ? selectedConfiguration.getDescription() : "");
descriptionText.setEnabled(true);
} else {
descriptionText.setText("");
descriptionText.setEnabled(false);
}
}
/**
* Updates the icon field in the information area
*/
protected void updateIconEntryField() {
if(selectedConfiguration != null) {
IconDescriptor descriptor = selectedConfiguration.getIcon();
if(descriptor != null) {
String iconPath = descriptor.getIconPath();
String bundleId = descriptor.getPluginID();
if(iconPath != null && bundleId != null) {
iconText.setText(PLUGIN_PROTOCOL + bundleId + iconPath);
}
}
iconText.setEnabled(true);
} else {
iconText.setText("");
iconText.setEnabled(true);
}
}
/**
* Sets the new Selected entry
*
* @param configuration
* the selectedConfiguration to set
*/
public void setSelectedConfiguration(Configuration configuration) {
this.selectedConfiguration = configuration;
updateNameEntryField();
updateIconEntryField();
updateReferencedEntryField();
updateDescriptionEntryField();
}
/**
* focus listener for the name text field
*/
protected class NameFocusListener implements FocusListener {
/**
* @{inheritDoc
*/
public void focusGained(FocusEvent e) {
}
/**
* @{inheritDoc
*/
public void focusLost(FocusEvent e) {
if(selectedConfiguration != null) {
selectedConfiguration.setLabel(nameText.getText().trim());
}
}
}
/**
* focus listener for the name text field
*/
protected class DescriptionFocusListener implements FocusListener {
/**
* @{inheritDoc
*/
public void focusGained(FocusEvent e) {
}
/**
* @{inheritDoc
*/
public void focusLost(FocusEvent e) {
if(selectedConfiguration != null) {
selectedConfiguration.setDescription(descriptionText.getText().trim());
}
}
}
/**
* focus listener for the name text field
*/
protected class IconFocusListener implements FocusListener {
/**
* @{inheritDoc
*/
public void focusGained(FocusEvent e) {
}
/**
* @{inheritDoc
*/
public void focusLost(FocusEvent e) {
String text = iconText.getText();
if(selectedConfiguration != null && text != null && !text.equals("")) {
// parse the text....
if(!text.startsWith(PLUGIN_PROTOCOL)) {
return;
}
text = text.substring(PLUGIN_PROTOCOL.length(), text.length());
int i = text.indexOf("/");
if(i < 1) {
return;
}
String bundlePath = text.substring(0, i);
String iconPath = text.substring(bundlePath.length(), text.length());
updateIconInConfiguration(bundlePath, iconPath);
}
}
}
}